diff options
author | imp <imp@FreeBSD.org> | 2016-01-03 04:32:13 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2016-01-03 04:32:13 +0000 |
commit | f48423fada3134c7be4f2203959b72b525bc9c31 (patch) | |
tree | b1d7c713c81e09d2abc892ae6bef429b6e11ece3 /libexec | |
parent | caa3baabf1fb0ef64ee8b34312c3cd97b374a150 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | libexec/rtld-elf/rtld.c | 20 |
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 |