Browse Source

Fix running single_cream.

Giovanni Mascellani 5 years ago
parent
commit
cef2d103de
6 changed files with 21 additions and 5 deletions
  1. 4 1
      Makefile
  2. 1 1
      contrib/single_cream
  3. 7 2
      diskfs/run_tcc_sc.c
  4. 3 0
      diskfs/stdlib/asmc.h
  5. 3 1
      diskfs/stdlib/stdio.h
  6. 3 0
      diskfs/stdlib/unistd.h

+ 4 - 1
Makefile

@@ -36,7 +36,10 @@ diskfs/fasm/fasm.asm: contrib/fasm/source/version.inc contrib/fasm/source/errors
 	mkdir -p diskfs/fasm
 	cat $^ > $@
 
-build/diskfs.list: diskfs/* diskfs/mescc/x86_defs.m1 diskfs/fasm/fasm.asm
+diskfs/sch3.scm: diskfs/sc/src/init.scm diskfs/sc/src/preprocessor.scm diskfs/sc/src/std.scm diskfs/sc/t/scheme-tests/minikanren.scm
+	cat $^ > $@
+
+build/diskfs.list: diskfs/* diskfs/mescc/x86_defs.m1 diskfs/fasm/fasm.asm diskfs/sch3.scm
 	(cd diskfs/ ; find -L . -type f) | cut -c3- | sed -e 's|\(.*\)|\1 diskfs/\1|' > $@
 
 build/diskfs.img: build/diskfs.list

+ 1 - 1
contrib/single_cream

@@ -1 +1 @@
-Subproject commit c8c9b83f3831184af294d6930b5411a0e41ae2f8
+Subproject commit 5daa24d92015f0e7551e473764379a03ba4e2a94

+ 7 - 2
diskfs/run_tcc_sc.c

@@ -28,6 +28,11 @@ const char *sources[][2] = {
     {SC_PREFIX "/sch3.c", SC_TEMP "/sch3.o"},
 };
 
+char *sch3_argv[] = {
+    "sch3",
+    "/disk1/sch3.scm",
+};
+
 int main(int argc, char *argv[]) {
     printf("Here is where we compile single_cream!\n");
 
@@ -78,14 +83,14 @@ int main(int argc, char *argv[]) {
         printf("tcc_relocate() failed...\n");
         return 1;
     }
-    int (*start)() = tcc_get_symbol(state, "_start");
+    int (*start)(int, char *[]) = tcc_get_symbol(state, "_start");
     if (!start) {
         printf("tcc_get_symbol() failed...\n");
         return 1;
     }
 
     printf("Jumping into single_cream!\n");
-    res = start();
+    res = start(sizeof(sch3_argv)/sizeof(sch3_argv[0]), sch3_argv);
     printf("single_cream returned %d!\n", res);
     tcc_delete(state);
 

+ 3 - 0
diskfs/stdlib/asmc.h

@@ -23,6 +23,8 @@ struct __handles_t {
 
 struct __handles_t *__handles;
 
+FILE __stdin = {0, 0, 0};
+FILE *stdin;
 FILE __stdout = {1, 0, 0};
 FILE *stdout;
 FILE __stderr = {2, 0, 0};
@@ -47,6 +49,7 @@ void __init_stdlib() {
   __handles = &__builtin_handles;
 #endif
   __aborted = 0;
+  stdin = &__stdin;
   stdout = &__stdout;
   stderr = &__stderr;
 }

+ 3 - 1
diskfs/stdlib/stdio.h

@@ -11,7 +11,9 @@
 #define EOF (-1)
 
 int fputc(int c, FILE *s) {
-    if (s->fd == 1 || s->fd == 2) {
+    if (s->fd == 0) {
+        return EOF;
+    } else if (s->fd == 1 || s->fd == 2) {
         __handles->write(c);
     } else {
         __handles->vfs_write(c, s->fd);

+ 3 - 0
diskfs/stdlib/unistd.h

@@ -20,6 +20,9 @@ int isatty(int fildes) {
 }
 
 ssize_t read(int fildes, void *buf, size_t nbyte) {
+    if (fildes == 0 || fildes == 1 || fildes == 2) {
+        return 0;
+    }
     if (nbyte == 0) {
         return 0;
     }