diff --git a/src/system/runtime_loader/elf_haiku_version.cpp b/src/system/runtime_loader/elf_haiku_version.cpp index 97fbed4073..855ddce6a7 100644 --- a/src/system/runtime_loader/elf_haiku_version.cpp +++ b/src/system/runtime_loader/elf_haiku_version.cpp @@ -216,9 +216,10 @@ analyze_image_haiku_version_and_abi(int fd, image_t* image, elf_ehdr& eheader, // Haiku API version elf_sym* symbol = find_symbol(image, SymbolLookupInfo(B_SHARED_OBJECT_HAIKU_VERSION_VARIABLE_NAME, - B_SYMBOL_TYPE_DATA, true)); + B_SYMBOL_TYPE_DATA)); if (symbol != NULL && symbol->st_shndx != SHN_UNDEF && symbol->st_value > 0 + && symbol->Type() == STT_OBJECT && symbol->st_size >= sizeof(uint32)) { image->api_version = *(uint32*)(symbol->st_value + image->regions[0].delta); diff --git a/src/system/runtime_loader/elf_symbol_lookup.cpp b/src/system/runtime_loader/elf_symbol_lookup.cpp index a63b7ea3c7..04d289ce24 100644 --- a/src/system/runtime_loader/elf_symbol_lookup.cpp +++ b/src/system/runtime_loader/elf_symbol_lookup.cpp @@ -93,19 +93,8 @@ patch_undefined_symbol(image_t* rootImage, image_t* image, const char* name, } -static bool -is_symbol_visible(elf_sym* symbol) -{ - if (symbol->Bind() == STB_GLOBAL) - return true; - if (symbol->Bind() == STB_WEAK) - return true; - return false; -} - - elf_sym* -find_symbol(image_t* image, const SymbolLookupInfo& lookupInfo, bool allowLocal) +find_symbol(image_t* image, const SymbolLookupInfo& lookupInfo) { if (image->dynamic_ptr == 0) return NULL; @@ -120,7 +109,8 @@ find_symbol(image_t* image, const SymbolLookupInfo& lookupInfo, bool allowLocal) elf_sym* symbol = &image->syms[i]; if (symbol->st_shndx != SHN_UNDEF - && (allowLocal || is_symbol_visible(symbol)) + && ((symbol->Bind() == STB_GLOBAL) + || (symbol->Bind() == STB_WEAK)) && !strcmp(SYMNAME(image, symbol), lookupInfo.name)) { // check if the type matches diff --git a/src/system/runtime_loader/elf_symbol_lookup.h b/src/system/runtime_loader/elf_symbol_lookup.h index b82a2fe3f6..ec7239d90e 100644 --- a/src/system/runtime_loader/elf_symbol_lookup.h +++ b/src/system/runtime_loader/elf_symbol_lookup.h @@ -132,8 +132,7 @@ void patch_undefined_symbol(image_t* rootImage, image_t* image, const char* name, image_t** foundInImage, void** symbol, int32* type); -elf_sym* find_symbol(image_t* image, const SymbolLookupInfo& lookupInfo, - bool allowLocal = false); +elf_sym* find_symbol(image_t* image, const SymbolLookupInfo& lookupInfo); status_t find_symbol(image_t* image, const SymbolLookupInfo& lookupInfo, void** _location); status_t find_symbol_breadth_first(image_t* image,