summaryrefslogtreecommitdiff
path: root/Tools/WAD/Wad/debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/WAD/Wad/debug.c')
-rw-r--r--Tools/WAD/Wad/debug.c98
1 files changed, 98 insertions, 0 deletions
diff --git a/Tools/WAD/Wad/debug.c b/Tools/WAD/Wad/debug.c
new file mode 100644
index 0000000..fcdb87a
--- /dev/null
+++ b/Tools/WAD/Wad/debug.c
@@ -0,0 +1,98 @@
+#include <stdio.h>
+#include <string.h>
+#include "wad.h"
+#include <assert.h>
+
+typedef struct Foo {
+ double a;
+ double b;
+ float c;
+} Foo;
+
+static int type_crash(int n, short m, char c, double x, float y, Foo f, void *ptr) {
+ int *a = 0;
+ *a = 3;
+ return 1;
+}
+static int seg_crash(int n, double x,
+ float y) {
+ int *a = 0;
+ if (n > 0) seg_crash(n-1,x,y);
+ *a = 3;
+ return 1;
+}
+
+int bus_crash(int n) {
+ int b;
+ int *a = &b;
+ a = (int *) ((int) a | 0x1);
+ if (n > 0) bus_crash(n-1);
+ *a = 3;
+ printf("well, well, well.\n");
+ return 1;
+}
+
+int abort_crash(int n) {
+ assert(n > 0);
+ abort_crash(n-1);
+ return 1;
+}
+
+double double_crash(double a, double b) {
+ double *c;
+ *c = a+b;
+ return *c;
+}
+
+int math_crash(int x, int y) {
+ return x/y;
+}
+
+int call_func(int n, int (*f)(int)) {
+
+ int ret;
+ ret = (*f)(n);
+ if (ret <= 0) {
+ printf("An error occurred!\n");
+ }
+ return 0;
+}
+
+static int multi(char a, short b, int c, double d) {
+ a = 'x';
+ b = 15236;
+ c = 12345678;
+ d = 3.14159;
+ return c;
+}
+
+static int test(int x, int (*f)(int)) {
+ return (*f)(-x);
+}
+
+int main(int argc, char **argv) {
+ int n;
+ int (*f)(int);
+ Foo foo = { 3.14, 28.18, 1.0 };
+
+ printf("starting.\n");
+
+ if (strcmp(argv[1],"abort") == 0) {
+ abort_crash(0);
+ } else if (strcmp(argv[1],"seg") ==0) {
+ seg_crash(0,1,2);
+ } else if (strcmp(argv[1],"bus") == 0) {
+ bus_crash(0);
+ } else if (strcmp(argv[1],"ret") == 0) {
+ call_func(4,abort_crash);
+ } else if (strcmp(argv[1],"test") == 0) {
+ test(-1000,abort_crash);
+ } else if (strcmp(argv[1],"double") == 0) {
+ double_crash(3.14159,2.1828);
+ } else if (strcmp(argv[1],"math") == 0) {
+ math_crash(3,0);
+ } else if (strcmp(argv[1],"type") == 0) {
+ type_crash(34,42,17, 3.14159, 2.1828, foo, &foo);
+ }
+ multi(3,5,10,3.14);
+}