diff --git a/Userland/DevTools/UserspaceEmulator/Emulator.cpp b/Userland/DevTools/UserspaceEmulator/Emulator.cpp index e1954169d0..c6ff950d4c 100644 --- a/Userland/DevTools/UserspaceEmulator/Emulator.cpp +++ b/Userland/DevTools/UserspaceEmulator/Emulator.cpp @@ -765,9 +765,16 @@ int Emulator::virt$clock_settime(uint32_t clock_id, FlatPtr user_ts) return rc; } -int Emulator::virt$set_mmap_name(FlatPtr) +int Emulator::virt$set_mmap_name(FlatPtr params_addr) { - // FIXME: Implement. + Syscall::SC_set_mmap_name_params params {}; + mmu().copy_from_vm(¶ms, params_addr, sizeof(params)); + auto name = mmu().copy_buffer_from_vm((FlatPtr)params.name.characters, params.name.length); + + auto* region = mmu().find_region({ 0x23, (FlatPtr)params.addr }); + if (!region || !is(*region)) + return -EINVAL; + static_cast(*region).set_name(String::copy(name)); return 0; } diff --git a/Userland/DevTools/UserspaceEmulator/MmapRegion.h b/Userland/DevTools/UserspaceEmulator/MmapRegion.h index 3c0c76ec7e..c61069eaec 100644 --- a/Userland/DevTools/UserspaceEmulator/MmapRegion.h +++ b/Userland/DevTools/UserspaceEmulator/MmapRegion.h @@ -68,6 +68,7 @@ public: void set_malloc_metadata(Badge, NonnullOwnPtr metadata) { m_malloc_metadata = move(metadata); } const String& name() const { return m_name; } + void set_name(String name) { m_name = move(name); } private: MmapRegion(u32 base, u32 size, int prot, u8* data, u8* shadow_data);