From 49d9fd42acefc1c0ee282b5808874a1074bf1ecd Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 27 Feb 2020 14:23:34 +1030 Subject: [PATCH] .idata symbols should be reported with i or I flag by nm PR 24511 * syms.c (stt): Trim off all but 'e', 'i' and 'p' entries. (coff_section_type): Adjust comment. (decode_section_type): Likewise. Call coff_section_type before decode_section_type. (bfd_decode_symclass): Use 'c' for common sections other than the standard one. --- bfd/ChangeLog | 10 ++++++++++ bfd/syms.c | 33 +++++++++++---------------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e5cf5e125e25..6b267094320b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2020-02-27 Alan Modra + + PR 24511 + * syms.c (stt): Trim off all but 'e', 'i' and 'p' entries. + (coff_section_type): Adjust comment. + (decode_section_type): Likewise. Call coff_section_type before + decode_section_type. + (bfd_decode_symclass): Use 'c' for common sections other than + the standard one. + 2020-02-27 Alan Modra * coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Put all data in one diff --git a/bfd/syms.c b/bfd/syms.c index 8a5c89767a88..c1de8ebab17c 100644 --- a/bfd/syms.c +++ b/bfd/syms.c @@ -565,30 +565,15 @@ struct section_to_type char type; }; -/* Map section names to POSIX/BSD single-character symbol types. +/* Map special section names to POSIX/BSD single-character symbol types. This table is probably incomplete. It is sorted for convenience of adding entries. Since it is so short, a linear search is used. */ static const struct section_to_type stt[] = { - {".bss", 'b'}, - {"code", 't'}, /* MRI .text */ - {".data", 'd'}, - {"*DEBUG*", 'N'}, - {".debug", 'N'}, /* MSVC's .debug (non-standard debug syms) */ {".drectve", 'i'}, /* MSVC's .drective section */ {".edata", 'e'}, /* MSVC's .edata (export) section */ - {".fini", 't'}, /* ELF fini section */ {".idata", 'i'}, /* MSVC's .idata (import) section */ - {".init", 't'}, /* ELF init section */ {".pdata", 'p'}, /* MSVC's .pdata (stack unwind) section */ - {".rdata", 'r'}, /* Read only data. */ - {".rodata", 'r'}, /* Read only data. */ - {".sbss", 's'}, /* Small BSS (uninitialized data). */ - {".scommon", 'c'}, /* Small common. */ - {".sdata", 'g'}, /* Small initialized data. */ - {".text", 't'}, - {"vars", 'd'}, /* MRI .data */ - {"zerovars", 'b'}, /* MRI .bss */ {0, 0} }; @@ -596,8 +581,7 @@ static const struct section_to_type stt[] = section S, or '?' for an unknown COFF section. Check for leading strings which match, followed by a number, '.', - or '$' so .text5 matches the .text entry, but .init_array doesn't - match the .init entry. */ + or '$' so .idata5 matches the .idata entry. */ static char coff_section_type (const char *s) @@ -619,7 +603,7 @@ coff_section_type (const char *s) SECTION, or '?' for an unknown section. This uses section flags to identify sections. - FIXME These types are unhandled: c, i, e, p. If we handled these also, + FIXME These types are unhandled: e, i, p. If we handled these also, we could perhaps obsolete coff_section_type. */ static char @@ -668,7 +652,12 @@ bfd_decode_symclass (asymbol *symbol) char c; if (symbol->section && bfd_is_com_section (symbol->section)) - return 'C'; + { + if (symbol->section == bfd_com_section_ptr) + return 'C'; + else + return 'c'; + } if (bfd_is_und_section (symbol->section)) { if (symbol->flags & BSF_WEAK) @@ -705,9 +694,9 @@ bfd_decode_symclass (asymbol *symbol) c = 'a'; else if (symbol->section) { - c = decode_section_type (symbol->section); + c = coff_section_type (symbol->section->name); if (c == '?') - c = coff_section_type (symbol->section->name); + c = decode_section_type (symbol->section); } else return '?';