name = bfd_elf_string_from_elf_section
(input_bfd, symtab_hdr->sh_link, sym->st_name);
- name = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
+ name = name == NULL ? bfd_section_name (sec) : name;
}
else
{
/* This relocation describes which C++ vtable entries are actually
used. Record for later use during GC. */
case R_OR1K_GNU_VTENTRY:
- BFD_ASSERT (h != NULL);
- if (h != NULL
- && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+ if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
return FALSE;
break;
return FALSE;
if (strncmp (name, ".rela", 5) != 0
- || strcmp (bfd_get_section_name (abfd, sec),
- name + 5) != 0)
+ || strcmp (bfd_section_name (sec), name + 5) != 0)
{
_bfd_error_handler
/* xgettext:c-format */
or1k_write_plt_entry (output_bfd, splt->contents + h->plt.offset,
plt0, plt1, plt2, OR1K_JR(12));
- /* Fill in the entry in the global offset table. */
- bfd_put_32 (output_bfd, plt_addr, sgot->contents + got_offset);
+ /* Fill in the entry in the global offset table. We initialize it to
+ point to the top of the plt. This is done to lazy lookup the actual
+ symbol as the first plt entry will be setup by libc to call the
+ runtime dynamic linker. */
+ bfd_put_32 (output_bfd, plt_base_addr, sgot->contents + got_offset);
/* Fill in the entry in the .rela.plt section. */
rela.r_offset = got_addr;
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
+ else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
{
if (s->size != 0 && s != htab->root.srelplt)
relocs = TRUE;
/* Store the machine number in the flags field. */
-static void
-or1k_elf_final_write_processing (bfd *abfd,
- bfd_boolean linker ATTRIBUTE_UNUSED)
+static bfd_boolean
+or1k_elf_final_write_processing (bfd *abfd)
{
switch (bfd_get_mach (abfd))
{
elf_elfheader (abfd)->e_flags |= EF_OR1K_NODELAY;
break;
}
+ return _bfd_elf_final_write_processing (abfd);
}
static bfd_boolean