]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
objdump: Check the SEC_CODE bit for code
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 7 Sep 2025 03:28:13 +0000 (20:28 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 8 Sep 2025 12:41:45 +0000 (05:41 -0700)
If a shared library has

$ readelf -D -sW x.so | grep _PROCEDURE_LINKAGE_TABLE_
     3: 00000000000002c0     0 OBJECT  GLOBAL DEFAULT    5 _PROCEDURE_LINKAGE_TABLE_
$

Disassembler treats PLT0 as data:

$ objdump -dw x.so

x.so:     file format elf64-x86-64

Disassembly of section .plt:

00000000000002c0 <_PROCEDURE_LINKAGE_TABLE_>:
 2c0: ff 35 7a 01 10 00 ff 25 7c 01 10 00 0f 1f 40 00     .5z....%|.....@.

00000000000002d0 <foo@plt>:
 2d0: ff 25 7a 01 10 00     jmp    *0x10017a(%rip)        # 100450 <foo>
 2d6: 68 00 00 00 00        push   $0x0
 2db: e9 e0 ff ff ff        jmp    2c0 <_PROCEDURE_LINKAGE_TABLE_>

Disassembly of section .text:

00000000000002e0 <func>:
 2e0: e8 eb ff ff ff        call   2d0 <foo@plt>
 2e5: c3                    ret

Check the SEC_CODE bit on section for code.

PR binutils/33389
* objdump.c (disassemble_section): Check SEC_CODE for code.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
binutils/objdump.c

index 0bea4d0761c5e643c4629c0924f4cef08bad6587..d322775e72db05090371a2d4ed1ddc5e51aa0859 100644 (file)
@@ -4091,6 +4091,7 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
       if (disassemble_all
          || sym == NULL
          || sym->section != section
+         || (section->flags & SEC_CODE) != 0
          || bfd_asymbol_value (sym) > addr
          || ((sym->flags & BSF_OBJECT) == 0
              && (strstr (bfd_asymbol_name (sym), "gnu_compiled")