X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fldso%2Fdynlink.c;h=02c880b4b87ecddbc65ab5221847157b84d49e15;hb=dac791226a0f6fb8d19d83b63a837254f804dbac;hp=3f3316aaf4ccde3c4ff7e8880d562484f99efc2a;hpb=3ec8d29c754542c3f4b3d6c07ab6db17213aff17;p=musl diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 3f3316aa..02c880b4 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -67,8 +67,7 @@ struct dso { char buf[]; }; -struct __pthread; -struct __pthread *__pthread_self_init(void); +void __init_ssp(size_t *); static struct dso *head, *tail, *libc; static char *env_path, *sys_path, *r_path; @@ -633,6 +632,8 @@ void *__dynlink(int argc, char **argv) debug.state = 0; _dl_debug_state(); + if (ssp_used) __init_ssp(auxv); + do_init_fini(tail); if (!rtld_used) { @@ -641,8 +642,6 @@ void *__dynlink(int argc, char **argv) reclaim((void *)builtin_dsos, 0, sizeof builtin_dsos); } - if (ssp_used) __pthread_self_init(); - errno = 0; return (void *)aux[AT_ENTRY]; } @@ -724,7 +723,7 @@ static void *do_dlsym(struct dso *p, const char *s, void *ra) } if (p == head || p == RTLD_DEFAULT) { void *res = find_sym(head, s, 0); - if (!res) errflag = 1; + if (!res) goto failed; return res; } h = hash(s); @@ -737,6 +736,7 @@ static void *do_dlsym(struct dso *p, const char *s, void *ra) if (sym && sym->st_value && (1<<(sym->st_info&0xf) & OK_TYPES)) return p->deps[i]->base + sym->st_value; } +failed: errflag = 1; snprintf(errbuf, sizeof errbuf, "Symbol not found: %s", s); return 0;