svn commit: r290223 - head/libexec/rtld-elf

Warner Losh imp at FreeBSD.org
Sat Oct 31 04:39:57 UTC 2015


Author: imp
Date: Sat Oct 31 04:39:55 2015
New Revision: 290223
URL: https://svnweb.freebsd.org/changeset/base/290223

Log:
  Rather than using the #define for path names, indirect through a char *
  variable that could change for different executable types detected.

Modified:
  head/libexec/rtld-elf/libmap.c
  head/libexec/rtld-elf/paths.h
  head/libexec/rtld-elf/rtld.c

Modified: head/libexec/rtld-elf/libmap.c
==============================================================================
--- head/libexec/rtld-elf/libmap.c	Sat Oct 31 04:39:28 2015	(r290222)
+++ head/libexec/rtld-elf/libmap.c	Sat Oct 31 04:39:55 2015	(r290223)
@@ -68,7 +68,7 @@ lm_init(char *libmap_override)
 	dbg("lm_init(\"%s\")", libmap_override);
 	TAILQ_INIT(&lmp_head);
 
-	lmc_parse_file(_PATH_LIBMAP_CONF);
+	lmc_parse_file(ld_path_libmap_conf);
 
 	if (libmap_override) {
 		/*

Modified: head/libexec/rtld-elf/paths.h
==============================================================================
--- head/libexec/rtld-elf/paths.h	Sat Oct 31 04:39:28 2015	(r290222)
+++ head/libexec/rtld-elf/paths.h	Sat Oct 31 04:39:55 2015	(r290223)
@@ -61,4 +61,10 @@
 #define	LD_			"LD_"
 #endif
 
+extern char *ld_path_elf_hints;
+extern char *ld_path_libmap_conf;
+extern char *ld_path_rtld;
+extern char *ld_standard_library_path;
+extern char *ld_env_prefix;
+
 #endif /* PATHS_H */

Modified: head/libexec/rtld-elf/rtld.c
==============================================================================
--- head/libexec/rtld-elf/rtld.c	Sat Oct 31 04:39:28 2015	(r290222)
+++ head/libexec/rtld-elf/rtld.c	Sat Oct 31 04:39:55 2015	(r290223)
@@ -255,6 +255,15 @@ int tls_max_index = 1;		/* Largest modul
 bool ld_library_path_rpath = false;
 
 /*
+ * Globals for path names, and such
+ */
+char *ld_path_elf_hints = _PATH_ELF_HINTS;
+char *ld_path_libmap_conf = _PATH_LIBMAP_CONF;
+char *ld_path_rtld = _PATH_RTLD;
+char *ld_standard_library_path = STANDARD_LIBRARY_PATH;
+char *ld_env_prefix = LD_;
+
+/*
  * Fill in a DoneList with an allocation large enough to hold all of
  * the currently-loaded objects.  Keep this as a macro since it calls
  * alloca and we want that to occur within the scope of the caller.
@@ -449,7 +458,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_
     ld_utrace = getenv(LD_ "UTRACE");
 
     if ((ld_elf_hints_path == NULL) || strlen(ld_elf_hints_path) == 0)
-	ld_elf_hints_path = _PATH_ELF_HINTS;
+	ld_elf_hints_path = ld_path_elf_hints;
 
     if (ld_debug != NULL && *ld_debug != '\0')
 	debug = 1;
@@ -1506,7 +1515,7 @@ find_library(const char *xname, const Ob
 	  (pathname = search_library_path(name, refobj->rpath)) != NULL) ||
 	  (pathname = search_library_pathfds(name, ld_library_dirs, fdp)) != NULL ||
           (pathname = search_library_path(name, gethints(false))) != NULL ||
-	  (pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL)
+	  (pathname = search_library_path(name, ld_standard_library_path)) != NULL)
 	    return (pathname);
     } else {
 	nodeflib = objgiven ? refobj->z_nodeflib : false;
@@ -1520,7 +1529,7 @@ find_library(const char *xname, const Ob
 	  (pathname = search_library_pathfds(name, ld_library_dirs, fdp)) != NULL ||
 	  (pathname = search_library_path(name, gethints(nodeflib))) != NULL ||
 	  (objgiven && !nodeflib &&
-	  (pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL))
+	  (pathname = search_library_path(name, ld_standard_library_path)) != NULL))
 	    return (pathname);
     }
 
@@ -1690,7 +1699,7 @@ gethints(bool nostdlib)
 	hargs.request = RTLD_DI_SERINFOSIZE;
 	hargs.serinfo = &hmeta;
 
-	path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &sargs);
+	path_enumerate(ld_standard_library_path, fill_search_info, &sargs);
 	path_enumerate(p, fill_search_info, &hargs);
 
 	SLPinfo = xmalloc(smeta.dls_size);
@@ -1709,7 +1718,7 @@ gethints(bool nostdlib)
 	hargs.serpath = &hintinfo->dls_serpath[0];
 	hargs.strspace = (char *)&hintinfo->dls_serpath[hmeta.dls_cnt];
 
-	path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &sargs);
+	path_enumerate(ld_standard_library_path, fill_search_info, &sargs);
 	path_enumerate(p, fill_search_info, &hargs);
 
 	/*
@@ -1887,7 +1896,7 @@ init_rtld(caddr_t mapbase, Elf_Auxinfo *
     digest_dynamic2(&obj_rtld, dyn_rpath, dyn_soname, dyn_runpath);
 
     /* Replace the path with a dynamically allocated copy. */
-    obj_rtld.path = xstrdup(_PATH_RTLD);
+    obj_rtld.path = xstrdup(ld_path_rtld);
 
     r_debug.r_brk = r_debug_state;
     r_debug.r_state = RT_CONSISTENT;
@@ -3501,7 +3510,7 @@ do_search_info(const Obj_Entry *obj, int
     path_enumerate(obj->runpath, fill_search_info, &args);
     path_enumerate(gethints(obj->z_nodeflib), fill_search_info, &args);
     if (!obj->z_nodeflib)
-      path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &args);
+      path_enumerate(ld_standard_library_path, fill_search_info, &args);
 
 
     if (request == RTLD_DI_SERINFOSIZE) {
@@ -3539,7 +3548,7 @@ do_search_info(const Obj_Entry *obj, int
 
     args.flags = LA_SER_DEFAULT;
     if (!obj->z_nodeflib &&
-      path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &args) != NULL)
+      path_enumerate(ld_standard_library_path, fill_search_info, &args) != NULL)
 	return (-1);
     return (0);
 }


More information about the svn-src-head mailing list