about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorLeslie Zhai <zhaixiang@loongson.cn>2025-01-03 21:33:45 +0800
committerGitHub <noreply@github.com>2025-01-03 14:33:45 +0100
commit4065e61ec5fce97d1be4f1e0657037061742d25e (patch)
tree1c4eb30ee30af9877947a7f44000858e5e36e476 /src
parentda6b799a10d34f00fb51164a6d108fd7c8fd81af (diff)
downloadbox64-4065e61ec5fce97d1be4f1e0657037061742d25e.tar.gz
box64-4065e61ec5fce97d1be4f1e0657037061742d25e.zip
[DYNAREC] Appended instruction name to symbol (#2228)
Diffstat (limited to 'src')
-rw-r--r--src/core.c2
-rw-r--r--src/dynarec/arm64/dynarec_arm64_functions.c2
-rw-r--r--src/dynarec/dynarec_native.c4
-rw-r--r--src/dynarec/la64/dynarec_la64_functions.c2
-rw-r--r--src/dynarec/rv64/dynarec_rv64_functions.c2
-rw-r--r--src/include/dynarec_native.h2
6 files changed, 7 insertions, 7 deletions
diff --git a/src/core.c b/src/core.c
index cf7c7893..253b7dc9 100644
--- a/src/core.c
+++ b/src/core.c
@@ -925,7 +925,7 @@ void LoadLogEnv()
                 box64_dynarec_perf_map = p[0] - '0';
         }
         if (box64_dynarec_perf_map)
-            printf_log(LOG_INFO, "Dynarec will generate map file for Linux perf tool\n");
+            printf_log(LOG_INFO, "Dynarec will generate map file /tmp/perf-%d.map for Linux perf tool\n", getpid());
     }
     p = getenv("BOX64_DYNAREC_DF");
     if(p) {
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c
index 506a65e0..28673221 100644
--- a/src/dynarec/arm64/dynarec_arm64_functions.c
+++ b/src/dynarec/arm64/dynarec_arm64_functions.c
@@ -850,7 +850,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r
         dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), inst_name);
     }
     if (box64_dynarec_perf_map && box64_dynarec_perf_map_fd != -1) {
-        writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4);
+        writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4, name);
     }
 }
 
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 42b557ed..4ffd1048 100644
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -853,12 +853,12 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit
     return (void*)block;
 }
 
-void writePerfMap(uintptr_t func_addr, uintptr_t code_addr, size_t code_size)
+void writePerfMap(uintptr_t func_addr, uintptr_t code_addr, size_t code_size, const char* inst_name)
 {
     char pbuf[128];
     uint64_t sz = 0;
     uintptr_t start = 0;
     const char* symbname = FindNearestSymbolName(FindElfAddress(my_context, func_addr), (void*)func_addr, &start, &sz);
-    snprintf(pbuf, sizeof(pbuf), "0x%lx %ld %s\n", code_addr, code_size, symbname);
+    snprintf(pbuf, sizeof(pbuf), "0x%lx %ld %s:%s\n", code_addr, code_size, symbname, inst_name);
     write(box64_dynarec_perf_map_fd, pbuf, strlen(pbuf));
 }
diff --git a/src/dynarec/la64/dynarec_la64_functions.c b/src/dynarec/la64/dynarec_la64_functions.c
index cf3c43d4..5d8b2c77 100644
--- a/src/dynarec/la64/dynarec_la64_functions.c
+++ b/src/dynarec/la64/dynarec_la64_functions.c
@@ -399,7 +399,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r
         dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), inst_name);
     }
     if (box64_dynarec_perf_map && box64_dynarec_perf_map_fd != -1) {
-        writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4);
+        writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4, name);
     }
 }
 
diff --git a/src/dynarec/rv64/dynarec_rv64_functions.c b/src/dynarec/rv64/dynarec_rv64_functions.c
index 08dec929..34dbeb47 100644
--- a/src/dynarec/rv64/dynarec_rv64_functions.c
+++ b/src/dynarec/rv64/dynarec_rv64_functions.c
@@ -773,7 +773,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r
         dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), inst_name);
     }
     if (box64_dynarec_perf_map && box64_dynarec_perf_map_fd != -1) {
-        writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4);
+        writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4, name);
     }
 }
 
diff --git a/src/include/dynarec_native.h b/src/include/dynarec_native.h
index 4a5219a7..2f305155 100644
--- a/src/include/dynarec_native.h
+++ b/src/include/dynarec_native.h
@@ -26,6 +26,6 @@ void addInst(instsize_t* insts, size_t* size, int x64_size, int native_size);
 void CancelBlock64(int need_lock);
 void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bits);
 
-void writePerfMap(uintptr_t func_addr, uintptr_t code_addr, size_t code_size);
+void writePerfMap(uintptr_t func_addr, uintptr_t code_addr, size_t code_size, const char* inst_name);
 
 #endif //__DYNAREC_ARM_H_