discard dso descriptors after performing relocations

eventually (once dlopen exists) this behavior will be conditional on
dlopen/dlsym not being reachable.
This commit is contained in:
Rich Felker 2011-06-25 00:47:28 -04:00
parent 368ba4a0a9
commit e8dbf00a78
1 changed files with 12 additions and 0 deletions

View File

@ -322,6 +322,16 @@ static void reloc_all(struct dso *p)
}
}
static void free_all(struct dso *p)
{
struct dso *n;
while (p) {
n = p->next;
if (p->map) free(p);
p = n;
}
}
void *__dynlink(int argc, char **argv, size_t *got)
{
size_t *auxv, aux[AUX_CNT] = {0};
@ -387,6 +397,8 @@ void *__dynlink(int argc, char **argv, size_t *got)
reloc_all(head);
free_all(head);
errno = 0;
return (void *)aux[AT_ENTRY];
}