mirror of
git://git.musl-libc.org/musl
synced 2024-11-23 18:14:19 +08:00
ldso: fix TLSDESC addend processing on archs with backwards descriptors
presently this only affects 32-bit arm. despite correctly reversing the function pointer and argument fields based on the TLSDESC_BACKWARDS macro, we did not read the addend from the swapped-order argument field, so nonzero addends were lost, producing wrong runtime addresses for TLS objects needing an addend. based on report and patch by Rui Ueyama.
This commit is contained in:
parent
039d3c34f2
commit
e17b9d7474
@ -517,7 +517,7 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case REL_TLSDESC:
|
case REL_TLSDESC:
|
||||||
if (stride<3) addend = reloc_addr[1];
|
if (stride<3) addend = reloc_addr[!TLSDESC_BACKWARDS];
|
||||||
if (def.dso->tls_id > static_tls_cnt) {
|
if (def.dso->tls_id > static_tls_cnt) {
|
||||||
struct td_index *new = malloc(sizeof *new);
|
struct td_index *new = malloc(sizeof *new);
|
||||||
if (!new) {
|
if (!new) {
|
||||||
|
Loading…
Reference in New Issue
Block a user