From 41c8b9f097ecabeb17b605ee6e0ceffac9a6243a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 28 Jul 2023 12:44:17 +0930 Subject: 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. --- binutils/objcopy.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'binutils') 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 -- cgit v1.1