svn commit: r320886 - stable/11/libexec/rtld-elf

Konstantin Belousov kib at FreeBSD.org
Tue Jul 11 05:31:38 UTC 2017


Author: kib
Date: Tue Jul 11 05:31:37 2017
New Revision: 320886
URL: https://svnweb.freebsd.org/changeset/base/320886

Log:
  MFC r320658:
  When reporting undefined symbol, note the version, if specified.

Modified:
  stable/11/libexec/rtld-elf/rtld.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/libexec/rtld-elf/rtld.c
==============================================================================
--- stable/11/libexec/rtld-elf/rtld.c	Tue Jul 11 03:45:47 2017	(r320885)
+++ stable/11/libexec/rtld-elf/rtld.c	Tue Jul 11 05:31:37 2017	(r320886)
@@ -1658,6 +1658,7 @@ find_symdef(unsigned long symnum, const Obj_Entry *ref
     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 *ref
     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 *ref
 	}
 	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 *ref
 	}
     } 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
 	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;


More information about the svn-src-all mailing list