diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1996-07-24 12:58:12 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1996-07-24 12:58:12 +0000 |
commit | 7b8776e106238ea16b0d72b60eba31383642f234 (patch) | |
tree | 53dbaf62fe970de866870ed9b67adc7bca984686 | |
parent | 45375784668e586efd81b5b89ec43f5717aef456 (diff) |
Separation de main() dans un fichier a part.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@937 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | asmrun/.depend | 414 | ||||
-rw-r--r-- | asmrun/Makefile | 4 | ||||
-rw-r--r-- | asmrun/startup.c (renamed from asmrun/main.c) | 2 | ||||
-rw-r--r-- | byterun/.depend | 26 | ||||
-rw-r--r-- | byterun/Makefile | 3 | ||||
-rw-r--r-- | byterun/main.c | 234 | ||||
-rw-r--r-- | byterun/startup.c | 246 |
7 files changed, 513 insertions, 416 deletions
diff --git a/asmrun/.depend b/asmrun/.depend index 18f0cb07e..7c1008426 100644 --- a/asmrun/.depend +++ b/asmrun/.depend @@ -1,174 +1,240 @@ -alloc.o : alloc.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h ../byterun/stacks.h -array.o : array.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h -compare.o : compare.c ../byterun/fail.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/str.h -extern.o : extern.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/memory.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/reverse.h ../byterun/str.h -fail.o : fail.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ - ../byterun/memory.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/roots.h ../byterun/signals.h stack.h -floats.o : floats.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/minor_gc.h ../byterun/stacks.h -freelist.o : freelist.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/gc_ctrl.h ../byterun/major_gc.h -gc_ctrl.o : gc_ctrl.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h -hash.o : hash.c ../byterun/mlvalues.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/str.h -intern.o : intern.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/memory.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/reverse.h -ints.o : ints.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/str.h -io.o : io.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/io.h ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/minor_gc.h ../byterun/signals.h ../byterun/sys.h -lexing.o : lexing.c ../byterun/mlvalues.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/misc.h ../byterun/stacks.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/str.h -main.o : main.c ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/misc.h ../byterun/gc_ctrl.h ../byterun/sys.h -major_gc.o : major_gc.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/freelist.h \ - ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/roots.h -md5.o : md5.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h -memory.o : memory.c ../byterun/fail.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/freelist.h \ - ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/memory.h \ - ../byterun/minor_gc.h ../byterun/signals.h -minor_gc.o : minor_gc.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h ../byterun/minor_gc.h \ - ../byterun/roots.h ../byterun/signals.h -misc.o : misc.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h -obj.o : obj.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h ../byterun/prims.h -parsing.o : parsing.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/alloc.h -roots.o : roots.c ../byterun/memory.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/gc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/roots.h \ - stack.h -signals.o : signals.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/fail.h ../byterun/signals.h -str.o : str.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h -sys.o : sys.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/instruct.h ../byterun/signals.h ../byterun/stacks.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h -terminfo.o : terminfo.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/io.h -alloc.d.o : alloc.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h ../byterun/stacks.h -array.d.o : array.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h -compare.d.o : compare.c ../byterun/fail.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/str.h -extern.d.o : extern.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/memory.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/reverse.h ../byterun/str.h -fail.d.o : fail.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ - ../byterun/memory.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/roots.h ../byterun/signals.h stack.h -floats.d.o : floats.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/minor_gc.h ../byterun/stacks.h -freelist.d.o : freelist.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/gc_ctrl.h ../byterun/major_gc.h -gc_ctrl.d.o : gc_ctrl.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h -hash.d.o : hash.c ../byterun/mlvalues.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/str.h -intern.d.o : intern.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/memory.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/reverse.h -ints.d.o : ints.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/str.h -io.d.o : io.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/io.h ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/minor_gc.h ../byterun/signals.h ../byterun/sys.h -lexing.d.o : lexing.c ../byterun/mlvalues.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/misc.h ../byterun/stacks.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/str.h -main.d.o : main.c ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/misc.h ../byterun/gc_ctrl.h ../byterun/sys.h -major_gc.d.o : major_gc.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/freelist.h \ - ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/roots.h -md5.d.o : md5.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h -memory.d.o : memory.c ../byterun/fail.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/freelist.h \ - ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/memory.h \ - ../byterun/minor_gc.h ../byterun/signals.h -minor_gc.d.o : minor_gc.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h ../byterun/minor_gc.h \ - ../byterun/roots.h ../byterun/signals.h -misc.d.o : misc.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h -obj.d.o : obj.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h ../byterun/prims.h -parsing.d.o : parsing.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/alloc.h -roots.d.o : roots.c ../byterun/memory.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/gc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/roots.h \ - stack.h -signals.d.o : signals.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ - ../byterun/fail.h ../byterun/signals.h -str.d.o : str.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/fail.h -sys.d.o : sys.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/instruct.h ../byterun/signals.h ../byterun/stacks.h ../byterun/memory.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h -terminfo.d.o : terminfo.c ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/io.h +alloc.o: alloc.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h \ + ../byterun/stacks.h +array.o: array.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h +compare.o: compare.c ../byterun/fail.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/str.h +extern.o: extern.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ + ../byterun/intext.h ../byterun/io.h ../byterun/memory.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/reverse.h ../byterun/str.h +fail.o: fail.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ + ../byterun/memory.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/roots.h ../byterun/signals.h stack.h +floats.o: floats.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/stacks.h +freelist.o: freelist.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/freelist.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ + ../byterun/major_gc.h +gc_ctrl.o: gc_ctrl.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h +hash.o: hash.c ../byterun/mlvalues.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/str.h +intern.o: intern.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ + ../byterun/intext.h ../byterun/io.h ../byterun/memory.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/reverse.h +ints.o: ints.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/str.h +io.o: io.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/signals.h \ + ../byterun/sys.h +lexing.o: lexing.c ../byterun/fail.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/stacks.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/str.h +main.o: main.c ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h +major_gc.o: major_gc.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/fail.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/roots.h +md5.o: md5.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h +memory.o: memory.c ../byterun/fail.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/memory.h \ + ../byterun/minor_gc.h ../byterun/signals.h +minor_gc.o: minor_gc.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/fail.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/minor_gc.h ../byterun/roots.h ../byterun/signals.h +misc.o: misc.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/misc.h +obj.o: obj.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h \ + ../byterun/prims.h +parsing.o: parsing.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/alloc.h +roots.o: roots.c ../byterun/memory.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/misc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/roots.h \ + stack.h +signals.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/fail.h ../byterun/signals.h +startup.o: startup.c ../byterun/gc.h ../byterun/mlvalues.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/misc.h ../byterun/gc_ctrl.h ../byterun/sys.h +str.o: str.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h +sys.o: sys.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/instruct.h \ + ../byterun/signals.h ../byterun/stacks.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h +terminfo.o: terminfo.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h +alloc.d.o: alloc.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h \ + ../byterun/stacks.h +array.d.o: array.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h +compare.d.o: compare.c ../byterun/fail.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/str.h +extern.d.o: extern.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ + ../byterun/intext.h ../byterun/io.h ../byterun/memory.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/reverse.h ../byterun/str.h +fail.d.o: fail.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ + ../byterun/memory.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/roots.h ../byterun/signals.h stack.h +floats.d.o: floats.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/stacks.h +freelist.d.o: freelist.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/freelist.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ + ../byterun/major_gc.h +gc_ctrl.d.o: gc_ctrl.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h +hash.d.o: hash.c ../byterun/mlvalues.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/str.h +intern.d.o: intern.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/gc.h \ + ../byterun/intext.h ../byterun/io.h ../byterun/memory.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/reverse.h +ints.d.o: ints.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/str.h +io.d.o: io.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/signals.h \ + ../byterun/sys.h +lexing.d.o: lexing.c ../byterun/fail.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/stacks.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/str.h +main.d.o: main.c ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h +major_gc.d.o: major_gc.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/fail.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/roots.h +md5.d.o: md5.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h +memory.d.o: memory.c ../byterun/fail.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/memory.h \ + ../byterun/minor_gc.h ../byterun/signals.h +minor_gc.d.o: minor_gc.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/fail.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/gc.h ../byterun/gc_ctrl.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/minor_gc.h ../byterun/roots.h ../byterun/signals.h +misc.d.o: misc.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/misc.h +obj.d.o: obj.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/minor_gc.h \ + ../byterun/prims.h +parsing.d.o: parsing.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/alloc.h +roots.d.o: roots.c ../byterun/memory.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/misc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/roots.h \ + stack.h +signals.d.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/fail.h ../byterun/signals.h +startup.d.o: startup.c ../byterun/gc.h ../byterun/mlvalues.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/misc.h ../byterun/gc_ctrl.h ../byterun/sys.h +str.d.o: str.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ + ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/fail.h +sys.d.o: sys.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/instruct.h \ + ../byterun/signals.h ../byterun/stacks.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h +terminfo.d.o: terminfo.c ../byterun/config.h ../byterun/../config/m.h \ + ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/io.h diff --git a/asmrun/Makefile b/asmrun/Makefile index 1b30f1e37..cb5df5d11 100644 --- a/asmrun/Makefile +++ b/asmrun/Makefile @@ -5,7 +5,7 @@ FLAGS=-I../byterun -DNATIVE_CODE -DTARGET_$(ARCH) -DSYS_$(SYSTEM) CFLAGS=$(FLAGS) -O $(NATIVECCCOMPOPTS) DFLAGS=$(FLAGS) -g -DDEBUG $(NATIVECCCOMPOPTS) -COBJS=main.o fail.o roots.o signals.o \ +COBJS=startup.o main.o fail.o roots.o signals.o \ misc.o freelist.o major_gc.o minor_gc.o memory.o alloc.o compare.o ints.o \ floats.o str.o array.o io.o extern.o intern.o hash.o sys.o parsing.o \ gc_ctrl.o terminfo.o md5.o obj.o lexing.o @@ -34,6 +34,8 @@ install: power.o: power-$(SYSTEM).o cp power-$(SYSTEM).o power.o +main.c: ../byterun/main.c + ln -s ../byterun/main.c main.c misc.c: ../byterun/misc.c ln -s ../byterun/misc.c misc.c freelist.c: ../byterun/freelist.c diff --git a/asmrun/main.c b/asmrun/startup.c index f191a94e5..780850bb3 100644 --- a/asmrun/main.c +++ b/asmrun/startup.c @@ -42,7 +42,7 @@ static void init_atoms() extern value caml_start_program P((void)); -int main(argc, argv) +int caml_main(argc, argv) int argc; char * argv[]; { diff --git a/byterun/.depend b/byterun/.depend index 06800186c..4e628862b 100644 --- a/byterun/.depend +++ b/byterun/.depend @@ -37,11 +37,10 @@ ints.o: ints.c alloc.h misc.h config.h ../config/m.h ../config/s.h \ io.o: io.c config.h ../config/m.h ../config/s.h alloc.h misc.h \ mlvalues.h fail.h io.h memory.h gc.h major_gc.h freelist.h minor_gc.h \ signals.h sys.h -lexing.o: lexing.c mlvalues.h config.h ../config/m.h ../config/s.h \ - misc.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h str.h -main.o: main.c config.h ../config/m.h ../config/s.h alloc.h misc.h \ - mlvalues.h exec.h fail.h fix_code.h gc_ctrl.h interp.h intext.h io.h \ - minor_gc.h stacks.h memory.h gc.h major_gc.h freelist.h sys.h +lexing.o: lexing.c fail.h misc.h config.h ../config/m.h ../config/s.h \ + mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h \ + str.h +main.o: main.c misc.h config.h ../config/m.h ../config/s.h major_gc.o: major_gc.c config.h ../config/m.h ../config/s.h fail.h \ misc.h mlvalues.h freelist.h gc.h gc_ctrl.h major_gc.h roots.h md5.o: md5.c alloc.h misc.h config.h ../config/m.h ../config/s.h \ @@ -72,6 +71,10 @@ signals.o: signals.c alloc.h misc.h config.h ../config/m.h \ minor_gc.h roots.h signals.h stacks.o: stacks.c config.h ../config/m.h ../config/s.h fail.h misc.h \ mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h +startup.o: startup.c config.h ../config/m.h ../config/s.h alloc.h \ + misc.h mlvalues.h exec.h fail.h fix_code.h gc_ctrl.h interp.h \ + intext.h io.h minor_gc.h stacks.h memory.h gc.h major_gc.h freelist.h \ + sys.h str.o: str.c alloc.h misc.h config.h ../config/m.h ../config/s.h \ mlvalues.h fail.h sys.o: sys.c config.h ../config/m.h ../config/s.h alloc.h misc.h \ @@ -119,11 +122,10 @@ ints.d.o: ints.c alloc.h misc.h config.h ../config/m.h ../config/s.h \ io.d.o: io.c config.h ../config/m.h ../config/s.h alloc.h misc.h \ mlvalues.h fail.h io.h memory.h gc.h major_gc.h freelist.h minor_gc.h \ signals.h sys.h -lexing.d.o: lexing.c mlvalues.h config.h ../config/m.h ../config/s.h \ - misc.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h str.h -main.d.o: main.c config.h ../config/m.h ../config/s.h alloc.h misc.h \ - mlvalues.h exec.h fail.h fix_code.h gc_ctrl.h interp.h intext.h io.h \ - minor_gc.h stacks.h memory.h gc.h major_gc.h freelist.h sys.h +lexing.d.o: lexing.c fail.h misc.h config.h ../config/m.h ../config/s.h \ + mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h \ + str.h +main.d.o: main.c misc.h config.h ../config/m.h ../config/s.h major_gc.d.o: major_gc.c config.h ../config/m.h ../config/s.h fail.h \ misc.h mlvalues.h freelist.h gc.h gc_ctrl.h major_gc.h roots.h md5.d.o: md5.c alloc.h misc.h config.h ../config/m.h ../config/s.h \ @@ -154,6 +156,10 @@ signals.d.o: signals.c alloc.h misc.h config.h ../config/m.h \ minor_gc.h roots.h signals.h stacks.d.o: stacks.c config.h ../config/m.h ../config/s.h fail.h misc.h \ mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h +startup.d.o: startup.c config.h ../config/m.h ../config/s.h alloc.h \ + misc.h mlvalues.h exec.h fail.h fix_code.h gc_ctrl.h interp.h \ + intext.h io.h minor_gc.h stacks.h memory.h gc.h major_gc.h freelist.h \ + sys.h str.d.o: str.c alloc.h misc.h config.h ../config/m.h ../config/s.h \ mlvalues.h fail.h sys.d.o: sys.c config.h ../config/m.h ../config/s.h alloc.h misc.h \ diff --git a/byterun/Makefile b/byterun/Makefile index f1056a4ee..68aa02e7c 100644 --- a/byterun/Makefile +++ b/byterun/Makefile @@ -4,8 +4,9 @@ CC=$(BYTECC) CFLAGS=-O $(BYTECCCOMPOPTS) DFLAGS=-g -DDEBUG $(BYTECCCOMPOPTS) -OBJS=interp.o misc.o stacks.o fix_code.o main.o fail.o signals.o \ +OBJS=interp.o misc.o stacks.o fix_code.o startup.o main.o \ freelist.o major_gc.o minor_gc.o memory.o alloc.o roots.o \ + fail.o signals.o \ compare.o ints.o floats.o str.o array.o io.o extern.o intern.o \ hash.o sys.o meta.o parsing.o gc_ctrl.o terminfo.o md5.o obj.o \ lexing.o diff --git a/byterun/main.c b/byterun/main.c index 9337a9b46..6538049d4 100644 --- a/byterun/main.c +++ b/byterun/main.c @@ -11,240 +11,16 @@ /* $Id$ */ -/* Start-up code */ +/* Main entry point (can be overriden by a user-provided main() + function that calls caml_main() later). */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <fcntl.h> -#include "config.h" -#ifdef HAS_UNISTD -#include <unistd.h> -#endif -#include "alloc.h" -#include "exec.h" -#include "fail.h" -#include "fix_code.h" -#include "gc_ctrl.h" -#include "interp.h" -#include "intext.h" -#include "io.h" -#include "minor_gc.h" #include "misc.h" -#include "mlvalues.h" -#include "stacks.h" -#include "sys.h" -#ifndef O_BINARY -#define O_BINARY 0 -#endif +extern int caml_main P((int, char **)); -header_t atom_table[256]; -code_t start_code; -asize_t code_size; - -static void init_atoms() -{ - int i; - for(i = 0; i < 256; i++) atom_table[i] = Make_header(0, i, White); -} - -static unsigned long read_size(p) - unsigned char * p; -{ - return ((unsigned long) p[0] << 24) + ((unsigned long) p[1] << 16) + - ((unsigned long) p[2] << 8) + p[3]; -} - -#define FILE_NOT_FOUND (-1) -#define TRUNCATED_FILE (-2) -#define BAD_MAGIC_NUM (-3) - -static int read_trailer(fd, trail) - int fd; - struct exec_trailer * trail; -{ - char buffer[TRAILER_SIZE]; - - lseek(fd, (long) -TRAILER_SIZE, 2); - if (read(fd, buffer, TRAILER_SIZE) < TRAILER_SIZE) return TRUNCATED_FILE; - trail->code_size = read_size(buffer); - trail->data_size = read_size(buffer+4); - trail->symbol_size = read_size(buffer+8); - trail->debug_size = read_size(buffer+12); - if (strncmp(buffer + 16, EXEC_MAGIC, 12) == 0) - return 0; - else - return BAD_MAGIC_NUM; -} - -int attempt_open(name, trail, do_open_script) - char ** name; - struct exec_trailer * trail; - int do_open_script; -{ - char * truename; - int fd; - int err; - char buf [2]; - - truename = searchpath(*name); - if (truename == 0) truename = *name; else *name = truename; - fd = open(truename, O_RDONLY | O_BINARY); - if (fd == -1) return FILE_NOT_FOUND; - if (!do_open_script){ - err = read (fd, buf, 2); - if (err < 2) { close(fd); return TRUNCATED_FILE; } - if (buf [0] == '#' && buf [1] == '!') { close(fd); return BAD_MAGIC_NUM; } - } - err = read_trailer(fd, trail); - if (err != 0) { close(fd); return err; } - return fd; -} - -/* Invocation of camlrun: 4 cases. - - 1. runtime + bytecode - user types: camlrun [options] bytecode args... - arguments: camlrun [options] bytecode args... - - 2. bytecode script - user types: bytecode args... - 2a (kernel 1) arguments: camlrun ./bytecode args... - 2b (kernel 2) arguments: bytecode bytecode args... - - 3. concatenated runtime and bytecode - user types: composite args... - arguments: composite args... - -Algorithm: - 1- If argument 0 is a valid byte-code file that does not start with #!, - then we are in case 3 and we pass the same command line to the - Caml Light program. - 2- In all other cases, we parse the command line as: - (whatever) [options] bytecode args... - and we strip "(whatever) [options]" from the command line. - -*/ - -extern void init_ieee_floats(); - -#ifdef HAS_UI -int caml_main(argc, argv) -#else int main(argc, argv) -#endif int argc; - char * argv[]; + char ** argv; { - int fd; - struct exec_trailer trail; - int i; - struct longjmp_buffer raise_buf; - struct channel * chan; - int verbose_init = 0, percent_free_init = Percent_free_def; - long minor_heap_init = Minor_heap_def, heap_chunk_init = Heap_chunk_def; - - /* Machine-dependent initialization of the floating-point hardware - so that it behaves as much as possible as specified in IEEE */ - init_ieee_floats(); - - /* Parsing of command-line */ -#ifdef DEBUG - verbose_init = 1; -#endif - - i = 0; - fd = attempt_open(&argv[0], &trail, 0); - - if (fd < 0) { - - for(i = 1; i < argc && argv[i][0] == '-'; i++) { - switch(argv[i][1]) { -#ifdef DEBUG - case 't': { - extern int trace_flag; - trace_flag = 1; - break; - } -#endif - case 'v': - verbose_init = 1; - break; - default: - fatal_error_arg("Unknown option %s.\n", argv[i]); - } - } - - if (argv[i] == 0) - fatal_error("No bytecode file specified.\n"); - - fd = attempt_open(&argv[i], &trail, 1); - - switch(fd) { - case FILE_NOT_FOUND: - fatal_error_arg("Fatal error: cannot find file %s\n", argv[i]); - break; - case TRUNCATED_FILE: - case BAD_MAGIC_NUM: - fatal_error_arg( - "Fatal error: the file %s is not a bytecode executable file\n", - argv[i]); - break; - } - } - - /* Runtime options. The option letter is the first letter of the - last word of the ML name of the option (see [lib/gc.mli]). */ - - { char *opt = getenv ("CAMLRUNPARAM"); - if (opt != NULL){ - while (*opt != '\0'){ - switch (*opt++){ - case 's': sscanf (opt, "=%ld", &minor_heap_init); break; - case 'i': sscanf (opt, "=%ld", &heap_chunk_init); break; - case 'o': sscanf (opt, "=%d", &percent_free_init); break; - case 'v': sscanf (opt, "=%d", &verbose_init); break; - } - } - } - } - - if (sigsetjmp(raise_buf.buf, 1) == 0) { - - external_raise = &raise_buf; - - init_gc (minor_heap_init, heap_chunk_init, percent_free_init, - verbose_init); - init_stack(); - init_atoms(); - - lseek(fd, - (long) (TRAILER_SIZE + trail.code_size + trail.data_size - + trail.symbol_size + trail.debug_size), 2); - - code_size = trail.code_size; - start_code = (code_t) stat_alloc(code_size); - if (read(fd, (char *) start_code, code_size) != code_size) - fatal_error("Fatal error: truncated bytecode file.\n"); - -#ifdef ARCH_BIG_ENDIAN - fixup_endianness(start_code, code_size); -#endif - - chan = open_descr(fd); - global_data = input_value(chan); - close_channel(chan); - /* Ensure that the globals are in the major heap. */ - oldify(global_data, &global_data); - - sys_init(argv + i); - interprete(start_code, code_size); - sys_exit(Val_int(0)); - - } else { - - fatal_error_arg("Fatal error: uncaught exception %s.\n", - String_val(Field(Field(exn_bucket, 0), 0))); - } + return caml_main(argc, argv); } - diff --git a/byterun/startup.c b/byterun/startup.c new file mode 100644 index 000000000..92872558c --- /dev/null +++ b/byterun/startup.c @@ -0,0 +1,246 @@ +/***********************************************************************/ +/* */ +/* Objective Caml */ +/* */ +/* Xavier Leroy and Damien Doligez, INRIA Rocquencourt */ +/* */ +/* Copyright 1996 Institut National de Recherche en Informatique et */ +/* Automatique. Distributed only by permission. */ +/* */ +/***********************************************************************/ + +/* $Id$ */ + +/* Start-up code */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include "config.h" +#ifdef HAS_UNISTD +#include <unistd.h> +#endif +#include "alloc.h" +#include "exec.h" +#include "fail.h" +#include "fix_code.h" +#include "gc_ctrl.h" +#include "interp.h" +#include "intext.h" +#include "io.h" +#include "minor_gc.h" +#include "misc.h" +#include "mlvalues.h" +#include "stacks.h" +#include "sys.h" + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +header_t atom_table[256]; +code_t start_code; +asize_t code_size; + +static void init_atoms() +{ + int i; + for(i = 0; i < 256; i++) atom_table[i] = Make_header(0, i, White); +} + +static unsigned long read_size(p) + unsigned char * p; +{ + return ((unsigned long) p[0] << 24) + ((unsigned long) p[1] << 16) + + ((unsigned long) p[2] << 8) + p[3]; +} + +#define FILE_NOT_FOUND (-1) +#define TRUNCATED_FILE (-2) +#define BAD_MAGIC_NUM (-3) + +static int read_trailer(fd, trail) + int fd; + struct exec_trailer * trail; +{ + char buffer[TRAILER_SIZE]; + + lseek(fd, (long) -TRAILER_SIZE, 2); + if (read(fd, buffer, TRAILER_SIZE) < TRAILER_SIZE) return TRUNCATED_FILE; + trail->code_size = read_size(buffer); + trail->data_size = read_size(buffer+4); + trail->symbol_size = read_size(buffer+8); + trail->debug_size = read_size(buffer+12); + if (strncmp(buffer + 16, EXEC_MAGIC, 12) == 0) + return 0; + else + return BAD_MAGIC_NUM; +} + +int attempt_open(name, trail, do_open_script) + char ** name; + struct exec_trailer * trail; + int do_open_script; +{ + char * truename; + int fd; + int err; + char buf [2]; + + truename = searchpath(*name); + if (truename == 0) truename = *name; else *name = truename; + fd = open(truename, O_RDONLY | O_BINARY); + if (fd == -1) return FILE_NOT_FOUND; + if (!do_open_script){ + err = read (fd, buf, 2); + if (err < 2) { close(fd); return TRUNCATED_FILE; } + if (buf [0] == '#' && buf [1] == '!') { close(fd); return BAD_MAGIC_NUM; } + } + err = read_trailer(fd, trail); + if (err != 0) { close(fd); return err; } + return fd; +} + +/* Invocation of camlrun: 4 cases. + + 1. runtime + bytecode + user types: camlrun [options] bytecode args... + arguments: camlrun [options] bytecode args... + + 2. bytecode script + user types: bytecode args... + 2a (kernel 1) arguments: camlrun ./bytecode args... + 2b (kernel 2) arguments: bytecode bytecode args... + + 3. concatenated runtime and bytecode + user types: composite args... + arguments: composite args... + +Algorithm: + 1- If argument 0 is a valid byte-code file that does not start with #!, + then we are in case 3 and we pass the same command line to the + Caml Light program. + 2- In all other cases, we parse the command line as: + (whatever) [options] bytecode args... + and we strip "(whatever) [options]" from the command line. + +*/ + +extern void init_ieee_floats(); + +int caml_main(argc, argv) + int argc; + char ** argv; +{ + int fd; + struct exec_trailer trail; + int i; + struct longjmp_buffer raise_buf; + struct channel * chan; + int verbose_init = 0, percent_free_init = Percent_free_def; + long minor_heap_init = Minor_heap_def, heap_chunk_init = Heap_chunk_def; + + /* Machine-dependent initialization of the floating-point hardware + so that it behaves as much as possible as specified in IEEE */ + init_ieee_floats(); + + /* Parsing of command-line */ +#ifdef DEBUG + verbose_init = 1; +#endif + + i = 0; + fd = attempt_open(&argv[0], &trail, 0); + + if (fd < 0) { + + for(i = 1; i < argc && argv[i][0] == '-'; i++) { + switch(argv[i][1]) { +#ifdef DEBUG + case 't': { + extern int trace_flag; + trace_flag = 1; + break; + } +#endif + case 'v': + verbose_init = 1; + break; + default: + fatal_error_arg("Unknown option %s.\n", argv[i]); + } + } + + if (argv[i] == 0) + fatal_error("No bytecode file specified.\n"); + + fd = attempt_open(&argv[i], &trail, 1); + + switch(fd) { + case FILE_NOT_FOUND: + fatal_error_arg("Fatal error: cannot find file %s\n", argv[i]); + break; + case TRUNCATED_FILE: + case BAD_MAGIC_NUM: + fatal_error_arg( + "Fatal error: the file %s is not a bytecode executable file\n", + argv[i]); + break; + } + } + + /* Runtime options. The option letter is the first letter of the + last word of the ML name of the option (see [lib/gc.mli]). */ + + { char *opt = getenv ("CAMLRUNPARAM"); + if (opt != NULL){ + while (*opt != '\0'){ + switch (*opt++){ + case 's': sscanf (opt, "=%ld", &minor_heap_init); break; + case 'i': sscanf (opt, "=%ld", &heap_chunk_init); break; + case 'o': sscanf (opt, "=%d", &percent_free_init); break; + case 'v': sscanf (opt, "=%d", &verbose_init); break; + } + } + } + } + + if (sigsetjmp(raise_buf.buf, 1) == 0) { + + external_raise = &raise_buf; + + init_gc (minor_heap_init, heap_chunk_init, percent_free_init, + verbose_init); + init_stack(); + init_atoms(); + + lseek(fd, - (long) (TRAILER_SIZE + trail.code_size + trail.data_size + + trail.symbol_size + trail.debug_size), 2); + + code_size = trail.code_size; + start_code = (code_t) stat_alloc(code_size); + if (read(fd, (char *) start_code, code_size) != code_size) + fatal_error("Fatal error: truncated bytecode file.\n"); + +#ifdef ARCH_BIG_ENDIAN + fixup_endianness(start_code, code_size); +#endif + + chan = open_descr(fd); + global_data = input_value(chan); + close_channel(chan); + /* Ensure that the globals are in the major heap. */ + oldify(global_data, &global_data); + + sys_init(argv + i); + interprete(start_code, code_size); + sys_exit(Val_int(0)); + + } else { + + fatal_error_arg("Fatal error: uncaught exception %s.\n", + String_val(Field(Field(exn_bucket, 0), 0))); + } +} + |