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;
/* 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