objdump: Check the SEC_CODE bit for code

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>
This commit is contained in:
H.J. Lu
2025-09-06 20:28:13 -07:00
parent 8735dae513
commit 6b27a22032

View 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")