X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fldso%2Fdynlink.c;h=66f22bef194f2ed0e430c74acaa5155471e098ef;hb=a50136dfe186a3ea3d78a4264187915ad16ab861;hp=25242051210e664b11854512a69c8e78d82ce7c0;hpb=a617a8e2adaaac41dd1b662b6646e8392465801c;p=musl diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 25242051..66f22bef 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -102,7 +102,6 @@ static int ldso_fail; static jmp_buf rtld_fail; static pthread_rwlock_t lock; static struct debug debug; -static size_t *auxv; static size_t tls_cnt, tls_offset, tls_align = 4*sizeof(size_t); static pthread_mutex_t init_fini_lock = { ._m_type = PTHREAD_MUTEX_RECURSIVE }; @@ -479,13 +478,16 @@ static struct dso *load_library(const char *name) if (!sys_path) { FILE *f = fopen(ETC_LDSO_PATH, "rbe"); if (f) { - if (getline(&sys_path, (size_t[1]){0}, f) > 0) - sys_path[strlen(sys_path)-1]=0; + if (getline(&sys_path, (size_t[1]){0}, f) > 0) { + size_t l = strlen(sys_path); + if (l && sys_path[l-1]=='\n') + sys_path[l-1] = 0; + } fclose(f); } } - if (sys_path) fd = path_open(name, sys_path, buf, sizeof buf); - else fd = path_open(name, "/lib:/usr/local/lib:/usr/lib", buf, sizeof buf); + if (!sys_path) sys_path = "/lib:/usr/local/lib:/usr/lib"; + fd = path_open(name, sys_path, buf, sizeof buf); } pathname = buf; } @@ -798,6 +800,7 @@ void *__dynlink(int argc, char **argv) struct dso *const vdso = builtin_dsos+2; char *env_preload=0; size_t vdso_base; + size_t *auxv; /* Find aux vector just past environ[] */ for (i=argc+1; argv[i]; i++) @@ -1071,7 +1074,7 @@ void *dlopen(const char *file, int mode) update_tls_size(); - if (ssp_used) __init_ssp(auxv); + if (ssp_used) __init_ssp(libc.auxv); _dl_debug_state(); orig_tail = tail;