2000-10-13 Ulf Carlsson <ulfc@engr.sgi.com>
authorUlf Carlsson <ulfc@engr.sgi.com>
Sat, 14 Oct 2000 04:05:23 +0000 (04:05 +0000)
committerUlf Carlsson <ulfc@engr.sgi.com>
Sat, 14 Oct 2000 04:05:23 +0000 (04:05 +0000)
From  Ralf Baechle  <ralf@gnu.org>

* elf32-mips.c (mips_elf_create_dynamic_relocation): New argument
local_p.  Add symbol value only for non-R_MIPS_REL32 relocations
against local symbols.
(_bfd_mips_elf_finish_dynamic_sections): Undo patch from 2000-10-01.

bfd/ChangeLog
bfd/elf32-mips.c

index a3ca28a6c1cf6e148502bdda97ad2c355b4d3a26..3e62721a966a000ddc6f0cb889cf77dcf78d2e6b 100644 (file)
@@ -1,3 +1,12 @@
+2000-10-13  Ulf Carlsson  <ulfc@engr.sgi.com>
+
+       From  Ralf Baechle  <ralf@gnu.org>
+
+       * elf32-mips.c (mips_elf_create_dynamic_relocation): New argument
+       local_p.  Add symbol value only for non-R_MIPS_REL32 relocations
+       against local symbols.
+       (_bfd_mips_elf_finish_dynamic_sections): Undo patch from 2000-10-01.
+       
 2000-10-12  Alan Modra  <alan@linuxcare.com.au>
 
        * section.c (struct sec): Add kept_section.
index 9a02f46db616e77333f3c23c0d92bb9d52e70aaf..32666788f45d3b55bd724c22b3f8098ff21f3cb4 100644 (file)
@@ -192,7 +192,7 @@ static bfd_vma mips_elf_got16_entry
 static boolean mips_elf_create_dynamic_relocation 
   PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
           struct mips_elf_link_hash_entry *, asection *,
-          bfd_vma, bfd_vma *, asection *));
+          bfd_vma, bfd_vma *, asection *, boolean local_p));
 static void mips_elf_allocate_dynamic_relocations 
   PARAMS ((bfd *, unsigned int));
 static boolean mips_elf_stub_section_p 
@@ -5680,7 +5680,7 @@ mips_elf_next_relocation (r_type, relocation, relend)
 
 static boolean
 mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
-                                   symbol, addendp, input_section)
+                                   symbol, addendp, input_section, local_p)
      bfd *output_bfd;
      struct bfd_link_info *info;
      const Elf_Internal_Rela *rel;
@@ -5689,6 +5689,7 @@ mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
      bfd_vma symbol;
      bfd_vma *addendp;
      asection *input_section;
+     boolean local_p;
 {
   Elf_Internal_Rel outrel;
   boolean skip;
@@ -5778,10 +5779,10 @@ mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
          symbol = sec->output_section->vma;
        }
       
-      /* If the relocation was previously an absolute relocation, we
-        must adjust it by the value we give it in the dynamic symbol
-        table.  */
-      if (r_type != R_MIPS_REL32)
+      /* If the relocation is against a local symbol was previously an absolute
+        relocation, we must adjust it by the value we give it in the dynamic
+        symbol table.  */
+      if (local_p && r_type != R_MIPS_REL32)
        *addendp += symbol;
 
       /* The relocation is always an REL32 relocation because we don't
@@ -6219,7 +6220,7 @@ mips_elf_calculate_relocation (abfd,
                                                   sec,
                                                   symbol,
                                                   &value,
-                                                  input_section))
+                                                  input_section, local_p))
            return false;
        }
       else
@@ -8879,7 +8880,7 @@ _bfd_mips_elf_finish_dynamic_sections (output_bfd, info)
   if (sgot != NULL && sgot->_raw_size > 0)
     {
       MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
-      MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000001
+      MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000
                         sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
     }