about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-05-17 21:23:14 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-05-17 21:23:14 +0200
commit61725c8b498c6a3bed508440a31c0f3ed83d54b9 (patch)
treed412f8a5f5295539d9c2d6cc75102ef18f46e812 /src
parent727178df574fab93a029c608e022fbbd5fc5a4a3 (diff)
downloadbox64-61725c8b498c6a3bed508440a31c0f3ed83d54b9.tar.gz
box64-61725c8b498c6a3bed508440a31c0f3ed83d54b9.zip
Small fixes to my_backtrace function
Diffstat (limited to 'src')
-rwxr-xr-xsrc/wrapped/wrappedlibc.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 27f0ed47..ced6a6cc 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -2221,21 +2221,21 @@ EXPORT int my_semctl(x64emu_t* emu, int semid, int semnum, int cmd, union semun
 EXPORT int my_backtrace(x64emu_t* emu, void** buffer, int size)
 {
     // Get current Framepointer
-    uintptr_t **fp = (uintptr_t**)R_RBP;
-    uintptr_t **stack_end = (uintptr_t**)(emu->init_stack + emu->size_stack);
-    uintptr_t **stack_start = (uintptr_t**)(emu->init_stack);
+    uintptr_t *fp = (uintptr_t*)R_RBP;
+    uintptr_t *stack_end = (uintptr_t*)(emu->init_stack + emu->size_stack);
+    uintptr_t *stack_start = (uintptr_t*)(emu->init_stack);
     // check if fp is on another stack (in case of beeing call from a signal with altstack)
     x64emu_t *thread_emu = thread_get_emu();
-    if(emu!=thread_emu && ((fp>(uintptr_t**)(thread_emu->init_stack)) && (fp<(uintptr_t**)(thread_emu->init_stack + thread_emu->size_stack)))) {
-        stack_end = (uintptr_t**)(thread_emu->init_stack + thread_emu->size_stack);
-        stack_start = (uintptr_t**)(thread_emu->init_stack);        
+    if(emu!=thread_emu && ((fp>(uintptr_t*)(thread_emu->init_stack)) && (fp<(uintptr_t*)(thread_emu->init_stack + thread_emu->size_stack)))) {
+        stack_end = (uintptr_t*)(thread_emu->init_stack + thread_emu->size_stack);
+        stack_start = (uintptr_t*)(thread_emu->init_stack);        
     }
     int idx=0;
     while(idx<size) {
-        if(!fp || (fp>stack_end) || (fp<stack_start))
-            break;
-        buffer[idx] = fp[1];
-        fp = (uintptr_t**)fp[0];
+        if(!fp || (fp>=stack_end) || (fp<=stack_start))
+            return idx;
+        buffer[idx] = (void*)fp[1];
+        fp = (uintptr_t*)fp[0];
         ++idx;
     }
     return idx;