mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-11 02:13:56 +09:00
LibELF: Support weak symbols when using BIND_NOW
When using BIND_NOW (e.g. via -Wl,-z,now) we would fail to load ELF images while doing relocations when we encounter a weak symbol. Instead we should just patch the PLT entry with a null pointer. This can be reproduced with: $ cat test.cpp int main() { std::cout << "Hello World!" << std::endl; } $ g++ -o test -Wl,-z,now test.cpp $ ./test did not find symbol while doing relocations for library test: _ITM_RU1
This commit is contained in:
parent
26cb64573c
commit
73b9cfac1b
Notes:
sideshowbarker
2024-07-18 17:07:51 +09:00
Author: https://github.com/gunnarbeutner
Commit: 73b9cfac1b
Pull-request: https://github.com/SerenityOS/serenity/pull/7623
1 changed files with 4 additions and 2 deletions
|
@ -454,13 +454,15 @@ VirtualAddress DynamicObject::patch_plt_entry(u32 relocation_offset)
|
|||
auto symbol = relocation.symbol();
|
||||
u8* relocation_address = relocation.address().as_ptr();
|
||||
|
||||
VirtualAddress symbol_location;
|
||||
auto result = DynamicLoader::lookup_symbol(symbol);
|
||||
if (!result.has_value()) {
|
||||
if (result.has_value()) {
|
||||
symbol_location = result.value().address;
|
||||
} else if (symbol.bind() != STB_WEAK) {
|
||||
dbgln("did not find symbol while doing relocations for library {}: {}", m_filename, symbol.name());
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
auto symbol_location = result.value().address;
|
||||
dbgln_if(DYNAMIC_LOAD_DEBUG, "DynamicLoader: Jump slot relocation: putting {} ({}) into PLT at {}", symbol.name(), symbol_location, (void*)relocation_address);
|
||||
|
||||
*(FlatPtr*)relocation_address = symbol_location.get();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue