summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2013-09-02 13:52:57 +0200
committerRichard Braun <rbraun@sceen.net>2013-09-02 13:52:57 +0200
commit3abc8fca177cbf6425b4955badd7efa020a1f10d (patch)
tree7b4b2b32ca3003586f66d7f1b756c5690781eade
Initial commit
-rw-r--r--Makefile9
-rw-r--r--mach_print.S3
-rw-r--r--main.c21
3 files changed, 33 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..8590ef7
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,9 @@
+CFLAGS = -O0 -g3
+
+mach_print: main.o mach_print.o
+ gcc -o mach_print main.o mach_print.o
+
+clean:
+ rm -f mach_print *.o
+
+.PHONY: clean
diff --git a/mach_print.S b/mach_print.S
new file mode 100644
index 0000000..606a66e
--- /dev/null
+++ b/mach_print.S
@@ -0,0 +1,3 @@
+#include <mach/machine/syscall_sw.h>
+
+kernel_trap(mach_print,-30,1)
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..23b9fc8
--- /dev/null
+++ b/main.c
@@ -0,0 +1,21 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void mach_print(char *);
+
+int
+main(int argc, char *argv[])
+{
+ int size;
+ char *s;
+
+ size = snprintf(NULL, 0, "%s\n", argv[1]);
+ assert(size > 0);
+ s = malloc(size);
+ assert(s != NULL);
+ sprintf(s, "%s\n", argv[1]);
+ mach_print(s);
+ free(s);
+ return EXIT_SUCCESS;
+}