X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fldso%2Fdynlink.c;h=66f22bef194f2ed0e430c74acaa5155471e098ef;hb=a50136dfe186a3ea3d78a4264187915ad16ab861;hp=13bf16a595fbc4bd6f2569f1080467fa891221a4;hpb=18c0e02e2bd53ceedbb843b06ff90890f1c734b0;p=musl diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 13bf16a5..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 }; @@ -435,7 +434,7 @@ static struct dso *load_library(const char *name) char buf[2*NAME_MAX+2]; const char *pathname; unsigned char *base, *map; - size_t dyno, map_len; + size_t map_len; struct dso *p, temp_dso = {0}; int fd; struct stat st; @@ -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++) @@ -866,7 +869,7 @@ void *__dynlink(int argc, char **argv) } else { int fd; char *ldname = argv[0]; - size_t dyno, l = strlen(ldname); + size_t l = strlen(ldname); if (l >= 3 && !strcmp(ldname+l-3, "ldd")) ldd_mode = 1; *argv++ = (void *)-1; if (argv[0] && !strcmp(argv[0], "--")) *argv++ = (void *)-1; @@ -962,7 +965,6 @@ void *__dynlink(int argc, char **argv) update_tls_size(); if (tls_cnt) { - struct dso *p; void *mem = mmap(0, libc.tls_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); if (mem==MAP_FAILED || @@ -1072,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;