1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 11:18:11 +00:00

LibELF: Store the full file path in DynamicObject

Otherwise, our `dirname` call on the parent object will always be empty
when trying to resolve dependencies.
This commit is contained in:
Tim Schumacher 2022-06-27 12:21:44 +02:00 committed by Andreas Kling
parent dc805e6c81
commit e2036ca2ca
4 changed files with 16 additions and 16 deletions

View file

@ -16,8 +16,8 @@
namespace ELF {
DynamicObject::DynamicObject(String const& filename, VirtualAddress base_address, VirtualAddress dynamic_section_address)
: m_filename(filename)
DynamicObject::DynamicObject(String const& filepath, VirtualAddress base_address, VirtualAddress dynamic_section_address)
: m_filepath(filepath)
, m_base_address(base_address)
, m_dynamic_address(dynamic_section_address)
{
@ -474,9 +474,9 @@ auto DynamicObject::lookup_symbol(HashSymbol const& symbol) const -> Optional<Sy
return SymbolLookupResult { symbol_result.value(), symbol_result.size(), symbol_result.address(), symbol_result.bind(), symbol_result.type(), this };
}
NonnullRefPtr<DynamicObject> DynamicObject::create(String const& filename, VirtualAddress base_address, VirtualAddress dynamic_section_address)
NonnullRefPtr<DynamicObject> DynamicObject::create(String const& filepath, VirtualAddress base_address, VirtualAddress dynamic_section_address)
{
return adopt_ref(*new DynamicObject(filename, base_address, dynamic_section_address));
return adopt_ref(*new DynamicObject(filepath, base_address, dynamic_section_address));
}
// offset is in PLT relocation table
@ -499,7 +499,7 @@ VirtualAddress DynamicObject::patch_plt_entry(u32 relocation_offset)
if (result.value().type == STT_GNU_IFUNC)
symbol_location = VirtualAddress { reinterpret_cast<IfuncResolver>(symbol_location.get())() };
} else if (symbol.bind() != STB_WEAK) {
dbgln("did not find symbol while doing relocations for library {}: {}", m_filename, symbol.name());
dbgln("did not find symbol while doing relocations for library {}: {}", m_filepath, symbol.name());
VERIFY_NOT_REACHED();
}