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.
This commit is contained in:
Ulf Carlsson 2000-10-14 04:05:23 +00:00
parent 40e3f985d2
commit 5af5b85bc3
2 changed files with 18 additions and 8 deletions

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

View 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));
}