about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt1
-rw-r--r--src/wrapped/generated/wrappedlibctypes.h1
-rwxr-xr-xsrc/wrapped/wrappedlibc.c7
-rwxr-xr-xsrc/wrapped/wrappedlibc_private.h2
4 files changed, 11 insertions, 0 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 323b9fc7..08cc2b5f 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -2663,6 +2663,7 @@ wrappedlibasound:
 wrappedlibc:
 - vFv:
   - _Jv_RegisterClasses
+  - __cxa_pure_virtual
   - __stack_chk_fail
 - vFp:
   - _ITM_deregisterTMCloneTable
diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h
index 58d9dad6..2e911b45 100644
--- a/src/wrapped/generated/wrappedlibctypes.h
+++ b/src/wrapped/generated/wrappedlibctypes.h
@@ -85,6 +85,7 @@ typedef int64_t (*iFppipppp_t)(void*, void*, int64_t, void*, void*, void*, void*
 
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(_Jv_RegisterClasses, vFv_t) \
+	GO(__cxa_pure_virtual, vFv_t) \
 	GO(__stack_chk_fail, vFv_t) \
 	GO(_ITM_deregisterTMCloneTable, vFp_t) \
 	GO(__cxa_finalize, vFp_t) \
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index ae0c954f..675963d6 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -2716,6 +2716,13 @@ EXPORT int my_clone(x64emu_t* emu, void* fn, void* stack, int flags, void* args,
     return (uintptr_t)ret;
 }
 
+EXPORT void my___cxa_pure_virtual(x64emu_t* emu)
+{
+    fprintf(LOG_NONE, "Pure virtual function called\n");
+    emu->quit = 1;
+    abort();
+}
+
 EXPORT char** my_environ = NULL;
 EXPORT char** my__environ = NULL;
 EXPORT char** my___environ = NULL;  // all aliases
diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h
index 9d8ac439..0490fab2 100755
--- a/src/wrapped/wrappedlibc_private.h
+++ b/src/wrapped/wrappedlibc_private.h
@@ -2303,6 +2303,8 @@ GOM(_ITM_deregisterTMCloneTable, vFEp)
 GOM(__register_frame_info, vFpp)    // faked function
 GOM(__deregister_frame_info, pFp)
 
+GOWM(__cxa_pure_virtual, vFEv)     // create a function to trap pure virtual call
+
 DATAM(program_invocation_name, sizeof(void*))
 DATAM(program_invocation_short_name, sizeof(void*))