* elf.c: (assign_section_numbers) Set sh_entsize for .stab only
authorAlan Modra <amodra@gmail.com>
Wed, 10 Jul 2002 04:59:42 +0000 (04:59 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 10 Jul 2002 04:59:42 +0000 (04:59 +0000)
when not already set.
* elf64-sparc.c: (sparc64_elf_fake_sections): New function.
(elf_backend_fake_sections): Define.

bfd/ChangeLog
bfd/elf.c
bfd/elf64-sparc.c

index 3790881..0c65627 100644 (file)
@@ -1,3 +1,10 @@
+2002-07-10  Marco Walther  <Marco.Walther@sun.com>
+
+       * elf.c: (assign_section_numbers) Set sh_entsize for .stab only
+       when not already set.
+       * elf64-sparc.c: (sparc64_elf_fake_sections): New function.
+       (elf_backend_fake_sections): Define.
+
 2002-07-10  Alan Modra  <amodra@bigpond.net.au>
 
        * merge.c (_bfd_merge_section): Remove redundant output_section check.
index 8dcb4d5..ef2c3da 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2760,8 +2760,9 @@ assign_section_numbers (abfd)
                  elf_section_data (s)->this_hdr.sh_link = d->this_idx;
 
                  /* This is a .stab section.  */
-                 elf_section_data (s)->this_hdr.sh_entsize =
-                   4 + 2 * bfd_get_arch_size (abfd) / 8;
+                 if (elf_section_data (s)->this_hdr.sh_entsize == 0)
+                   elf_section_data (s)->this_hdr.sh_entsize
+                     = 4 + 2 * bfd_get_arch_size (abfd) / 8;
                }
            }
          break;
index 0ae3813..7dd51f7 100644 (file)
@@ -72,6 +72,9 @@ static void sparc64_elf_symbol_processing
 static boolean sparc64_elf_merge_private_bfd_data
   PARAMS ((bfd *, bfd *));
 
+static boolean sparc64_elf_fake_sections
+  PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *));
+
 static const char *sparc64_elf_print_symbol_all
   PARAMS ((bfd *, PTR, asymbol *));
 static boolean sparc64_elf_relax_section
@@ -2995,6 +2998,27 @@ sparc64_elf_merge_private_bfd_data (ibfd, obfd)
     }
   return true;
 }
+
+/* MARCO: Set the correct entry size for the .stab section.  */
+
+static boolean
+sparc64_elf_fake_sections (abfd, hdr, sec)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     Elf32_Internal_Shdr *hdr ATTRIBUTE_UNUSED;
+     asection *sec;
+{
+  const char *name;
+
+  name = bfd_get_section_name (abfd, sec);
+
+  if (strcmp (name, ".stab") == 0)
+    {
+      /* Even in the 64bit case the stab entries are only 12 bytes long.  */
+      elf_section_data (sec)->this_hdr.sh_entsize = 12;
+    }
+  
+  return true;
+}
 \f
 /* Print a STT_REGISTER symbol to file FILE.  */
 
@@ -3132,6 +3156,8 @@ const struct elf_size_info sparc64_elf_size_info =
   sparc64_elf_output_arch_syms
 #define bfd_elf64_bfd_merge_private_bfd_data \
   sparc64_elf_merge_private_bfd_data
+#define elf_backend_fake_sections \
+  sparc64_elf_fake_sections
 
 #define elf_backend_size_info \
   sparc64_elf_size_info