Daniel van Vugt 65cde18786 main: Correct the pointer value of strtab on riscv/mips architectures
Glibc defines `d_ptr`/`d_val` to be a relocated address on most
architectures, except for riscv and mips where it is just an offset from
the binary load address. So we need to convert `strtab` from an offset
into a pointer for riscv and mips.

Internally within glibc there is the `D_PTR` macro for doing this, which
relies on private data hidden in an ABI-unstable part of `link_map`. So
we can't use the same conditional logic as glibc does internally.

Our solution is to detect when `strtab` is unreasonably low (below the
address of our binary) and so it must be an unrelocated offset. In that
case we just do the relocation manually.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6528
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2718>
2023-08-05 19:19:29 +00:00
..
2020-10-19 20:18:11 +02:00
2014-01-09 14:59:31 -05:00
2014-01-09 14:59:31 -05:00
2014-01-09 14:59:31 -05:00
2022-08-02 16:13:54 +00:00
2022-08-02 16:13:54 +00:00
2020-05-20 15:12:03 +02:00
2017-08-02 11:27:42 +01:00
2015-10-15 22:58:28 +02:00