From 8d6f05d58bc7dda5a91170bff51023509aa82558 Mon Sep 17 00:00:00 2001 From: kan Date: Sun, 18 Dec 2005 19:43:33 +0000 Subject: 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. --- libexec/rtld-elf/arm/reloc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libexec/rtld-elf/arm') diff --git a/libexec/rtld-elf/arm/reloc.c b/libexec/rtld-elf/arm/reloc.c index ff9d195..e383892 100644 --- a/libexec/rtld-elf/arm/reloc.c +++ b/libexec/rtld-elf/arm/reloc.c @@ -41,15 +41,17 @@ do_copy_relocations(Obj_Entry *dstobj) const void *srcaddr; const Elf_Sym *srcsym; Obj_Entry *srcobj; + const Ver_Entry *ve; dstaddr = (void *) (dstobj->relocbase + rel->r_offset); dstsym = dstobj->symtab + ELF_R_SYM(rel->r_info); name = dstobj->strtab + dstsym->st_name; hash = elf_hash(name); size = dstsym->st_size; + ve = fetch_ventry(dstobj, ELF_R_SYM(rel->r_info)); for (srcobj = dstobj->next; srcobj != NULL; srcobj = srcobj->next) - if ((srcsym = symlook_obj(name, hash, srcobj, false)) != NULL) + if ((srcsym = symlook_obj(name, hash, srcobj, ve, 0)) != NULL) break; if (srcobj == NULL) { -- cgit v1.1