|
@@ -4,6 +4,9 @@
|
|
|
|
|
|
#define AUX_CNT 38
|
|
|
|
|
|
+__attribute__((__weak__, __visibility__("hidden")))
|
|
|
+extern const size_t _DYNAMIC[];
|
|
|
+
|
|
|
static int static_dl_iterate_phdr(int(*callback)(struct dl_phdr_info *info, size_t size, void *data), void *data)
|
|
|
{
|
|
|
unsigned char *p;
|
|
@@ -20,6 +23,8 @@ static int static_dl_iterate_phdr(int(*callback)(struct dl_phdr_info *info, size
|
|
|
phdr = (void *)p;
|
|
|
if (phdr->p_type == PT_PHDR)
|
|
|
base = aux[AT_PHDR] - phdr->p_vaddr;
|
|
|
+ if (phdr->p_type == PT_DYNAMIC && _DYNAMIC)
|
|
|
+ base = (size_t)_DYNAMIC - phdr->p_vaddr;
|
|
|
if (phdr->p_type == PT_TLS)
|
|
|
tls_phdr = phdr;
|
|
|
}
|