This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PR24511, nm should not mark symbols in .init_array as "t"




Le 2/27/20 à 7:56 AM, Alan Modra a écrit :
On Wed, Feb 26, 2020 at 06:08:46PM +0100, KONRAD Frederic wrote:
It seems that this patch has the side effect of marking the symbols in .idata as
"D" instead of "I" previously.  Is that expected?

I guess so, but also wrong.  The patch should not have changed the
order of decode_section_type and coff_section_type calls.  I'm going
to commit this to trunk and a patch that just reverses the calls to
the branch, after testing.

	* 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.

Thanks for the fast answer,

I confirm that the patch below fix the behavior I had.


diff --git a/bfd/syms.c b/bfd/syms.c
index 8a5c89767a..c1de8ebab1 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 '?';



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]