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();