adjust tracepoint field type based on size
Fix issue #1807
tracepoint may have a format like this:
(from syscalls/sys_enter_socket)
field:unsigned short common_type; offset:0; size:2; signed:0;
field:unsigned char common_flags; offset:2; size:1; signed:0;
field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
field:int common_pid; offset:4; size:4; signed:1;
field:int __syscall_nr; offset:8; size:4; signed:1;
field:int family; offset:16; size:8; signed:0;
field:int type; offset:24; size:8; signed:0;
field:int protocol; offset:32; size:8; signed:0;
Current rewriter generates:
struct tracepoint__syscalls__sys_enter_socket {
u64 __do_not_use__;
int __syscall_nr;
int family;
int type;
int protocol;
};
This is incorrect as in the above structure, offsets of
`family`/`type`/`procotol` becomingg 12/16/20.
This patch fixed the issue by adjusting field type based on its size.
The new structure:
struct tracepoint__syscalls__sys_enter_socket {
u64 __do_not_use__;
int __syscall_nr;
s64 family;
s64 type;
s64 protocol;
};
The offsets of all fields are correct now.
Signed-off-by: Yonghong Song <yhs@fb.com>
Showing
Please register or sign in to comment