mirror of git://git.musl-libc.org/musl
simple rpath support (no token expansion yet) for dynamic linker
This commit is contained in:
parent
17be829104
commit
191ebcac31
|
@ -53,7 +53,7 @@ struct dso
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct dso *head, *tail, *libc;
|
static struct dso *head, *tail, *libc;
|
||||||
static char *env_path, *sys_path;
|
static char *env_path, *sys_path, *r_path;
|
||||||
static int rtld_used;
|
static int rtld_used;
|
||||||
static int runtime;
|
static int runtime;
|
||||||
static jmp_buf rtld_fail;
|
static jmp_buf rtld_fail;
|
||||||
|
@ -316,7 +316,8 @@ static struct dso *load_library(const char *name)
|
||||||
} else {
|
} else {
|
||||||
if (strlen(name) > NAME_MAX) return 0;
|
if (strlen(name) > NAME_MAX) return 0;
|
||||||
fd = -1;
|
fd = -1;
|
||||||
if (env_path) fd = path_open(name, env_path);
|
if (r_path) fd = path_open(name, r_path);
|
||||||
|
if (fd < 0 && env_path) fd = path_open(name, env_path);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
if (!sys_path) {
|
if (!sys_path) {
|
||||||
FILE *f = fopen(ETC_LDSO_PATH, "r");
|
FILE *f = fopen(ETC_LDSO_PATH, "r");
|
||||||
|
@ -378,6 +379,10 @@ static void load_deps(struct dso *p)
|
||||||
size_t i, ndeps=0;
|
size_t i, ndeps=0;
|
||||||
struct dso ***deps = &p->deps, **tmp, *dep;
|
struct dso ***deps = &p->deps, **tmp, *dep;
|
||||||
for (; p; p=p->next) {
|
for (; p; p=p->next) {
|
||||||
|
for (i=0; p->dynv[i]; i+=2) {
|
||||||
|
if (p->dynv[i] != DT_RPATH) continue;
|
||||||
|
r_path = (void *)(p->strings + p->dynv[i+1]);
|
||||||
|
}
|
||||||
for (i=0; p->dynv[i]; i+=2) {
|
for (i=0; p->dynv[i]; i+=2) {
|
||||||
if (p->dynv[i] != DT_NEEDED) continue;
|
if (p->dynv[i] != DT_NEEDED) continue;
|
||||||
dep = load_library(p->strings + p->dynv[i+1]);
|
dep = load_library(p->strings + p->dynv[i+1]);
|
||||||
|
@ -395,6 +400,7 @@ static void load_deps(struct dso *p)
|
||||||
*deps = tmp;
|
*deps = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
r_path = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue