Skip to content

Commit 3ca8243

Browse files
committed
tracing: Have unsigned int function args displayed as hexadecimal
Most function arguments that are passed in as unsigned int or unsigned long are better displayed as hexadecimal than normal integer. For example, the functions: static void __create_object(unsigned long ptr, size_t size, int min_count, gfp_t gfp, unsigned int objflags); static bool stack_access_ok(struct unwind_state *state, unsigned long _addr, size_t len); void __local_bh_disable_ip(unsigned long ip, unsigned int cnt); Show up in the trace as: __create_object(ptr=-131387050520576, size=4096, min_count=1, gfp=3264, objflags=0) <-kmem_cache_alloc_noprof stack_access_ok(state=0xffffc9000233fc98, _addr=-60473102566256, len=8) <-unwind_next_frame __local_bh_disable_ip(ip=-2127311112, cnt=256) <-handle_softirqs Instead, by displaying unsigned as hexadecimal, they look more like this: __create_object(ptr=0xffff8881028d2080, size=0x280, min_count=1, gfp=0x82820, objflags=0x0) <-kmem_cache_alloc_node_noprof stack_access_ok(state=0xffffc90000003938, _addr=0xffffc90000003930, len=0x8) <-unwind_next_frame __local_bh_disable_ip(ip=0xffffffff8133cef8, cnt=0x100) <-handle_softirqs Which is much easier to understand as most unsigned longs are usually just pointers. Even the "unsigned int cnt" in __local_bh_disable_ip() looks better as hexadecimal as a lot of flags are passed as unsigned. Changes since v2: https://lore.kernel.org/[email protected] - Use btf_int_encoding() instead of open coding it (Martin KaFai Lau) Cc: Masami Hiramatsu <[email protected]> Cc: Mathieu Desnoyers <[email protected]> Cc: Douglas Raillard <[email protected]> Cc: Martin KaFai Lau <[email protected]> Link: https://lore.kernel.org/[email protected] Acked-by: Yonghong Song <[email protected]> Signed-off-by: Steven Rostedt (Google) <[email protected]>
1 parent db5f0c3 commit 3ca8243

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

kernel/trace/trace_output.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,7 @@ void print_function_args(struct trace_seq *s, unsigned long *args,
701701
struct btf *btf;
702702
s32 tid, nr = 0;
703703
int a, p, x;
704+
u16 encode;
704705

705706
trace_seq_printf(s, "(");
706707

@@ -744,7 +745,12 @@ void print_function_args(struct trace_seq *s, unsigned long *args,
744745
trace_seq_printf(s, "0x%lx", arg);
745746
break;
746747
case BTF_KIND_INT:
747-
trace_seq_printf(s, "%ld", arg);
748+
encode = btf_int_encoding(t);
749+
/* Print unsigned ints as hex */
750+
if (encode & BTF_INT_SIGNED)
751+
trace_seq_printf(s, "%ld", arg);
752+
else
753+
trace_seq_printf(s, "0x%lx", arg);
748754
break;
749755
case BTF_KIND_ENUM:
750756
trace_seq_printf(s, "%ld", arg);

0 commit comments

Comments
 (0)