mirror of
https://github.com/RGBCube/serenity
synced 2026-01-13 01:40:59 +00:00
As IFUNC resolvers may call arbitrary functions though the PLT, they can only be called after the PLT has been populated. This is true of the `[[gnu::target_clones]]` attribute, which makes a call to `__cpu_indicator_init`, which is defined in `libgcc_s.so`, through the PLT. `do_plt_relocation` and `do_direct_relocation` are given a parameter that controls whether IFUNCs are immediately resolved. In the first pass, relocations pointing to IFUNCs are put on a worklist, while all other relocations are performed. Only after non-IFUNC relocations are done and the PLT is set up do we deal with these. |
||
|---|---|---|
| .. | ||
| Arch | ||
| AuxiliaryVector.h | ||
| CMakeLists.txt | ||
| Core.h | ||
| DynamicLinker.cpp | ||
| DynamicLinker.h | ||
| DynamicLoader.cpp | ||
| DynamicLoader.h | ||
| DynamicObject.cpp | ||
| DynamicObject.h | ||
| Hashes.h | ||
| Image.cpp | ||
| Image.h | ||
| Relocation.cpp | ||
| Relocation.h | ||
| Validation.cpp | ||
| Validation.h | ||