diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 3e3942b62b..9f9ddcd263 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -274,8 +274,26 @@ namespace loader } } + assert(e.second != stub); e.second = stub; } + + for (auto &i : m.second.imports) + { + u32 stub = i.second; + + for (auto &s : info.segments) + { + if (stub >= s.initial_addr.addr() && stub < s.initial_addr.addr() + s.size_file) + { + stub += s.begin.addr() - s.initial_addr.addr(); + break; + } + } + + assert(i.second != stub); + i.second = stub; + } } return ok; @@ -432,7 +450,7 @@ namespace loader for (auto& f : m.second.imports) { const u32 nid = f.first; - const u32 addr = f.second + info.segments[0].begin.addr(); + const u32 addr = f.second; u32 index;