about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-07-30 11:50:51 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-07-30 11:50:51 +0200
commit0fe835e0871b42104218c9440f599d7a9e2b1f2f (patch)
tree073f25f96ae9e865ea288bd0a91a02288161af72 /src
parente8ed41c76330ba837b5a27314cb038ed3bdbfc6b (diff)
downloadbox64-0fe835e0871b42104218c9440f599d7a9e2b1f2f.tar.gz
box64-0fe835e0871b42104218c9440f599d7a9e2b1f2f.zip
Improve obstack support (for #352)
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt5
-rw-r--r--src/wrapped/generated/wrappedlibctypes.h4
-rw-r--r--src/wrapped/generated/wrapper.c3
-rw-r--r--src/wrapped/generated/wrapper.h1
-rwxr-xr-xsrc/wrapped/wrappedlibc.c8
-rwxr-xr-xsrc/wrapped/wrappedlibc_private.h6
6 files changed, 20 insertions, 7 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index e5486dd3..b5c488d9 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -1173,6 +1173,7 @@
 #() iFplluu
 #() iFpLiLi
 #() iFpLlpp
+#() iFpLLpp
 #() iFpLppi
 #() iFppiiu
 #() iFppiip
@@ -2862,6 +2863,8 @@ wrappedlibc:
   - _ITM_registerTMCloneTable
 - vFpp:
   - __register_frame_info
+  - _obstack_free
+  - obstack_free
   - tdestroy
 - vFpV:
   - warn
@@ -3038,6 +3041,8 @@ wrappedlibc:
   - __sprintf_chk
 - iFpuppp:
   - __vswprintf_chk
+- iFpLLpp:
+  - _obstack_begin
 - pFpLLiN:
   - mremap
 - pFppLLp:
diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h
index 2de2464a..452c2515 100644
--- a/src/wrapped/generated/wrappedlibctypes.h
+++ b/src/wrapped/generated/wrappedlibctypes.h
@@ -76,6 +76,7 @@ typedef int64_t (*iFipiip_t)(int64_t, void*, int64_t, int64_t, void*);
 typedef int64_t (*iFipppp_t)(int64_t, void*, void*, void*, void*);
 typedef int64_t (*iFpilpV_t)(void*, int64_t, intptr_t, void*, ...);
 typedef int64_t (*iFpuppp_t)(void*, uint64_t, void*, void*, void*);
+typedef int64_t (*iFpLLpp_t)(void*, uintptr_t, uintptr_t, void*, void*);
 typedef void* (*pFpLLiN_t)(void*, uintptr_t, uintptr_t, int64_t, ...);
 typedef void* (*pFppLLp_t)(void*, void*, uintptr_t, uintptr_t, void*);
 typedef void* (*pFpppLp_t)(void*, void*, void*, uintptr_t, void*);
@@ -115,6 +116,8 @@ typedef int64_t (*iFppipppp_t)(void*, void*, int64_t, void*, void*, void*, void*
 	GO(siglongjmp, vFpi_t) \
 	GO(_ITM_registerTMCloneTable, vFpu_t) \
 	GO(__register_frame_info, vFpp_t) \
+	GO(_obstack_free, vFpp_t) \
+	GO(obstack_free, vFpp_t) \
 	GO(tdestroy, vFpp_t) \
 	GO(warn, vFpV_t) \
 	GO(warnx, vFpV_t) \
@@ -239,6 +242,7 @@ typedef int64_t (*iFppipppp_t)(void*, void*, int64_t, void*, void*, void*, void*
 	GO(scandirat, iFipppp_t) \
 	GO(__sprintf_chk, iFpilpV_t) \
 	GO(__vswprintf_chk, iFpuppp_t) \
+	GO(_obstack_begin, iFpLLpp_t) \
 	GO(mremap, pFpLLiN_t) \
 	GO(bsearch, pFppLLp_t) \
 	GO(lfind, pFpppLp_t) \
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 561d36f0..13b6fc80 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -1207,6 +1207,7 @@ typedef int64_t (*iFpUupp_t)(void*, uint64_t, uint64_t, void*, void*);
 typedef int64_t (*iFplluu_t)(void*, intptr_t, intptr_t, uint64_t, uint64_t);
 typedef int64_t (*iFpLiLi_t)(void*, uintptr_t, int64_t, uintptr_t, int64_t);
 typedef int64_t (*iFpLlpp_t)(void*, uintptr_t, intptr_t, void*, void*);
+typedef int64_t (*iFpLLpp_t)(void*, uintptr_t, uintptr_t, void*, void*);
 typedef int64_t (*iFpLppi_t)(void*, uintptr_t, void*, void*, int64_t);
 typedef int64_t (*iFppiiu_t)(void*, void*, int64_t, int64_t, uint64_t);
 typedef int64_t (*iFppiip_t)(void*, void*, int64_t, int64_t, void*);
@@ -3368,6 +3369,7 @@ void iFpUupp(x64emu_t *emu, uintptr_t fcn) { iFpUupp_t fn = (iFpUupp_t)fcn; R_RA
 void iFplluu(x64emu_t *emu, uintptr_t fcn) { iFplluu_t fn = (iFplluu_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); }
 void iFpLiLi(x64emu_t *emu, uintptr_t fcn) { iFpLiLi_t fn = (iFpLiLi_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int64_t)R_RDX, (uintptr_t)R_RCX, (int64_t)R_R8); }
 void iFpLlpp(x64emu_t *emu, uintptr_t fcn) { iFpLlpp_t fn = (iFpLlpp_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
+void iFpLLpp(x64emu_t *emu, uintptr_t fcn) { iFpLLpp_t fn = (iFpLLpp_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void iFpLppi(x64emu_t *emu, uintptr_t fcn) { iFpLppi_t fn = (iFpLppi_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8); }
 void iFppiiu(x64emu_t *emu, uintptr_t fcn) { iFppiiu_t fn = (iFppiiu_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (uint64_t)R_R8); }
 void iFppiip(x64emu_t *emu, uintptr_t fcn) { iFppiip_t fn = (iFppiip_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (void*)R_R8); }
@@ -5358,6 +5360,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &iFplluu) return 1;
 	if (fun == &iFpLiLi) return 1;
 	if (fun == &iFpLlpp) return 1;
+	if (fun == &iFpLLpp) return 1;
 	if (fun == &iFpLppi) return 1;
 	if (fun == &iFppiiu) return 1;
 	if (fun == &iFppiip) return 1;
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index a7bd83f3..9be2d94d 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -1206,6 +1206,7 @@ void iFpUupp(x64emu_t *emu, uintptr_t fnc);
 void iFplluu(x64emu_t *emu, uintptr_t fnc);
 void iFpLiLi(x64emu_t *emu, uintptr_t fnc);
 void iFpLlpp(x64emu_t *emu, uintptr_t fnc);
+void iFpLLpp(x64emu_t *emu, uintptr_t fnc);
 void iFpLppi(x64emu_t *emu, uintptr_t fnc);
 void iFppiiu(x64emu_t *emu, uintptr_t fnc);
 void iFppiip(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 6d5cab3e..e5fcad01 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -2487,9 +2487,6 @@ EXPORT void* my___libc_dlsym(x64emu_t* emu, void* handle, void* name)
     return my_dlsym(emu, handle, name);
 }
 
-// all obstack function defined in obstack.c file
-void obstackSetup();
-
 EXPORT int my_nanosleep(const struct timespec *req, struct timespec *rem)
 {
     if(!req)
@@ -2498,6 +2495,9 @@ EXPORT int my_nanosleep(const struct timespec *req, struct timespec *rem)
 }
 #endif
 
+// all obstack function defined in obstack.c file
+void obstackSetup();
+
 EXPORT void* my_malloc(unsigned long size)
 {
     return calloc(1, size);
@@ -2860,7 +2860,7 @@ EXPORT char my___libc_single_threaded = 0;
     /*InitCpuModel();*/         \
     ctSetup();              \
     stSetup(box64);         \
-    /*obstackSetup();*/         \
+    obstackSetup();         \
     my_environ = my__environ = my___environ = box64->envv;                      \
     my___progname_full = my_program_invocation_name = box64->argv[0];           \
     my___progname = my_program_invocation_short_name =                          \
diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h
index cd2b728e..b9b9452e 100755
--- a/src/wrapped/wrappedlibc_private.h
+++ b/src/wrapped/wrappedlibc_private.h
@@ -1262,11 +1262,11 @@ GOW(ntp_adjtime, iFp)
 //DATAB(_obstack, 
 //GO(_obstack_allocated_p, 
 //DATA(obstack_alloc_failed_handler, 
-//GO(_obstack_begin, 
+GOM(_obstack_begin, iFpLLpp)
 //GO(_obstack_begin_1, 
 //DATA(obstack_exit_failure, 
-//GO(_obstack_free, 
-//GO(obstack_free, 
+GOM(_obstack_free, vFpp)
+GOM(obstack_free, vFpp)
 //GO(_obstack_memory_used, 
 GOM(_obstack_newchunk, vFEpi)
 //GOW(obstack_printf, iFppV)