From be658ca45f6ae55733d1439c11af659a237b5b32 Mon Sep 17 00:00:00 2001 From: Zhijin Zeng Date: Fri, 16 Oct 2026 11:48:02 +0800 Subject: [PATCH] [INTERP] Fix some small errors 1. sprintf `0x%x` need at least 11 bytes. 2. Fix RDPID opcode --- src/emu/x64runf30f.c | 27 ++++++++++++++------------- src/emu/x64tls.c | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index 3a99ebf631..cc678f853b 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -552,19 +552,20 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr, int* step) GX->ud[0]=(tmp8s)?0xffffffff:0; break; - case 0xC7: - CHECK_FLAGS(emu); - nextop = F8; - GETE8xw(0); - switch(tmp8u&7) { - case 6: /* RDPID Ed */ - ED->q[0] = helper_getcpu(emu); - SET_FLAG(F_CF); - break; - default: - return 0; - } - GX->ud[0]=(tmp8s)?0xffffffff:0; + case 0xC7: + nextop = F8; + tmp8u = nextop >> 3; + switch(tmp8u&7) { + case 7: /* RDPID Ed */ + if (!MODREG) { + return 0; + } + GETED(0); + ED->q[0] = helper_getcpu(emu); + break; + default: + return 0; + } break; case 0xD6: /* MOVQ2DQ Gx, Em */ diff --git a/src/emu/x64tls.c b/src/emu/x64tls.c index a427186ebe..6ebe541b70 100644 --- a/src/emu/x64tls.c +++ b/src/emu/x64tls.c @@ -137,7 +137,7 @@ uint32_t my_modify_ldt(x64emu_t* emu, int op, thread_area_32_t* td, int size) static const char* arch_prctl_param(int code) { - static char ret[10] = {0}; + static char ret[12] = {0}; switch (code) { case 0x1001: return "ARCH_SET_GS"; case 0x1002: return "ARCH_SET_FS";