mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
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.
This commit is contained in:
parent
6551c119bf
commit
41c8b9f097
@ -3176,8 +3176,9 @@ coff_compute_section_file_positions (bfd * abfd)
|
||||
created and not just improve performances with gdb.
|
||||
*/
|
||||
|
||||
if ((!strcmp (current->name, _TEXT)
|
||||
|| !strcmp (current->name, _DATA))
|
||||
if ((current->flags & SEC_LOAD) != 0
|
||||
&& (!strcmp (current->name, _TEXT)
|
||||
|| !strcmp (current->name, _DATA))
|
||||
&& (previous == NULL || strcmp(previous->name, _TDATA)))
|
||||
{
|
||||
bfd_vma align = 4096;
|
||||
@ -3190,7 +3191,8 @@ coff_compute_section_file_positions (bfd * abfd)
|
||||
sofar += align + vma_off - sofar_off;
|
||||
}
|
||||
#endif
|
||||
if (previous != NULL)
|
||||
if (previous != NULL
|
||||
&& (previous->flags & SEC_LOAD) != 0)
|
||||
previous->size += sofar - old_sofar;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
flagword clr = 0;
|
||||
|
||||
if (bfd_get_flavour (obfd) == bfd_target_elf_flavour)
|
||||
/* 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
|
||||
|
Loading…
Reference in New Issue
Block a user