pthread: fix lazy pthread objects

This commit is contained in:
nmzik
2026-07-17 21:47:11 +02:00
parent c8faab36a1
commit 42d42e3258
+11 -7
View File
@@ -1318,13 +1318,6 @@ void* PthreadStaticObjects::CreateObject(void* addr, PthreadStaticObject::Type t
auto vaddr = reinterpret_cast<uint64_t>(addr);
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);
int result = OK;
@@ -1345,6 +1338,17 @@ void* PthreadStaticObjects::CreateObject(void* addr, PthreadStaticObject::Type t
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);
if (it != m_objects.end()) {
*it = obj;