summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/powerpc
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2005-12-18 19:43:33 +0000
committerkan <kan@FreeBSD.org>2005-12-18 19:43:33 +0000
commit8d6f05d58bc7dda5a91170bff51023509aa82558 (patch)
tree0d48e9fa3e1a8d20651242fc849efd6ba9f69557 /libexec/rtld-elf/powerpc
parent116fa05e6020161c2d69796fd827231ba57cb838 (diff)
downloadFreeBSD-src-8d6f05d58bc7dda5a91170bff51023509aa82558.zip
FreeBSD-src-8d6f05d58bc7dda5a91170bff51023509aa82558.tar.gz
Implement ELF symbol versioning using GNU semantics. This code aims
to be compatible with symbol versioning support as implemented by GNU libc and documented by http://people.redhat.com/~drepper/symbol-versioning and LSB 3.0. Implement dlvsym() function to allow lookups for a specific version of a given symbol.
Diffstat (limited to 'libexec/rtld-elf/powerpc')
-rw-r--r--libexec/rtld-elf/powerpc/reloc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/rtld-elf/powerpc/reloc.c b/libexec/rtld-elf/powerpc/reloc.c
index b65e026..8841d7e 100644
--- a/libexec/rtld-elf/powerpc/reloc.c
+++ b/libexec/rtld-elf/powerpc/reloc.c
@@ -71,6 +71,7 @@ do_copy_relocations(Obj_Entry *dstobj)
const void *srcaddr;
const Elf_Sym *srcsym = NULL;
Obj_Entry *srcobj;
+ const Ver_Entry *ve;
if (ELF_R_TYPE(rela->r_info) != R_PPC_COPY) {
continue;
@@ -81,10 +82,11 @@ do_copy_relocations(Obj_Entry *dstobj)
name = dstobj->strtab + dstsym->st_name;
hash = elf_hash(name);
size = dstsym->st_size;
+ ve = fetch_ventry(dstobj, ELF_R_SYM(rela->r_info));
for (srcobj = dstobj->next; srcobj != NULL;
srcobj = srcobj->next) {
- if ((srcsym = symlook_obj(name, hash, srcobj, false))
+ if ((srcsym = symlook_obj(name, hash, srcobj, ve, 0))
!= NULL) {
break;
}
OpenPOWER on IntegriCloud