summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2016-01-03 04:32:13 +0000
committerimp <imp@FreeBSD.org>2016-01-03 04:32:13 +0000
commitf48423fada3134c7be4f2203959b72b525bc9c31 (patch)
treeb1d7c713c81e09d2abc892ae6bef429b6e11ece3 /libexec/rtld-elf
parentcaa3baabf1fb0ef64ee8b34312c3cd97b374a150 (diff)
downloadFreeBSD-src-f48423fada3134c7be4f2203959b72b525bc9c31.zip
FreeBSD-src-f48423fada3134c7be4f2203959b72b525bc9c31.tar.gz
If md_exec_hook is defined, provide a way to create the strings
for the environment variables we look up at runtime. Otherwise, there's no way they will change, optimize it at compile time. Differential Review: https://reviews.freebsd.org/D2718
Diffstat (limited to 'libexec/rtld-elf')
-rw-r--r--libexec/rtld-elf/rtld.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index b30249a..66edc15 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -204,8 +204,6 @@ extern Elf_Dyn _DYNAMIC;
#define RTLD_IS_DYNAMIC() (&_DYNAMIC != NULL)
#endif
-#define _LD(x) LD_ x
-
int dlclose(void *) __exported;
char *dlerror(void) __exported;
void *dlopen(const char *, int) __exported;
@@ -325,6 +323,24 @@ ld_utrace_log(int event, void *handle, void *mapbase, size_t mapsize,
utrace(&ut, sizeof(ut));
}
+#ifdef RTLD_VARIANT_ENV_NAMES
+/*
+ * construct the env variable based on the type of binary that's
+ * running.
+ */
+static inline const char *
+_LD(const char *var)
+{
+ static char buffer[128];
+
+ strlcpy(buffer, ld_env_prefix, sizeof(buffer));
+ strlcat(buffer, var, sizeof(buffer));
+ return (buffer);
+}
+#else
+#define _LD(x) LD_ x
+#endif
+
/*
* Main entry point for dynamic linking. The first argument is the
* stack pointer. The stack is expected to be laid out as described
OpenPOWER on IntegriCloud