From eae06bb301512a21277dd48a4bff025c4dceda9e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20Chigot?= Date: Mon, 15 Nov 2021 10:37:36 +0100 Subject: [PATCH] COFF: avoid modifications over C_FILE filename aux entries. Commit e86fc4a5bc37 ("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. --- bfd/coffgen.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 40f1ac718e4..5474f6c24d8 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -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); -- 2.30.2