From 146617c29b979d1e3158263672434688e8c7e787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sun, 9 Feb 2025 20:03:06 +0100 Subject: [PATCH] runtime_loader: dlsym(RTLD_NEXT) searches all regions for the caller address clang/lld can put code in multiple regions. Change-Id: I495e3f12105ef2e894809da7e4a91bac08a12fd6 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8961 Tested-by: Commit checker robot Reviewed-by: waddlesplash Haiku-Format: Haiku-format Bot --- src/system/runtime_loader/elf.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/system/runtime_loader/elf.cpp b/src/system/runtime_loader/elf.cpp index 589a56a215..cc2be819c6 100644 --- a/src/system/runtime_loader/elf.cpp +++ b/src/system/runtime_loader/elf.cpp @@ -1006,16 +1006,7 @@ get_library_symbol(void* handle, void* caller, const char* symbolName, // calling image. Return the next after the caller symbol. // First of all, find the caller image. - image_t* callerImage = get_loaded_images().head; - for (; callerImage != NULL; callerImage = callerImage->next) { - elf_region_t& text = callerImage->regions[0]; - if ((addr_t)caller >= text.vmstart - && (addr_t)caller < text.vmstart + text.vmsize) { - // found the image - break; - } - } - + image_t* callerImage = find_loaded_image_by_address((addr_t)caller); if (callerImage != NULL) { // found the caller -- now search the global scope until we find // the next symbol