forked from Imagelibrary/binutils-gdb
bfd: don't produce corrupt COFF symbol table due to long ELF file name symbols
The re-writing logic in _bfd_coff_final_link() overwrote the ".file"
part of the symbol table entry, due to not coping with the auxiliary
entry generated in all cases.
Note that while I would have wanted to add a test case,
(a) I didn't spot any one testing the base functionality here, and
(b) I wasn't able to figure out proper conditionals to use in e.g.
ld-elf/elf.exp to check for the necessary PE/PE+ support (which
varies by target).
This commit is contained in:
@@ -1066,6 +1066,7 @@ bfd_boolean
|
||||
coff_write_alien_symbol (bfd *abfd,
|
||||
asymbol *symbol,
|
||||
struct internal_syment *isym,
|
||||
union internal_auxent *iaux,
|
||||
bfd_vma *written,
|
||||
bfd_size_type *string_size_p,
|
||||
asection **debug_string_section_p,
|
||||
@@ -1151,6 +1152,8 @@ coff_write_alien_symbol (bfd *abfd,
|
||||
debug_string_section_p, debug_string_size_p);
|
||||
if (isym != NULL)
|
||||
*isym = native->u.syment;
|
||||
if (iaux != NULL && native->u.syment.n_numaux)
|
||||
*iaux = native[1].u.auxent;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1268,7 +1271,7 @@ coff_write_symbols (bfd *abfd)
|
||||
if (c_symbol == (coff_symbol_type *) NULL
|
||||
|| c_symbol->native == (combined_entry_type *) NULL)
|
||||
{
|
||||
if (!coff_write_alien_symbol (abfd, symbol, NULL, &written,
|
||||
if (!coff_write_alien_symbol (abfd, symbol, NULL, NULL, &written,
|
||||
&string_size, &debug_string_section,
|
||||
&debug_string_size))
|
||||
return FALSE;
|
||||
|
||||
Reference in New Issue
Block a user