the values of any global symbols in a toc section that has been
edited. Globals in toc sections should be a rarity, so this function
sets a flag if any are found in toc sections other than the one just
- edited, so that futher hash table traversals can be avoided. */
+ edited, so that further hash table traversals can be avoided. */
struct adjust_toc_info
{
/* Merge the used and skip arrays. Assume that TOC
doublewords not appearing as either used or unused belong
- to to an entry more than one doubleword in size. */
+ to an entry more than one doubleword in size. */
for (drop = skip, keep = used, last = 0, some_unused = 0;
drop < skip + (toc->size + 7) / 8;
++drop, ++keep)
*p++ = DW_CFA_register;
*p++ = 65;
*p++ = htab->opd_abi ? 12 : 0;
- *p++ = DW_CFA_advance_loc + 4;
+ *p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
*p++ = DW_CFA_restore_extended;
*p++ = 65;
p += ((24 + align - 1) & -align) - 24;
emitting a reloc. */
else
{
- int tlsopt
- = (htab->params->tls_get_addr_opt
- && htab->tls_get_addr_fd != NULL
- && htab->tls_get_addr_fd->elf.plt.plist != NULL);
-
relocation += addend;
if (tls_type != 0)
{
relocation = 0;
else
relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
- if ((tls_type & TLS_TPREL)
- || (tlsopt && !(tls_type & TLS_DTPREL)))
+ if (tls_type & TLS_TPREL)
relocation += DTP_OFFSET - TP_OFFSET;
}
{
bfd_put_64 (output_bfd, relocation,
got->contents + off + 8);
- relocation = !tlsopt;
+ relocation = 1;
}
}
bfd_put_64 (output_bfd, relocation,
addend = outrel.r_offset;
}
}
- else if (r_type == R_PPC64_DTPMOD64
- && htab->params->tls_get_addr_opt
- && htab->tls_get_addr_fd != NULL
- && htab->tls_get_addr_fd->elf.plt.plist != NULL)
- {
- /* Set up for __tls_get_addr_opt stub, when this entry
- does not have dynamic relocs. */
- relocation = 0;
- /* Set up the next word for local dynamic. If it turns
- out to be global dynamic, the reloc will overwrite
- this value. */
- if (rel->r_offset + 16 <= input_section->size)
- bfd_put_64 (input_bfd, DTP_OFFSET - TP_OFFSET,
- contents + rel->r_offset + 8);
- }
- else if (r_type == R_PPC64_DTPREL64
- && htab->params->tls_get_addr_opt
- && htab->tls_get_addr_fd != NULL
- && htab->tls_get_addr_fd->elf.plt.plist != NULL
- && rel > relocs
- && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
- && rel[-1].r_offset + 8 == rel->r_offset)
- {
- /* __tls_get_addr_opt stub value. */
- addend += DTP_OFFSET - TP_OFFSET;
- }
break;
case R_PPC64_COPY:
#define elf64_bed elf64_powerpc_fbsd_bed
#include "elf64-target.h"
-