diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ldso/dynlink.c | 8 | 
1 files changed, 6 insertions, 2 deletions
| diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index f55c6f10..9692c6b0 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -76,6 +76,7 @@ static int rtld_used;  static int ssp_used;  static int runtime;  static int ldd_mode; +static int ldso_fail;  static jmp_buf rtld_fail;  static pthread_rwlock_t lock;  static struct debug debug; @@ -171,7 +172,8 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri  					dso->name, name);  				if (runtime) longjmp(rtld_fail, 1);  				dprintf(2, "%s\n", errbuf); -				_exit(127); +				ldso_fail = 1; +				continue;  			}  			sym_size = sym->st_size;  		} else { @@ -450,7 +452,8 @@ static void load_deps(struct dso *p)  					p->strings + p->dynv[i+1], p->name);  				if (runtime) longjmp(rtld_fail, 1);  				dprintf(2, "%s\n", errbuf); -				_exit(127); +				ldso_fail = 1; +				continue;  			}  			if (runtime) {  				tmp = realloc(*deps, sizeof(*tmp)*(ndeps+2)); @@ -682,6 +685,7 @@ void *__dynlink(int argc, char **argv)  	reloc_all(app->next);  	reloc_all(app); +	if (ldso_fail) _exit(127);  	if (ldd_mode) _exit(0);  	/* Switch to runtime mode: any further failures in the dynamic | 
