summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-07-11 05:31:37 +0000
committerkib <kib@FreeBSD.org>2017-07-11 05:31:37 +0000
commiteb3b7f71616077604751588ca68771198f1881f5 (patch)
tree0babcc63a936ed29b57dd15934a7004a1d52c611
parente903a0648c84409b3fa047171b13279ba07333f2 (diff)
downloadFreeBSD-src-eb3b7f71616077604751588ca68771198f1881f5.zip
FreeBSD-src-eb3b7f71616077604751588ca68771198f1881f5.tar.gz
MFC r320658:
When reporting undefined symbol, note the version, if specified.
-rw-r--r--libexec/rtld-elf/rtld.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index b35dc0e..7d587af 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -1658,6 +1658,7 @@ find_symdef(unsigned long symnum, const Obj_Entry *refobj,
const Elf_Sym *ref;
const Elf_Sym *def;
const Obj_Entry *defobj;
+ const Ver_Entry *ve;
SymLook req;
const char *name;
int res;
@@ -1677,6 +1678,7 @@ find_symdef(unsigned long symnum, const Obj_Entry *refobj,
name = refobj->strtab + ref->st_name;
def = NULL;
defobj = NULL;
+ ve = NULL;
/*
* We don't have to do a full scale lookup if the symbol is local.
@@ -1693,7 +1695,7 @@ find_symdef(unsigned long symnum, const Obj_Entry *refobj,
}
symlook_init(&req, name);
req.flags = flags;
- req.ventry = fetch_ventry(refobj, symnum);
+ ve = req.ventry = fetch_ventry(refobj, symnum);
req.lockstate = lockstate;
res = symlook_default(&req, refobj);
if (res == 0) {
@@ -1723,7 +1725,8 @@ find_symdef(unsigned long symnum, const Obj_Entry *refobj,
}
} else {
if (refobj != &obj_rtld)
- _rtld_error("%s: Undefined symbol \"%s\"", refobj->path, name);
+ _rtld_error("%s: Undefined symbol \"%s%s%s\"", refobj->path, name,
+ ve != NULL ? "@" : "", ve != NULL ? ve->name : "");
}
return def;
}
@@ -3488,7 +3491,8 @@ do_dlsym(void *handle, const char *name, void *retaddr, const Ver_Entry *ve,
return (sym);
}
- _rtld_error("Undefined symbol \"%s\"", name);
+ _rtld_error("Undefined symbol \"%s%s%s\"", name, ve != NULL ? "@" : "",
+ ve != NULL ? ve->name : "");
lock_release(rtld_bind_lock, &lockstate);
LD_UTRACE(UTRACE_DLSYM_STOP, handle, NULL, 0, 0, name);
return NULL;
OpenPOWER on IntegriCloud