diff options
author | kan <kan@FreeBSD.org> | 2005-12-18 19:43:33 +0000 |
---|---|---|
committer | kan <kan@FreeBSD.org> | 2005-12-18 19:43:33 +0000 |
commit | 8d6f05d58bc7dda5a91170bff51023509aa82558 (patch) | |
tree | 0d48e9fa3e1a8d20651242fc849efd6ba9f69557 /libexec/rtld-elf/sparc64 | |
parent | 116fa05e6020161c2d69796fd827231ba57cb838 (diff) | |
download | FreeBSD-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/sparc64')
-rw-r--r-- | libexec/rtld-elf/sparc64/reloc.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/rtld-elf/sparc64/reloc.c b/libexec/rtld-elf/sparc64/reloc.c index 4e66211..f264860 100644 --- a/libexec/rtld-elf/sparc64/reloc.c +++ b/libexec/rtld-elf/sparc64/reloc.c @@ -205,6 +205,7 @@ do_copy_relocations(Obj_Entry *dstobj) const Elf_Rela *rela; const Elf_Sym *dstsym; const Elf_Sym *srcsym; + const Ver_Entry *ve; void *dstaddr; const void *srcaddr; Obj_Entry *srcobj; @@ -222,11 +223,12 @@ 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)) != NULL) + ve, 0)) != NULL) break; if (srcobj == NULL) { |