|
@@ -444,6 +444,11 @@ void *_dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
|
|
|
size_t relro_size = 0;
|
|
|
struct r_scope_elem *global_scope;
|
|
|
struct elf_resolve **local_scope;
|
|
|
+#if defined(__FDPIC__)
|
|
|
+ int rtype_class = ELF_RTYPE_CLASS_DLSYM;
|
|
|
+#else
|
|
|
+ int rtype_class = ELF_RTYPE_CLASS_PLT;
|
|
|
+#endif
|
|
|
|
|
|
#if defined(USE_TLS) && USE_TLS
|
|
|
void *tcbp = NULL;
|
|
@@ -1422,21 +1427,21 @@ of this helper program; chances are you did not intend to run this program.\n\
|
|
|
|
|
|
|
|
|
_dl_malloc_function = (void* (*)(size_t)) (intptr_t) _dl_find_hash(__C_SYMBOL_PREFIX__ "malloc",
|
|
|
- global_scope, NULL, ELF_RTYPE_CLASS_PLT, NULL);
|
|
|
+ global_scope, NULL, rtype_class, NULL);
|
|
|
|
|
|
#if defined(USE_TLS) && USE_TLS
|
|
|
|
|
|
_dl_calloc_function = (void* (*)(size_t, size_t)) (intptr_t)
|
|
|
- _dl_find_hash(__C_SYMBOL_PREFIX__ "calloc", global_scope, NULL, ELF_RTYPE_CLASS_PLT, NULL);
|
|
|
+ _dl_find_hash(__C_SYMBOL_PREFIX__ "calloc", global_scope, NULL, rtype_class, NULL);
|
|
|
|
|
|
_dl_realloc_function = (void* (*)(void *, size_t)) (intptr_t)
|
|
|
- _dl_find_hash(__C_SYMBOL_PREFIX__ "realloc", global_scope, NULL, ELF_RTYPE_CLASS_PLT, NULL);
|
|
|
+ _dl_find_hash(__C_SYMBOL_PREFIX__ "realloc", global_scope, NULL, rtype_class, NULL);
|
|
|
|
|
|
_dl_free_function = (void (*)(void *)) (intptr_t)
|
|
|
- _dl_find_hash(__C_SYMBOL_PREFIX__ "free", global_scope, NULL, ELF_RTYPE_CLASS_PLT, NULL);
|
|
|
+ _dl_find_hash(__C_SYMBOL_PREFIX__ "free", global_scope, NULL, rtype_class, NULL);
|
|
|
|
|
|
_dl_memalign_function = (void* (*)(size_t, size_t)) (intptr_t)
|
|
|
- _dl_find_hash(__C_SYMBOL_PREFIX__ "memalign", global_scope, NULL, ELF_RTYPE_CLASS_PLT, NULL);
|
|
|
+ _dl_find_hash(__C_SYMBOL_PREFIX__ "memalign", global_scope, NULL, rtype_class, NULL);
|
|
|
|
|
|
#endif
|
|
|
|