Re: [PATCH 02/18] objtool: Support data symbol printing

From: Peter Zijlstra
Date: Thu Apr 14 2022 - 13:00:38 EST


On Thu, Apr 14, 2022 at 08:38:54AM -0700, Josh Poimboeuf wrote:

> > Yes, I'd not seen that yet, what's that for? The Changelog alludes to
> > something, but I don't think it actually does get used later.
>
> Nick had asked for something like that, it's just a way to avoid doing
> math every time we look at a warning, i.e. to convert func+offset to
> sec+offset.
>
> But it's kind of ugly and I'm not 100% happy with it.
>
> Maybe it should be behind an option (--sec-offsets)?

Can do I suppose... Myself, I have this script:

$ cat objdump-func.sh
#!/bin/bash

OBJ=$1; shift
FUNC=$1; shift

objdump -wdr $@ $OBJ | awk "/^\$/ { P=0; } /$FUNC[^>]*>:\$/ { P=1; O=strtonum(\"0x\" \$1); } { if (P) { o=strtonum(\"0x\" \$1); printf(\"%04x \", o-O); print \$0; } }"

That prints a symbol relative offset next to the section, something
like:

$ ./objdump-func.sh defconfig-build/vmlinux.o pick_next_task_idle
0000 00000000000a9eb0 <pick_next_task_idle>:
0000 a9eb0: 41 54 push %r12
0002 a9eb2: 4c 8b a7 28 09 00 00 mov 0x928(%rdi),%r12
0009 a9eb9: 53 push %rbx
000a a9eba: 48 89 fb mov %rdi,%rbx
000d a9ebd: 66 90 xchg %ax,%ax
000f a9ebf: 66 90 xchg %ax,%ax
0011 a9ec1: 4c 89 e0 mov %r12,%rax
0014 a9ec4: 5b pop %rbx
0015 a9ec5: 41 5c pop %r12
0017 a9ec7: c3 ret
0018 a9ec8: e8 00 00 00 00 call a9ecd <pick_next_task_idle+0x1d> a9ec9: R_X86_64_PLT32 __update_idle_core-0x4
001d a9ecd: eb f0 jmp a9ebf <pick_next_task_idle+0xf>
001f a9ecf: 4c 89 e0 mov %r12,%rax
0022 a9ed2: 83 83 b8 0b 00 00 01 addl $0x1,0xbb8(%rbx)
0029 a9ed9: 5b pop %rbx
002a a9eda: 41 5c pop %r12
002c a9edc: c3 ret
002d a9edd: 0f 1f 00 nopl (%rax)