Skip to content

Commit

Permalink
Fix R_PPC64_{JMP_IREL,IRELATIVE} handling in dl-conflict.c
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakub Jelinek authored and Andreas Schwab committed Nov 5, 2009
1 parent bf88d9c commit ad263db
Showing 2 changed files with 9 additions and 2 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
2009-11-03 Jakub Jelinek <jakub@redhat.com>

* sysdeps/powerpc/powerpc64/dl-machine.h (resolve_ifunc): Don't
relocate opd entry when resolving prelink conflicts.

2009-11-03 Andreas Schwab <schwab@redhat.com>

* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list: Add
6 changes: 4 additions & 2 deletions sysdeps/powerpc/powerpc64/dl-machine.h
Original file line number Diff line number Diff line change
@@ -531,13 +531,14 @@ auto inline Elf64_Addr __attribute__ ((always_inline))
resolve_ifunc (Elf64_Addr value,
const struct link_map *map, const struct link_map *sym_map)
{
#ifndef RESOLVE_CONFLICT_FIND_MAP
/* The function we are calling may not yet have its opd entry relocated. */
Elf64_FuncDesc opd;
if (map != sym_map
#if !defined RTLD_BOOTSTRAP && defined SHARED
# if !defined RTLD_BOOTSTRAP && defined SHARED
/* Bootstrap map doesn't have l_relocated set for it. */
&& sym_map != &GL(dl_rtld_map)
#endif
# endif
&& !sym_map->l_relocated)
{
Elf64_FuncDesc *func = (Elf64_FuncDesc *) value;
@@ -546,6 +547,7 @@ resolve_ifunc (Elf64_Addr value,
opd.fd_aux = func->fd_aux;
value = (Elf64_Addr) &opd;
}
#endif
return ((Elf64_Addr (*) (void)) value) ();
}

0 comments on commit ad263db

Please sign in to comment.