diff --git a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2CrashHandler.java b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2CrashHandler.java index 4743c2d2..3a12696f 100644 --- a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2CrashHandler.java +++ b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2CrashHandler.java @@ -127,6 +127,18 @@ public class Apple2CrashHandler { public final String getTitle(Apple2Activity activity) { return activity.getResources().getString(R.string.crash_stackbuf_overflow); } + }, + SIGABRT { + @Override + public final String getTitle(Apple2Activity activity) { + return activity.getResources().getString(R.string.crash_sigabrt); + } + }, + SIGFPE { + @Override + public final String getTitle(Apple2Activity activity) { + return activity.getResources().getString(R.string.crash_sigfpe); + } }; diff --git a/Android/app/src/main/res/values/strings.xml b/Android/app/src/main/res/values/strings.xml index 4e68f3ab..ca19bc7f 100644 --- a/Android/app/src/main/res/values/strings.xml +++ b/Android/app/src/main/res/values/strings.xml @@ -9,6 +9,8 @@ Crash emulator NULL-deref Java NPE + SIGABRT + SIGFPE stack call overflow stack buffer overflow diff --git a/Android/jni/jnicrash.c b/Android/jni/jnicrash.c index 024cf562..58ff8f32 100644 --- a/Android/jni/jnicrash.c +++ b/Android/jni/jnicrash.c @@ -17,6 +17,8 @@ enum { CRASH_NULL_DEREF, CRASH_STACKCALL_OVERFLOW, CRASH_STACKBUF_OVERFLOW, + CRASH_SIGABRT, + CRASH_SIGFPE, // MOAR! }; @@ -68,6 +70,21 @@ static volatile int __attribute__((noinline)) _crash_stackbuf_overflow(void) { return getpid(); } +static void _crash_sigabrt(void) { + kill(getpid(), SIGABRT); + __builtin_unreachable(); +} + +static void _crash_sigfpe(void) { + static volatile int foo = 2; + static volatile int bar = 0; + while (foo >= 0) { + --foo; + bar = 2/foo; + } + __builtin_unreachable(); +} + void Java_org_deadc0de_apple2ix_Apple2CrashHandler_nativePerformCrash(JNIEnv *env, jclass cls, jint crashType) { #warning FIXME TODO ... we should turn off test codepaths in release build =D LOG("... performing crash of type : %d", crashType); @@ -85,6 +102,14 @@ void Java_org_deadc0de_apple2ix_Apple2CrashHandler_nativePerformCrash(JNIEnv *en _crash_stackbuf_overflow(); break; + case CRASH_SIGABRT: + _crash_sigabrt(); + break; + + case CRASH_SIGFPE: + _crash_sigfpe(); + break; + default: // unknown crasher, just abort ... abort();