diff --git a/rpcsx-os/linker.cpp b/rpcsx-os/linker.cpp index cf178a842..8299a1c0d 100644 --- a/rpcsx-os/linker.cpp +++ b/rpcsx-os/linker.cpp @@ -714,13 +714,10 @@ Ref rx::linker::loadModule(std::span image, symbol.libraryIndex = -1; symbol.moduleIndex = -1; } else { - std::printf("ignored: (%s) - %lx\n", - sceStrtab ? sceStrtab + - static_cast(sym.st_name) - : "", - sym.st_value); - - continue; + symbol.id = + encodeFid(sceStrtab + static_cast(sym.st_name)); + symbol.libraryIndex = -1; + symbol.moduleIndex = -1; } } diff --git a/rpcsx-os/ops.cpp b/rpcsx-os/ops.cpp index 3b881cb18..de5baf240 100644 --- a/rpcsx-os/ops.cpp +++ b/rpcsx-os/ops.cpp @@ -42,7 +42,7 @@ orbis::SysResult mmap(orbis::Thread *thread, orbis::caddr_t addr, if (handle->mmap != nullptr) { result = handle->mmap(handle.get(), addr, len, prot, flags, pos); } else { - std::printf("unimplemented mmap\n"); + std::printf("unimplemented mmap for fd %d\n", static_cast(fd)); result = rx::vm::map(addr, len, prot, flags); } } @@ -70,7 +70,9 @@ orbis::SysResult msync(orbis::Thread *thread, orbis::ptr addr, orbis::SysResult mprotect(orbis::Thread *thread, orbis::ptr addr, orbis::size_t len, orbis::sint prot) { - rx::vm::protect((void *)addr, len, prot); + if (!rx::vm::protect((void *)addr, len, prot)) { + return ErrorCode::INVAL; + } return {}; } @@ -398,7 +400,7 @@ orbis::SysResult dynlib_get_obj_member(orbis::Thread *thread, ptr findSymbolById(orbis::Module *module, std::uint64_t id) { for (auto sym : module->symbols) { if (sym.id == id && sym.bind != orbis::SymbolBind::Local) { - return (ptr)module->base + sym.address; + return sym.address != 0 ? (ptr)module->base + sym.address : 0; } }