* elf32-mips.c (mips_elf_output_extsym): Set the value of the
authorIan Lance Taylor <ian@airs.com>
Tue, 24 Jan 1995 19:27:35 +0000 (19:27 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 24 Jan 1995 19:27:35 +0000 (19:27 +0000)
ECOFF symbol from the hash table entry.

bfd/ChangeLog
bfd/elf32-mips.c

index b5605efb6dedbbf5fb55e3a5dcec1ac4c433dab8..f3b3af8c45974b18d64b5feb88ebadd7070f9f49 100644 (file)
@@ -1,3 +1,8 @@
+Tue Jan 24 14:22:47 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>
+
+       * elf32-mips.c (mips_elf_output_extsym): Set the value of the
+       ECOFF symbol from the hash table entry.
+
 Mon Jan 23 14:53:35 1995  Steve Chamberlain  <sac@splat>
 
        * coff-sh.c (coff_sh_relocate_section):  Don't subtract
index af076e0e0180bed46224c0717064d2bbbe07db7e..d8c24de6054cc1fdbc271244b6591cc47ade6723 100644 (file)
@@ -65,7 +65,7 @@ static bfd_reloc_status_type mips_elf_gprel16_reloc PARAMS ((bfd *abfd,
                                                             asection *section,
                                                             bfd *output_bfd,
                                                             char **error));
-static const struct reloc_howto_struct *bfd_elf32_bfd_reloc_type_lookup
+static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   PARAMS ((bfd *, bfd_reloc_code_real_type));
 static void mips_info_to_howto_rel
   PARAMS ((bfd *, arelent *, Elf32_Internal_Rel *));
@@ -848,7 +848,7 @@ static CONST struct elf_reloc_map mips_reloc_map[] =
 
 /* Given a BFD reloc type, return a howto structure.  */
 
-static const struct reloc_howto_struct *
+static reloc_howto_type *
 bfd_elf32_bfd_reloc_type_lookup (abfd, code)
      bfd *abfd;
      bfd_reloc_code_real_type code;
@@ -1719,6 +1719,22 @@ mips_elf_output_extsym (h, data)
       h->esym.asym.index = indexNil;
     }
 
+  if (h->root.root.type == bfd_link_hash_common)
+    h->esym.asym.value = h->root.root.u.c.size;
+  else if (h->root.root.type == bfd_link_hash_defined)
+    {
+      asection *sec;
+
+      if (h->esym.asym.sc == scCommon)
+       h->esym.asym.sc = scBss;
+      else if (h->esym.asym.sc == scSCommon)
+       h->esym.asym.sc = scSBss;
+
+      sec = h->root.root.u.def.section;
+      h->esym.asym.value = (h->root.root.u.def.value
+                           + sec->output_offset
+                           + sec->output_section->vma);
+    }
 
   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
                                      h->root.root.root.string,