mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-27 21:36:54 +01:00
pthread: fix lazy pthread objects
This commit is contained in:
+11
-7
@@ -1318,13 +1318,6 @@ void* PthreadStaticObjects::CreateObject(void* addr, PthreadStaticObject::Type t
|
|||||||
auto vaddr = reinterpret_cast<uint64_t>(addr);
|
auto vaddr = reinterpret_cast<uint64_t>(addr);
|
||||||
auto* program = rt->FindProgramByAddr(vaddr);
|
auto* program = rt->FindProgramByAddr(vaddr);
|
||||||
|
|
||||||
EXIT_NOT_IMPLEMENTED(program == nullptr);
|
|
||||||
|
|
||||||
auto* obj = new PthreadStaticObject;
|
|
||||||
obj->program = program;
|
|
||||||
obj->type = type;
|
|
||||||
obj->vaddr = vaddr;
|
|
||||||
|
|
||||||
std::string name = fmt::format("Static{:016x}", vaddr);
|
std::string name = fmt::format("Static{:016x}", vaddr);
|
||||||
|
|
||||||
int result = OK;
|
int result = OK;
|
||||||
@@ -1345,6 +1338,17 @@ void* PthreadStaticObjects::CreateObject(void* addr, PthreadStaticObject::Type t
|
|||||||
|
|
||||||
EXIT_NOT_IMPLEMENTED(result != OK);
|
EXIT_NOT_IMPLEMENTED(result != OK);
|
||||||
|
|
||||||
|
// Heap-backed lazy pthread objects are valid. Initialize them without requiring
|
||||||
|
// an owning ELF segment; only segment-backed objects need module-unload cleanup bookkeeping.
|
||||||
|
if (program == nullptr) {
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto* obj = new PthreadStaticObject;
|
||||||
|
obj->program = program;
|
||||||
|
obj->type = type;
|
||||||
|
obj->vaddr = vaddr;
|
||||||
|
|
||||||
const auto it = std::find(m_objects.begin(), m_objects.end(), nullptr);
|
const auto it = std::find(m_objects.begin(), m_objects.end(), nullptr);
|
||||||
if (it != m_objects.end()) {
|
if (it != m_objects.end()) {
|
||||||
*it = obj;
|
*it = obj;
|
||||||
|
|||||||
Reference in New Issue
Block a user