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

LibELF: Perform .relr.dyn relocations before .rel.dyn

IFUNC resolvers depend on the resolved function's address having been
relocated by the time they are called. This means that relative
relocations have to be done first.

The linker is kind enough to put R_*_RELATIVE before R_*_IRELATIVE in
.rel.dyn, but .relr.dyn contains relative relocations too.
This commit is contained in:
Daniel Bertalan 2022-03-13 08:30:34 +01:00 committed by Andreas Kling
parent 435a263998
commit ed5f110b40

View file

@ -197,9 +197,9 @@ void DynamicLoader::do_main_relocations()
}
};
do_relr_relocations();
m_dynamic_object->relocation_section().for_each_relocation(do_single_relocation);
m_dynamic_object->plt_relocation_section().for_each_relocation(do_single_relocation);
do_relr_relocations();
}
Result<NonnullRefPtr<DynamicObject>, DlErrorMessage> DynamicLoader::load_stage_3(unsigned flags)