* elf64-alpha.c (elf64_alpha_relax_section): Use the proper section
for calculating a local symbol's address. (elf64_alpha_calc_got_offsets): Skip entries with 0 use count. Set the .got's cooked size as well as the raw size.
This commit is contained in:
parent
ad7302a081
commit
986c3691f2
2 changed files with 26 additions and 6 deletions
|
@ -1,3 +1,10 @@
|
|||
Sat Apr 25 14:07:29 1998 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* elf64-alpha.c (elf64_alpha_relax_section): Use the proper section
|
||||
for calculating a local symbol's address.
|
||||
(elf64_alpha_calc_got_offsets): Skip entries with 0 use count.
|
||||
Set the .got's cooked size as well as the raw size.
|
||||
|
||||
Fri Apr 24 09:16:00 1998 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
* elf32-v850.c (v850_elf_print_private_bfd_data): Add
|
||||
|
|
|
@ -1462,17 +1462,28 @@ elf64_alpha_relax_section (abfd, sec, link_info, again)
|
|||
if (ELF64_R_SYM (irel->r_info) < symtab_hdr->sh_info)
|
||||
{
|
||||
Elf_Internal_Sym isym;
|
||||
asection *lsec;
|
||||
|
||||
/* A local symbol. */
|
||||
bfd_elf64_swap_symbol_in (abfd,
|
||||
extsyms + ELF64_R_SYM (irel->r_info),
|
||||
&isym);
|
||||
if (isym.st_shndx == SHN_UNDEF)
|
||||
lsec = bfd_und_section_ptr;
|
||||
else if (isym.st_shndx > 0 && isym.st_shndx < SHN_LORESERVE)
|
||||
lsec = bfd_section_from_elf_index (abfd, isym.st_shndx);
|
||||
else if (isym.st_shndx == SHN_ABS)
|
||||
lsec = bfd_abs_section_ptr;
|
||||
else if (isym.st_shndx == SHN_COMMON)
|
||||
lsec = bfd_com_section_ptr;
|
||||
else
|
||||
continue; /* who knows. */
|
||||
|
||||
info.h = NULL;
|
||||
info.gotent = local_got_entries[ELF64_R_SYM(irel->r_info)];
|
||||
symval = (isym.st_value
|
||||
+ sec->output_section->vma
|
||||
+ sec->output_offset);
|
||||
+ lsec->output_section->vma
|
||||
+ lsec->output_offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2892,13 +2903,15 @@ elf64_alpha_calc_got_offsets (info)
|
|||
|
||||
for (k = 0, n = elf_tdata(j)->symtab_hdr.sh_info; k < n; ++k)
|
||||
for (gotent = local_got_entries[k]; gotent; gotent = gotent->next)
|
||||
{
|
||||
gotent->got_offset = got_offset;
|
||||
got_offset += 8;
|
||||
}
|
||||
if (gotent->use_count > 0)
|
||||
{
|
||||
gotent->got_offset = got_offset;
|
||||
got_offset += 8;
|
||||
}
|
||||
}
|
||||
|
||||
alpha_elf_tdata(i)->got->_raw_size = got_offset;
|
||||
alpha_elf_tdata(i)->got->_cooked_size = got_offset;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue