diff options
author | Alan Modra <amodra@gmail.com> | 2023-07-28 12:44:17 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-07-28 14:11:27 +0930 |
commit | 41c8b9f097ecabeb17b605ee6e0ceffac9a6243a (patch) | |
tree | 18d602794d56959e9b04717c3781213c516deedc /binutils | |
parent | 6551c119bf788b6b9e3475e5bacf21d589ba9405 (diff) | |
download | gdb-41c8b9f097ecabeb17b605ee6e0ceffac9a6243a.zip gdb-41c8b9f097ecabeb17b605ee6e0ceffac9a6243a.tar.gz gdb-41c8b9f097ecabeb17b605ee6e0ceffac9a6243a.tar.bz2 |
coff/pe/xcoff and --extract-symbols
This fixes failure of the "extract symbols" test for rs6000, where
--extract-symbols generates a non-zero sized .text. By the look of
coffcode.h the same problem might occur for coff/pe too, but doesn't
happen to trigger a test failure.
bfd/
* coffcode.h (coff_compute_section_file_positions): Don't
adjust size of !SEC_LOAD sections.
binutils/
* objcopy.c (setup_section): Clear SEC_LOAD for --extract-symbol.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/objcopy.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/binutils/objcopy.c b/binutils/objcopy.c index beb655c..b2b7ab6 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -4161,13 +4161,25 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC)); flags = check_new_section_flags (flags, obfd, bfd_section_name (isection)); } - else if (strip_symbols == STRIP_NONDEBUG - && (flags & (SEC_ALLOC | SEC_GROUP)) != 0 - && !is_nondebug_keep_contents_section (ibfd, isection)) + else { - flagword clr = SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP; - - if (bfd_get_flavour (obfd) == bfd_target_elf_flavour) + flagword clr = 0; + + /* For --extract-symbols where section sizes are zeroed, clear + SEC_LOAD to indicate to coff_compute_section_file_positions that + section sizes should not be adjusted for ALIGN_SECTIONS_IN_FILE. + We don't want to clear SEC_HAS_CONTENTS as that will result + in symbols being classified as 'B' by nm. */ + if (extract_symbol) + clr = SEC_LOAD; + /* If only keeping debug sections then we'll be keeping section + sizes in headers but making the sections have no contents. */ + else if (strip_symbols == STRIP_NONDEBUG + && (flags & (SEC_ALLOC | SEC_GROUP)) != 0 + && !is_nondebug_keep_contents_section (ibfd, isection)) + clr = SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP; + + if (clr && bfd_get_flavour (obfd) == bfd_target_elf_flavour) { /* PR 29532: Copy group sections intact as otherwise we end up with empty groups. This prevents separate debug info files from @@ -4175,7 +4187,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) originally contained groups. */ if (flags & SEC_GROUP) clr = SEC_LOAD; - else + if ((clr & SEC_HAS_CONTENTS) != 0) make_nobits = true; /* Twiddle the input section flags so that it seems to |