diff options
author | Alan Modra <amodra@gmail.com> | 2023-02-11 08:36:24 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-02-11 16:43:54 +1030 |
commit | 0a3137ce4c4b38ee8b26c09824633b827fed4cb1 (patch) | |
tree | 37913b106916fe608c5fbfebd109f99dd0e8220c /binutils | |
parent | 480ddaa9784c652b7c575e17799e0408ac4e5b01 (diff) | |
download | gdb-0a3137ce4c4b38ee8b26c09824633b827fed4cb1.zip gdb-0a3137ce4c4b38ee8b26c09824633b827fed4cb1.tar.gz gdb-0a3137ce4c4b38ee8b26c09824633b827fed4cb1.tar.bz2 |
objdump -D of bss sections and -s with -j
There is some inconsistency between the behaviour of objdump -D and
objdump -s, both supposedly operating on all sections by default.
objdump -s ignores bss sections, while objdump -D dissassembles the
zeros. Fix this by making objdump -D ignore bss sections too.
Furthermore, "objdump -s -j .bss" doesn't dump .bss as it should,
since the user is specifically asking to look at all those zeros.
This change does find some tests that used objdump -D with expected
output in bss-style sections. I've updated all the msp430 tests that
just wanted to find a non-empty section to look at section headers
instead, making the tests slightly more stringent. The ppc xcoff and
spu tests are fixed by adding -j options to objdump, which makes the
tests somewhat more lenient.
binutils/
* objdump.c (disassemble_section): Ignore sections without
contents, unless overridden by -j.
(dump_section): Allow -j to override the default of not
displaying sections without contents.
* doc/binutils.texi (objdump options): Update -D, -s and -j
description.
gas/
* testsuite/gas/ppc/xcoff-tls-32.d: Select wanted objdump
sections with -j.
* testsuite/gas/ppc/xcoff-tls-64.d: Likewise.
ld/
* testsuite/ld-msp430-elf/main-bss-lower.d,
* testsuite/ld-msp430-elf/main-bss-upper.d,
* testsuite/ld-msp430-elf/main-const-lower.d,
* testsuite/ld-msp430-elf/main-const-upper.d,
* testsuite/ld-msp430-elf/main-text-lower.d,
* testsuite/ld-msp430-elf/main-text-upper.d,
* testsuite/ld-msp430-elf/main-var-lower.d,
* testsuite/ld-msp430-elf/main-var-upper.d: Expect -wh output.
* testsuite/ld-msp430-elf/msp430-elf.exp: Use objdump -wh
rather than objdump -D or objdump -d with tests checking for
non-empty given sections.
* testsuite/ld-spu/ear.d,
* testsuite/ld-spu/icache1.d,
* testsuite/ld-spu/ovl.d,
* testsuite/ld-spu/ovl2.d: Select wanted objdump sections.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/doc/binutils.texi | 13 | ||||
-rw-r--r-- | binutils/objdump.c | 29 |
2 files changed, 25 insertions, 17 deletions
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 514f8af..b1982a9 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -2407,8 +2407,9 @@ used when disassembling. @item -D @itemx --disassemble-all -Like @option{-d}, but disassemble the contents of all sections, not just -those expected to contain instructions. +Like @option{-d}, but disassemble the contents of all non-empty +non-bss sections, not just those expected to contain instructions. +@option{-j} may be used to select specific sections. This option also has a subtle effect on the disassembly of instructions in code sections. When option @option{-d} is in effect @@ -2502,7 +2503,8 @@ for specification with @option{-b} or @option{-m}. @item -j @var{name} @itemx --section=@var{name} @cindex section information -Display information only for section @var{name}. +Display information for section @var{name}. This option may be +specified multiple times. @item -L @itemx --process-links @@ -2775,8 +2777,9 @@ disassembly. @itemx --full-contents @cindex sections, full contents @cindex object file sections -Display the full contents of any sections requested. By default all -non-empty sections are displayed. +Display the full contents of sections, often used in combination with +@option{-j} to request specific sections. By default all non-empty +non-bss sections are displayed. @item -S @itemx --source diff --git a/binutils/objdump.c b/binutils/objdump.c index 4292c23..9dd1ebd 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -3685,15 +3685,18 @@ disassemble_section (bfd *abfd, asection *section, void *inf) next_sym } loop_until; - /* Sections that do not contain machine - code are not normally disassembled. */ - if (! disassemble_all - && only_list == NULL - && ((section->flags & (SEC_CODE | SEC_HAS_CONTENTS)) - != (SEC_CODE | SEC_HAS_CONTENTS))) - return; + if (only_list == NULL) + { + /* Sections that do not contain machine + code are not normally disassembled. */ + if ((section->flags & SEC_HAS_CONTENTS) == 0) + return; - if (! process_section_p (section)) + if (! disassemble_all + && (section->flags & SEC_CODE) == 0) + return; + } + else if (!process_section_p (section)) return; datasize = bfd_section_size (section); @@ -4970,10 +4973,12 @@ dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED) int count; int width; - if (! process_section_p (section)) - return; - - if ((section->flags & SEC_HAS_CONTENTS) == 0) + if (only_list == NULL) + { + if ((section->flags & SEC_HAS_CONTENTS) == 0) + return; + } + else if (!process_section_p (section)) return; if ((datasize = bfd_section_size (section)) == 0) |