diff options
author | Richard Braun <rbraun@sceen.net> | 2013-09-02 13:52:57 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2013-09-02 13:52:57 +0200 |
commit | 3abc8fca177cbf6425b4955badd7efa020a1f10d (patch) | |
tree | 7b4b2b32ca3003586f66d7f1b756c5690781eade |
Initial commit
-rw-r--r-- | Makefile | 9 | ||||
-rw-r--r-- | mach_print.S | 3 | ||||
-rw-r--r-- | main.c | 21 |
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) @@ -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; +} |