mirror of
https://git.musl-libc.org/git/musl
synced 2025-02-15 17:54:23 +03:00
fix computation of entry point and main app phdrs when invoking via ldso
entry point was wrong for PIE. e_entry was being treated as an absolute value, whereas it's actually relative to the load address (which is zero for non-PIE). phdr pointer was wrong for non-PIE. e_phoff was being treated as load-address-relative, whereas it's actually a file offset in the ELF file. in any case, map_library was already computing it correctly, and the incorrect code in __dynlink was overwriting it with junk.
This commit is contained in:
parent
16ac00ac46
commit
876748ead3
@ -940,9 +940,7 @@ void *__dynlink(int argc, char **argv)
|
||||
close(fd);
|
||||
lib->name = ldname;
|
||||
app->name = argv[0];
|
||||
app->phnum = ehdr->e_phnum;
|
||||
app->phdr = (void *)(app->base + ehdr->e_phoff);
|
||||
aux[AT_ENTRY] = ehdr->e_entry;
|
||||
aux[AT_ENTRY] = (size_t)app->base + ehdr->e_entry;
|
||||
}
|
||||
if (app->tls_size) {
|
||||
app->tls_id = tls_cnt = 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user