* elf-m10300.c (mn10300_elf_relax_section): Preserve reloc addend
for linking, but otherwise adjust reloc for merged sections.
This commit is contained in:
parent
53cb0362bf
commit
dd90f1b254
2 changed files with 21 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
2004-05-28 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* elf-m10300.c (mn10300_elf_relax_section): Preserve reloc addend
|
||||
for linking, but otherwise adjust reloc for merged sections.
|
||||
|
||||
2004-05-28 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elfxx-ia64.c (elfNN_ia64_relax_section): Properly call
|
||||
|
|
|
@ -2462,6 +2462,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
|||
asection *sym_sec = NULL;
|
||||
const char *sym_name;
|
||||
char *new_name;
|
||||
bfd_vma saved_addend;
|
||||
|
||||
/* A local symbol. */
|
||||
isym = isymbuf + ELF32_R_SYM (irel->r_info);
|
||||
|
@ -2474,13 +2475,25 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
|||
else
|
||||
sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
|
||||
|
||||
symval = (isym->st_value
|
||||
+ sym_sec->output_section->vma
|
||||
+ sym_sec->output_offset);
|
||||
sym_name = bfd_elf_string_from_elf_section (abfd,
|
||||
symtab_hdr->sh_link,
|
||||
isym->st_name);
|
||||
|
||||
if ((sym_sec->flags & SEC_MERGE)
|
||||
&& ELF_ST_TYPE (isym->st_info) == STT_SECTION
|
||||
&& sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
|
||||
{
|
||||
saved_addend = irel->r_addend;
|
||||
symval = _bfd_elf_rela_local_sym (abfd, isym, &sym_sec, irel);
|
||||
symval += irel->r_addend;
|
||||
irel->r_addend = saved_addend;
|
||||
}
|
||||
else
|
||||
{
|
||||
symval = (isym->st_value
|
||||
+ sym_sec->output_section->vma
|
||||
+ sym_sec->output_offset);
|
||||
}
|
||||
/* Tack on an ID so we can uniquely identify this
|
||||
local symbol in the global hash table. */
|
||||
new_name = bfd_malloc ((bfd_size_type) strlen (sym_name) + 10);
|
||||
|
|
Loading…
Reference in a new issue