2000-06-17 Ulf Carlsson <ulfc@engr.sgi.com>
authorUlf Carlsson <ulfc@engr.sgi.com>
Sat, 17 Jun 2000 09:47:15 +0000 (09:47 +0000)
committerUlf Carlsson <ulfc@engr.sgi.com>
Sat, 17 Jun 2000 09:47:15 +0000 (09:47 +0000)
* elf32-mips.c (mips_elf_calculate_relocation): Explicitly write
GOT entries if we're doing a static link or -Bsymbolic link.

bfd/ChangeLog
bfd/elf32-mips.c

index 83087a4..e50360c 100644 (file)
@@ -1,3 +1,8 @@
+2000-06-17  Ulf Carlsson  <ulfc@engr.sgi.com>
+
+       * elf32-mips.c (mips_elf_calculate_relocation): Explicitly write
+       GOT entries if we're doing a static link or -Bsymbolic link.
+
 2000-06-15  Ulf Carlsson  <ulfc@engr.sgi.com>
 
        * elflink.h (elf_link_adjust_relocs): Check for and call backend
index 29e260e..c4b5ff4 100644 (file)
@@ -6026,6 +6026,19 @@ mips_elf_calculate_relocation (abfd,
          g = mips_elf_global_got_index 
            (elf_hash_table (info)->dynobj,
             (struct elf_link_hash_entry*) h);
+         if (! elf_hash_table(info)->dynamic_sections_created
+             || (info->shared
+                 && (info->symbolic || h->root.dynindx == -1)
+                 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+           {
+             /* This is a static link or a -Bsymbolic link.  The
+                symbol is defined locally, or was forced to be local.
+                We must initialize this entry in the GOT.  */
+             asection *sgot = mips_elf_got_section(elf_hash_table
+                                                   (info)->dynobj);
+             MIPS_ELF_PUT_WORD (elf_hash_table (info)->dynobj,
+                                symbol + addend, sgot->contents + g);
+           }
        }
       else if (r_type == R_MIPS_GOT16)
        /* There's no need to create a local GOT entry here; the