diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-12-17 11:19:56 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-12-17 11:19:56 +0100 |
| commit | 2aa7c45ca298c6ed49f86a17f3f77959275147c0 (patch) | |
| tree | ec03a54be8bf8eb99d82fcadf213db5dba0bb689 /src/wrapped | |
| parent | 73467dc523081ecd0ffad503d6f46c2c58057f90 (diff) | |
| download | box64-2aa7c45ca298c6ed49f86a17f3f77959275147c0.tar.gz box64-2aa7c45ca298c6ed49f86a17f3f77959275147c0.zip | |
More work on malloc override and tbbmalloc wrapping
Diffstat (limited to 'src/wrapped')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 28 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedtbbmallocdefs.h | 8 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedtbbmallocproxytypes.h | 10 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedtbbmalloctypes.h | 34 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedtbbmallocundefs.h | 8 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rw-r--r-- | src/wrapped/wrappedtbbmalloc.c | 23 | ||||
| -rw-r--r-- | src/wrapped/wrappedtbbmalloc_private.h | 34 | ||||
| -rw-r--r-- | src/wrapped/wrappedtbbmallocproxy_private.h | 11 |
10 files changed, 157 insertions, 3 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 2ac6a602..5be9252d 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -972,6 +972,7 @@ #() pFplpl #() pFplpp #() pFpLip +#() pFpLLp #() pFpLpL #() pFppii #() pFppiu @@ -2654,6 +2655,7 @@ wrappedgnutls: - gnutls_global_set_log_function - vFpp: - gnutls_transport_set_pull_function + - gnutls_transport_set_pull_timeout_function - gnutls_transport_set_push_function wrappedgobject2: - pFp: @@ -4063,19 +4065,45 @@ wrappedsmpeg2: - SMPEG_new_rwops wrappedsoftokn3: wrappedssl3: +wrappedtbbmalloc: +- vFp: + - scalable_aligned_free +- LFp: + - scalable_msize +- LFpp: + - safer_scalable_msize +- pFLL: + - scalable_aligned_malloc + - scalable_calloc +- pFpp: + - safer_scalable_free +- pFpLL: + - scalable_aligned_realloc +- pFpLp: + - safer_scalable_realloc +- pFpLLp: + - safer_scalable_aligned_realloc wrappedtbbmallocproxy: - vFp: - _ZdaPv - _ZdlPv + - __RML_close_factory - pFL: - _Znam - _Znwm - vFpp: - _ZdaPvRKSt9nothrow_t - _ZdlPvRKSt9nothrow_t + - __TBB_call_with_my_server_info - pFLp: - _ZnamRKSt9nothrow_t - _ZnwmRKSt9nothrow_t +- iFipp: + - __TBB_internal_find_original_malloc +- iFppi: + - __RML_open_factory +- iFppp: + - __TBB_make_rml_server wrappedtcmallocminimal: - pFp: - mallinfo diff --git a/src/wrapped/generated/wrappedtbbmallocdefs.h b/src/wrapped/generated/wrappedtbbmallocdefs.h new file mode 100644 index 00000000..e7022f6b --- /dev/null +++ b/src/wrapped/generated/wrappedtbbmallocdefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.1.0.16) * + *******************************************************************/ +#ifndef __wrappedtbbmallocDEFS_H_ +#define __wrappedtbbmallocDEFS_H_ + + +#endif // __wrappedtbbmallocDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxytypes.h b/src/wrapped/generated/wrappedtbbmallocproxytypes.h index 41d5a922..1cab4bdc 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxytypes.h +++ b/src/wrapped/generated/wrappedtbbmallocproxytypes.h @@ -15,15 +15,23 @@ typedef void (*vFp_t)(void*); typedef void* (*pFL_t)(uintptr_t); typedef void (*vFpp_t)(void*, void*); typedef void* (*pFLp_t)(uintptr_t, void*); +typedef int64_t (*iFipp_t)(int64_t, void*, void*); +typedef int64_t (*iFppi_t)(void*, void*, int64_t); +typedef int64_t (*iFppp_t)(void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(_ZdaPv, vFp_t) \ GO(_ZdlPv, vFp_t) \ + GO(__RML_close_factory, vFp_t) \ GO(_Znam, pFL_t) \ GO(_Znwm, pFL_t) \ GO(_ZdaPvRKSt9nothrow_t, vFpp_t) \ GO(_ZdlPvRKSt9nothrow_t, vFpp_t) \ + GO(__TBB_call_with_my_server_info, vFpp_t) \ GO(_ZnamRKSt9nothrow_t, pFLp_t) \ - GO(_ZnwmRKSt9nothrow_t, pFLp_t) + GO(_ZnwmRKSt9nothrow_t, pFLp_t) \ + GO(__TBB_internal_find_original_malloc, iFipp_t) \ + GO(__RML_open_factory, iFppi_t) \ + GO(__TBB_make_rml_server, iFppp_t) #endif // __wrappedtbbmallocproxyTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmalloctypes.h b/src/wrapped/generated/wrappedtbbmalloctypes.h new file mode 100644 index 00000000..7ceb729a --- /dev/null +++ b/src/wrapped/generated/wrappedtbbmalloctypes.h @@ -0,0 +1,34 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.1.0.16) * + *******************************************************************/ +#ifndef __wrappedtbbmallocTYPES_H_ +#define __wrappedtbbmallocTYPES_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFp_t)(void*); +typedef uintptr_t (*LFp_t)(void*); +typedef uintptr_t (*LFpp_t)(void*, void*); +typedef void* (*pFLL_t)(uintptr_t, uintptr_t); +typedef void* (*pFpp_t)(void*, void*); +typedef void* (*pFpLL_t)(void*, uintptr_t, uintptr_t); +typedef void* (*pFpLp_t)(void*, uintptr_t, void*); +typedef void* (*pFpLLp_t)(void*, uintptr_t, uintptr_t, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(scalable_aligned_free, vFp_t) \ + GO(scalable_msize, LFp_t) \ + GO(safer_scalable_msize, LFpp_t) \ + GO(scalable_aligned_malloc, pFLL_t) \ + GO(scalable_calloc, pFLL_t) \ + GO(safer_scalable_free, pFpp_t) \ + GO(scalable_aligned_realloc, pFpLL_t) \ + GO(safer_scalable_realloc, pFpLp_t) \ + GO(safer_scalable_aligned_realloc, pFpLLp_t) + +#endif // __wrappedtbbmallocTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocundefs.h b/src/wrapped/generated/wrappedtbbmallocundefs.h new file mode 100644 index 00000000..6edc1b18 --- /dev/null +++ b/src/wrapped/generated/wrappedtbbmallocundefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.1.0.16) * + *******************************************************************/ +#ifndef __wrappedtbbmallocUNDEFS_H_ +#define __wrappedtbbmallocUNDEFS_H_ + + +#endif // __wrappedtbbmallocUNDEFS_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 23d4f8a0..89e285b8 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1006,6 +1006,7 @@ typedef void* (*pFpdIU_t)(void*, double, int64_t, uint64_t); typedef void* (*pFplpl_t)(void*, intptr_t, void*, intptr_t); typedef void* (*pFplpp_t)(void*, intptr_t, void*, void*); typedef void* (*pFpLip_t)(void*, uintptr_t, int64_t, void*); +typedef void* (*pFpLLp_t)(void*, uintptr_t, uintptr_t, void*); typedef void* (*pFpLpL_t)(void*, uintptr_t, void*, uintptr_t); typedef void* (*pFppii_t)(void*, void*, int64_t, int64_t); typedef void* (*pFppiu_t)(void*, void*, int64_t, uint64_t); @@ -3270,6 +3271,7 @@ void pFpdIU(x64emu_t *emu, uintptr_t fcn) { pFpdIU_t fn = (pFpdIU_t)fcn; R_RAX=( void pFplpl(x64emu_t *emu, uintptr_t fcn) { pFplpl_t fn = (pFplpl_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (intptr_t)R_RCX); } void pFplpp(x64emu_t *emu, uintptr_t fcn) { pFplpp_t fn = (pFplpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFpLip(x64emu_t *emu, uintptr_t fcn) { pFpLip_t fn = (pFpLip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX); } +void pFpLLp(x64emu_t *emu, uintptr_t fcn) { pFpLLp_t fn = (pFpLLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void pFpLpL(x64emu_t *emu, uintptr_t fcn) { pFpLpL_t fn = (pFpLpL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void pFppii(x64emu_t *emu, uintptr_t fcn) { pFppii_t fn = (pFppii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } void pFppiu(x64emu_t *emu, uintptr_t fcn) { pFppiu_t fn = (pFppiu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (uint64_t)R_RCX); } @@ -5398,6 +5400,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFplpl) return 1; if (fun == &pFplpp) return 1; if (fun == &pFpLip) return 1; + if (fun == &pFpLLp) return 1; if (fun == &pFpLpL) return 1; if (fun == &pFppii) return 1; if (fun == &pFppiu) return 1; diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index c509113b..140ea38e 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1005,6 +1005,7 @@ void pFpdIU(x64emu_t *emu, uintptr_t fnc); void pFplpl(x64emu_t *emu, uintptr_t fnc); void pFplpp(x64emu_t *emu, uintptr_t fnc); void pFpLip(x64emu_t *emu, uintptr_t fnc); +void pFpLLp(x64emu_t *emu, uintptr_t fnc); void pFpLpL(x64emu_t *emu, uintptr_t fnc); void pFppii(x64emu_t *emu, uintptr_t fnc); void pFppiu(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedtbbmalloc.c b/src/wrapped/wrappedtbbmalloc.c new file mode 100644 index 00000000..f2618999 --- /dev/null +++ b/src/wrapped/wrappedtbbmalloc.c @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <dlfcn.h> + +#include "wrappedlibs.h" + +#include "wrapper.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" + +// Fake the lib for now, don't load it +const char* tbbmallocName = "libtbbmalloc.so.2"; +#define LIBNAME tbbmalloc + +// this preinit basically open "box64" as dlopen +#define PRE_INIT\ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + if(0) + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedtbbmalloc_private.h b/src/wrapped/wrappedtbbmalloc_private.h new file mode 100644 index 00000000..042151cf --- /dev/null +++ b/src/wrapped/wrappedtbbmalloc_private.h @@ -0,0 +1,34 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GOM(safer_scalable_aligned_realloc, pFpLLp) //%noE +GOM(safer_scalable_free, pFpp) //%noE +GOM(safer_scalable_msize, LFpp) //%noE +GOM(safer_scalable_realloc, pFpLp) //%noE +GOM(scalable_aligned_free, vFp) //%noE +GOM(scalable_aligned_malloc, pFLL) //%noE +GOM(scalable_aligned_realloc, pFpLL) //%noE +//GO(scalable_allocation_command, +//GO(scalable_allocation_mode, +GOM(scalable_calloc, pFLL) //%noE +GO2(scalable_free, vFp, free) +GO2(scalable_malloc, pFL, malloc) +GOM(scalable_msize, LFp) //%noE +GO2(scalable_posix_memalign, iFpLL, posix_memalign) +GO2(scalable_realloc, pFpL, realloc) +GO2(__TBB_internal_calloc, pFLL, calloc) +GO2(__TBB_internal_free, vFp, free) +GO2(__TBB_internal_malloc, pFL, malloc) +GO2(__TBB_internal_malloc_usable_size, LFp, malloc_usable_size) +GO2(__TBB_internal_posix_memalign, iFpLL, posix_memalign) +GO2(__TBB_internal_realloc, pFpL, realloc) +//GO(_ZN3rml10pool_resetEPNS_10MemoryPoolE, +//GO(_ZN3rml11pool_createElPKNS_13MemPoolPolicyE, +//GO(_ZN3rml11pool_mallocEPNS_10MemoryPoolEm, +//GO(_ZN3rml12pool_destroyEPNS_10MemoryPoolE, +//GO(_ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm, +//GO(_ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE, +//GO(_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm, +//GO(_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm, +//GO(_ZN3rml9pool_freeEPNS_10MemoryPoolEPv, diff --git a/src/wrapped/wrappedtbbmallocproxy_private.h b/src/wrapped/wrappedtbbmallocproxy_private.h index 08ef1a97..f85d9e13 100644 --- a/src/wrapped/wrappedtbbmallocproxy_private.h +++ b/src/wrapped/wrappedtbbmallocproxy_private.h @@ -21,8 +21,7 @@ //GO(posix_memalign, //GO(pvalloc, //GO(realloc, -//GO(__TBB_internal_find_original_malloc, -//GO(__TBB_malloc_proxy, +GO2(__TBB_malloc_proxy, pFL, my_malloc) //GO(valloc, GOM(_ZdaPv, vFp) //%noE GOM(_ZdaPvRKSt9nothrow_t, vFpp) //%noE @@ -32,3 +31,11 @@ GOM(_Znam, pFL) //%noE GOM(_ZnamRKSt9nothrow_t, pFLp) //%noE GOM(_Znwm, pFL) //%noE GOM(_ZnwmRKSt9nothrow_t, pFLp) //%noE + +GOM(__TBB_internal_find_original_malloc, iFipp) //%noE +GOM(__TBB_call_with_my_server_info, vFpp) //%noE +GOM(__TBB_make_rml_server, iFppp) //%noE +GOM(__RML_close_factory, vFp) //%noE +GOM(__RML_open_factory, iFppi) //%noE + +GO(dummy_pFpLLp, pFpLLp) // dummy to have pFpLLp for mallochook \ No newline at end of file |