COFF: avoid modifications over C_FILE filename aux entries.

Commit e86fc4a5bc ("PR 28447: implement multiple parameters for .file
on XCOFF") introduces C_FILE entries which can store additional
information.
However, some modifications are needed by them but not by the original
C_FILE entries, usually representing the filename.
This patch ensures that filename entries are kept as is, in order to
protect targets not supporting the additional entries.

	* coffgen.c (coff_write_symbol): Protect filename entries
	(coff_write_symbols): Likewise.
	(coff_print_symbol): Likewise.
This commit is contained in:
Clément Chigot 2021-11-15 10:37:36 +01:00 committed by Alan Modra
parent f9402ccaa9
commit eae06bb301

View File

@ -1036,7 +1036,10 @@ coff_write_symbol (bfd *abfd,
{
BFD_ASSERT (! (native + j + 1)->is_sym);
if (native->u.syment.n_sclass == C_FILE && j > 0)
/* Adjust auxent only if this isn't the filename
auxiliary entry. */
if (native->u.syment.n_sclass == C_FILE
&& (native + j + 1)->u.auxent.x_file.x_ftype)
coff_write_auxent_fname (abfd, (char *) (native + j + 1)->extrap,
&(native + j + 1)->u.auxent, string_size_p);
@ -1423,6 +1426,11 @@ coff_write_symbols (bfd *abfd)
char *str;
size_t str_length;
/* Add strings from aux entries only if this isn't the
filename auxiliary entry. */
if (!c_symbol->native[j + 1].u.auxent.x_file.x_ftype)
continue;
if (c_symbol->native[j + 1].u.auxent.x_file.x_n.x_fname[0] != 0)
continue;
@ -2207,7 +2215,7 @@ coff_print_symbol (bfd *abfd,
fprintf (file, "File ");
/* Add additional information if this isn't the filename
auxiliary entry. */
if (aux)
if (auxp->u.auxent.x_file.x_ftype)
fprintf (file, "ftype %d fname \"%s\"",
auxp->u.auxent.x_file.x_ftype,
(char *) auxp->u.auxent.x_file.x_n.x_n.x_offset);