diff --git a/.travis-ci.sh b/.travis-ci.sh index 5062492..98eae70 100755 --- a/.travis-ci.sh +++ b/.travis-ci.sh @@ -55,12 +55,10 @@ fi export OPAMYES=1 export OPAMVERBOSE=1 -export CI_CFLAGS=-Werror +#export CI_CFLAGS=-Werror eval `opam config env` -opam remote add dev https://github.com/mirage/mirage-dev.git - opam pin add -n mirage-xen-posix . opam pin add -n mirage-xen-ocaml . opam pin add -n mirage-xen . diff --git a/.travis.yml b/.travis.yml index 03a4685..1c091e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,4 @@ language: c script: bash -ex .travis-ci.sh sudo: required env: - - OCAML_VERSION=4.02 - - OCAML_VERSION=4.03 - OCAML_VERSION=4.04 diff --git a/CHANGES.md b/CHANGES.md index 698fb0f..d30159c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +## 3.0.4 + +* remove support for versions of OCaml older than 4.04.2, and add support + for OCaml 4.04.2 and OCaml 4.05.0. For older revisions of OCaml, use + an older revision of mirage-xen-ocaml. + ## 3.0.3 (2017-06-16) * xen: we need io-page-xen because - mirage-xen depends on xen-gnt (for suspend/resume callbacks) diff --git a/mirage-xen-ocaml.opam b/mirage-xen-ocaml.opam index 44a331b..f795ba1 100644 --- a/mirage-xen-ocaml.opam +++ b/mirage-xen-ocaml.opam @@ -15,4 +15,4 @@ depends: [ "ocaml-src" "ocamlbuild" {build} ] -available: [ocaml-version >= "4.01.0" & os = "linux"] +available: [ocaml-version >= "4.04.2" & ocaml-version <= "4.05.0" & os = "linux"] diff --git a/xen-ocaml/build.sh b/xen-ocaml/build.sh index a98b376..9c35e70 100755 --- a/xen-ocaml/build.sh +++ b/xen-ocaml/build.sh @@ -32,39 +32,38 @@ fi CC=${CC:-cc} PWD=`pwd` CFLAGS="-Wall -Wno-attributes ${ARCH_CFLAGS} ${EXTRA_CFLAGS} ${CI_CFLAGS} -DSYS_xen -USYS_linux \ - -fno-builtin-fprintf -DHAS_UNISTD -Werror=format \ + -fno-builtin-fprintf -Werror=format \ $(pkg-config --cflags $PKG_CONFIG_DEPS) \ " rm -rf ocaml-src -cp -r `ocamlfind query ocaml-src` ocaml-src +cp -r `opam config exec -- ocamlfind query ocaml-src` ocaml-src chmod -R u+w ocaml-src echo Detected OCaml version `ocamlopt -version` case `ocamlopt -version` in -4.01.* | 4.02.[01]) - echo Applying GC trace patch - patch < trace-gc.patch -p 0 - ;; -4.03.*) - echo Applying OCaml 4.03 config - cp config/version-403.h ocaml-src/byterun/caml/version.h - patch < clambda-warnings.patch -p 0 - ;; -4.04.*) +4.04.2) echo Applying OCaml 4.04 config cp config/version-404.h ocaml-src/byterun/caml/version.h - patch < clambda-warnings.patch -p 0 - patch < os-type-xen.patch -p 0 + BIGARRAY_OBJ="mmap_unix.o" + ;; +4.05.*) + echo Applying OCaml 4.05 config + cp config/version-405.h ocaml-src/byterun/caml/version.h + BIGARRAY_OBJ="" + CFLAGS="-D__ANDROID__" + ;; +*) + echo unsupported OCaml version `ocamlopt -version` + exit 1 + ;; esac +cd ocaml-src && ./configure && cd .. cp config/s.h ocaml-src/config/ -cp config/m.${m_file}.h ocaml-src/config/m.h -cp config/Makefile.${m_file} ocaml-src/config/Makefile -touch ocaml-src/config/Makefile cd ocaml-src # cd byterun && make BYTECCCOMPOPTS="${CFLAGS}" BYTECCCOMPOPTS="${CFLAGS}" libcamlrun.a && cd .. cd asmrun && make -j${NJOBS} UNIX_OR_WIN32=unix NATIVECCCOMPOPTS="-DNATIVE_CODE ${CFLAGS}" NATIVECCPROFOPTS="-DNATIVE_CODE ${CFLAGS}" libasmrun.a && cd .. CFLAGS="$CFLAGS -I../../byterun" -cd otherlibs/bigarray && make CFLAGS="${CFLAGS}" bigarray_stubs.o mmap_unix.o && cd ../.. -ar rcs libxenotherlibs.a otherlibs/bigarray/bigarray_stubs.o otherlibs/bigarray/mmap_unix.o +cd otherlibs/bigarray && make CFLAGS="${CFLAGS}" bigarray_stubs.o ${BIGARRAY_OBJ} +ar rcs ../../libxenotherlibs.a bigarray_stubs.o ${BIGARRAY_OBJ} diff --git a/xen-ocaml/clambda-warnings.patch b/xen-ocaml/clambda-warnings.patch deleted file mode 100644 index b2bf53d..0000000 --- a/xen-ocaml/clambda-warnings.patch +++ /dev/null @@ -1,32 +0,0 @@ -This undoes commit d8e802431b1cfe769956140dd127d488c24f38fb in ocaml/ocaml -which causes format warnings as lld is not the same as the actual type in -the ARCH defines ---- ocaml-src/asmrun/clambda_checks.c.orig 2016-05-03 00:16:07.721188693 +0100 -+++ ocaml-src/asmrun/clambda_checks.c 2016-05-03 00:16:51.401188693 +0100 -@@ -59,13 +59,13 @@ - value orig_v = v; - if (v == (value) 0) { - fprintf(stderr, "Access to field %lld of NULL: %s\n", -- (ARCH_UINT64_TYPE) Long_val(pos), descr); -+ (long long int) Long_val(pos), descr); - abort(); - } - if (!Is_block(v)) { - fprintf(stderr, - "Access to field %lld of non-boxed value %p is illegal: %s\n", -- (ARCH_UINT64_TYPE) Long_val(pos), (void*) v, descr); -+ (long long int) Long_val(pos), (void*) v, descr); - abort(); - } - if (Tag_val(v) == Infix_tag) { -@@ -77,8 +77,8 @@ - if (Long_val(pos) >= Wosize_val(v)) { - fprintf(stderr, - "Access to field %lld of value %p of size %lld is illegal: %s\n", -- (ARCH_UINT64_TYPE) Long_val(pos), (void*) v, -- (ARCH_UINT64_TYPE) Wosize_val(v), -+ (long long int) Long_val(pos), (void*) v, -+ (long long int) Wosize_val(v), - descr); - abort(); - } diff --git a/xen-ocaml/config/Makefile.arm b/xen-ocaml/config/Makefile.arm deleted file mode 100644 index 0e3bf08..0000000 --- a/xen-ocaml/config/Makefile.arm +++ /dev/null @@ -1,77 +0,0 @@ -# generated by ./configure -PREFIX=/usr/local -BINDIR=$(PREFIX)/bin -LIBDIR=$(PREFIX)/lib/ocaml -STUBLIBDIR=$(LIBDIR)/stublibs -MANDIR=$(PREFIX)/man -MANEXT=1 -RANLIB=ranlib -RANLIBCMD=ranlib -ARCMD=ar -SHARPBANGSCRIPTS=true -BNG_ARCH=generic -BNG_ASM_LEVEL=0 -PTHREAD_LINK=-cclib -lpthread -X11_INCLUDES= -X11_LINK=-lX11 -TK_DEFS= -TK_LINK= -LIBBFD_LINK= -BYTECC=gcc -BYTECCCOMPOPTS=-fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -BYTECCLINKOPTS= -Wl,-E -BYTECCLIBS= -lm -ldl -lcurses -lpthread -BYTECCRPATH=-Wl,-rpath, -EXE= -SUPPORTS_SHARED_LIBRARIES=true -SHAREDCCCOMPOPTS=-fPIC -MKSHAREDLIBRPATH=-Wl,-rpath, -NATDYNLINKOPTS=-Wl,-E -SYSLIB=-l$(1) -#ml let syslib x = "-l"^x;; - -### How to build a static library -MKLIB=ar rc $(1) $(2); ranlib $(1) -#ml let mklib out files opts = Printf.sprintf "ar rc %s %s %s; ranlib %s" out opts files out;; -ARCH=arm -MODEL=default -SYSTEM=linux_eabihf -NATIVECC=gcc -NATIVECCCOMPOPTS=-Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -NATIVECCPROFOPTS=-Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -NATIVECCLINKOPTS= -NATIVECCRPATH=-Wl,-rpath, -NATIVECCLIBS= -lm -ldl -ASM=as -ASPP=gcc -c -ASPPPROFFLAGS=-DPROFILING -PROFILING=prof -DYNLINKOPTS= -ldl -OTHERLIBRARIES=unix str num dynlink bigarray systhreads threads graph -DEBUGGER=ocamldebugger -CC_PROFILE=-pg -SYSTHREAD_SUPPORT=true -PARTIALLD=ld -r -PACKLD=$(PARTIALLD) $(NATIVECCLINKOPTS) -o\ -DLLCCCOMPOPTS= -IFLEXDIR= -O=o -A=a -SO=so -EXT_OBJ=.o -EXT_ASM=.s -EXT_LIB=.a -EXT_DLL=.so -EXTRALIBS= -CCOMPTYPE=cc -TOOLCHAIN=cc -NATDYNLINK=true -CMXS=cmxs -MKEXE=$(BYTECC) -MKEXEDEBUGFLAG=-g -MKDLL=gcc -shared -MKMAINDLL=gcc -shared -RUNTIMED=noruntimed -CAMLP4=camlp4 -ASM_CFI_SUPPORTED=true -WITH_FRAME_POINTERS=false diff --git a/xen-ocaml/config/Makefile.x86_64 b/xen-ocaml/config/Makefile.x86_64 deleted file mode 100644 index 72923c0..0000000 --- a/xen-ocaml/config/Makefile.x86_64 +++ /dev/null @@ -1,77 +0,0 @@ -# generated by ./configure -PREFIX=/usr/local -BINDIR=$(PREFIX)/bin -LIBDIR=$(PREFIX)/lib/ocaml -STUBLIBDIR=$(LIBDIR)/stublibs -MANDIR=$(PREFIX)/man -MANEXT=1 -RANLIB=ranlib -RANLIBCMD=ranlib -ARCMD=ar -SHARPBANGSCRIPTS=true -BNG_ARCH=amd64 -BNG_ASM_LEVEL=1 -PTHREAD_LINK=-cclib -lpthread -X11_INCLUDES= -X11_LINK=-lX11 -TK_DEFS=-I/usr/include/tcl8.5 -I/usr/include/tk8.5 $(X11_INCLUDES) -TK_LINK= -ltk8.5 -ltcl8.5 -ldl $(X11_LINK) -LIBBFD_LINK= -BYTECC=gcc -BYTECCCOMPOPTS=-fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -BYTECCLINKOPTS= -Wl,-E -BYTECCLIBS= -lm -ldl -lcurses -lpthread -BYTECCRPATH=-Wl,-rpath, -EXE= -SUPPORTS_SHARED_LIBRARIES=true -SHAREDCCCOMPOPTS=-fPIC -MKSHAREDLIBRPATH=-Wl,-rpath, -NATDYNLINKOPTS=-Wl,-E -SYSLIB=-l$(1) -#ml let syslib x = "-l"^x;; - -### How to build a static library -MKLIB=ar rc $(1) $(2); ranlib $(1) -#ml let mklib out files opts = Printf.sprintf "ar rc %s %s %s; ranlib %s" out opts files out;; -ARCH=amd64 -MODEL=default -SYSTEM=linux -NATIVECC=gcc -NATIVECCCOMPOPTS=-Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -NATIVECCPROFOPTS=-Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -NATIVECCLINKOPTS= -NATIVECCRPATH=-Wl,-rpath, -NATIVECCLIBS= -lm -ldl -ASM=as -ASPP=gcc -c -ASPPPROFFLAGS=-DPROFILING -PROFILING=prof -DYNLINKOPTS= -ldl -OTHERLIBRARIES=unix str num dynlink bigarray systhreads threads graph labltk -DEBUGGER=ocamldebugger -CC_PROFILE=-pg -SYSTHREAD_SUPPORT=true -PARTIALLD=ld -r -PACKLD=$(PARTIALLD) $(NATIVECCLINKOPTS) -o\ -DLLCCCOMPOPTS= -IFLEXDIR= -O=o -A=a -SO=so -EXT_OBJ=.o -EXT_ASM=.s -EXT_LIB=.a -EXT_DLL=.so -EXTRALIBS= -CCOMPTYPE=cc -TOOLCHAIN=cc -NATDYNLINK=true -CMXS=cmxs -MKEXE=$(BYTECC) -MKEXEDEBUGFLAG=-g -MKDLL=gcc -shared -MKMAINDLL=gcc -shared -RUNTIMED=noruntimed -CAMLP4=camlp4 -ASM_CFI_SUPPORTED=true -WITH_FRAME_POINTERS=false diff --git a/xen-ocaml/config/m.arm.h b/xen-ocaml/config/m.arm.h deleted file mode 100644 index d1c854f..0000000 --- a/xen-ocaml/config/m.arm.h +++ /dev/null @@ -1,10 +0,0 @@ -#define ARCH_ALIGN_DOUBLE -#define SIZEOF_INT 4 -#define SIZEOF_LONG 4 -#define SIZEOF_PTR 4 -#define SIZEOF_SHORT 2 -#define ARCH_INT64_TYPE long long -#define ARCH_UINT64_TYPE unsigned long long -#define ARCH_INT64_PRINTF_FORMAT "ll" -#define ARCH_ALIGN_INT64 -#define PROFINFO_WIDTH 26 diff --git a/xen-ocaml/config/m.x86_64.h b/xen-ocaml/config/m.x86_64.h deleted file mode 100644 index 6dbfb67..0000000 --- a/xen-ocaml/config/m.x86_64.h +++ /dev/null @@ -1,12 +0,0 @@ -#define ARCH_SIXTYFOUR -#define SIZEOF_INT 4 -#define SIZEOF_LONG 8 -#define SIZEOF_PTR 8 -#define SIZEOF_SHORT 2 -#define ARCH_INT64_TYPE long -#define ARCH_UINT64_TYPE unsigned long -#define ARCH_INT64_PRINTF_FORMAT "l" -#undef ARCH_BIG_ENDIAN -#undef ARCH_ALIGN_DOUBLE -#undef ARCH_ALIGN_INT64 -#undef NONSTANDARD_DIV_MOD diff --git a/xen-ocaml/config/s.h b/xen-ocaml/config/s.h index 5e0d154..ea254d7 100644 --- a/xen-ocaml/config/s.h +++ b/xen-ocaml/config/s.h @@ -1,44 +1,57 @@ -#define OCAML_OS_TYPE "Unix" +#define OCAML_OS_TYPE "xen" #define OCAML_STDLIB_DIR "/usr/local/lib/ocaml" -#define POSIX_SIGNALS -//#define HAS_GETRUSAGE +#define POSIX_SIGNALS +#define HAS_C99_FLOAT_OPS +#define HAS_GETRUSAGE #define HAS_TIMES -//#define HAS_SOCKETS -//#define HAS_SOCKLEN_T -//#define HAS_INET_ATON -//#define HAS_IPV6 -//#define HAS_UNISTD -//#define HAS_OFF_T +#undef HAS_ISSETUGID +#undef HAS_TERMCAP +#undef HAS_SOCKETS +#undef HAS_SOCKLEN_T +#define HAS_INET_ATON +#define HAS_IPV6 +#define HAS_STDINT_H +#define HAS_UNISTD +#define HAS_OFF_T #define HAS_DIRENT -//#define HAS_REWINDDIR -//#define HAS_LOCKF -//#define HAS_MKFIFO +#define HAS_REWINDDIR +#define HAS_LOCKF +#define HAS_MKFIFO #define HAS_GETCWD -#define HAS_EXPM1_LOG1P -//#define HAS_GETWD -//#define HAS_GETPRIORITY -//#define HAS_UTIME -//#define HAS_UTIMES -//#define HAS_DUP2 -//#define HAS_FCHMOD -//#define HAS_TRUNCATE -//#define HAS_SYS_SELECT_H -//#define HAS_SELECT -//#define HAS_SYMLINK -//#define HAS_WAITPID -//#define HAS_WAIT4 -//#define HAS_GETGROUPS -//#define HAS_TERMIOS -//#define HAS_SETITIMER -//#define HAS_GETHOSTNAME -//#define HAS_UNAME +#define HAS_GETPRIORITY +#define HAS_UTIME +#define HAS_UTIMES +#define HAS_DUP2 +#define HAS_FCHMOD +#define HAS_TRUNCATE +#define HAS_SYS_SELECT_H +#define HAS_SELECT +#define HAS_NANOSLEEP +#define HAS_SYMLINK +#define HAS_WAITPID +#define HAS_WAIT4 +#define HAS_GETGROUPS +#define HAS_SETGROUPS +#define HAS_INITGROUPS +#define HAS_TERMIOS +#define HAS_ASYNC_IO +#define HAS_SETITIMER +#define HAS_GETHOSTNAME +#define HAS_UNAME #define HAS_GETTIMEOFDAY -//#define HAS_MKTIME -//#define HAS_SETSID -//#define HAS_PUTENV -//#define HAS_LOCALE -//#define HAS_MMAP -//#define HAS_GETHOSTBYNAME_R 6 -//#define HAS_GETHOSTBYADDR_R 8 -//#define HAS_STACK_OVERFLOW_DETECTION -#define PROFINFO_WIDTH 26 +#define HAS_MKTIME +#define HAS_SETSID +#define HAS_PUTENV +#undef HAS_LOCALE +#undef SUPPORT_DYNAMIC_LINKING +#undef HAS_MMAP +#undef HAS_PWRITE +#define HAS_NANOSECOND_STAT 1 +#define HAS_GETHOSTBYNAME_R 6 +#define HAS_GETHOSTBYADDR_R 8 +#define HAS_MKSTEMP +#define HAS_NICE +#undef HAS_STACK_OVERFLOW_DETECTION +#undef HAS_SIGWAIT +#undef HAS_HUGE_PAGES +//#define HUGE_PAGE_SIZE (4 * 1024 * 1024) diff --git a/xen-ocaml/config/version-404.h b/xen-ocaml/config/version-404.h index d16ff01..8ee0fbb 100644 --- a/xen-ocaml/config/version-404.h +++ b/xen-ocaml/config/version-404.h @@ -1,6 +1,6 @@ #define OCAML_VERSION_MAJOR 4 #define OCAML_VERSION_MINOR 4 -#define OCAML_VERSION_PATCHLEVEL 0 +#define OCAML_VERSION_PATCHLEVEL 2 #undef OCAML_VERSION_ADDITIONAL -#define OCAML_VERSION 40400 -#define OCAML_VERSION_STRING "4.04.0" +#define OCAML_VERSION 40402 +#define OCAML_VERSION_STRING "4.04.2" diff --git a/xen-ocaml/config/version-403.h b/xen-ocaml/config/version-405.h similarity index 50% rename from xen-ocaml/config/version-403.h rename to xen-ocaml/config/version-405.h index 1e5da2d..8602203 100644 --- a/xen-ocaml/config/version-403.h +++ b/xen-ocaml/config/version-405.h @@ -1,6 +1,6 @@ #define OCAML_VERSION_MAJOR 4 -#define OCAML_VERSION_MINOR 3 +#define OCAML_VERSION_MINOR 5 #define OCAML_VERSION_PATCHLEVEL 0 #undef OCAML_VERSION_ADDITIONAL -#define OCAML_VERSION 40300 -#define OCAML_VERSION_STRING "4.03.0" +#define OCAML_VERSION 40500 +#define OCAML_VERSION_STRING "4.05.0" diff --git a/xen-ocaml/install.sh b/xen-ocaml/install.sh index d263192..1a52765 100755 --- a/xen-ocaml/install.sh +++ b/xen-ocaml/install.sh @@ -28,8 +28,14 @@ fi PUBLIC_INCLUDES="alloc.h callback.h config.h custom.h fail.h hash.h intext.h \ memory.h misc.h mlvalues.h printexc.h signals.h compatibility.h" -for i in ${PUBLIC_INCLUDES}; do - sed -f ../tools/cleanup-header $HEADERS_SRC/$i > $idir/caml/$i -done -cd ../otherlibs/bigarray -sed -f ../../tools/cleanup-header bigarray.h > $idir/caml/bigarray.h +if [ -e ../tools/cleanup-header ]; then + for i in ${PUBLIC_INCLUDES}; do + sed -f ../tools/cleanup-header $HEADERS_SRC/$i > $idir/caml/$i + done + cd ../otherlibs/bigarray + sed -f ../../tools/cleanup-header bigarray.h > $idir/caml/bigarray.h +else + for i in ${PUBLIC_INCLUDES} bigarray.h; do + cp ${HEADERS_SRC}/$i $idir/caml/$i + done +fi diff --git a/xen-ocaml/os-type-xen.patch b/xen-ocaml/os-type-xen.patch deleted file mode 100644 index 122f164..0000000 --- a/xen-ocaml/os-type-xen.patch +++ /dev/null @@ -1,10 +0,0 @@ -define OCAML_OS_TYPE as "xen". Only a good idea for compiler versions >= 4.04.0. -See https://github.com/mirage/mirage-platform/pull/78/ . ---- config/s.h -+++ config/s.h -@@ -1,4 +1,4 @@ --#define OCAML_OS_TYPE "Unix" -+#define OCAML_OS_TYPE "xen" - #define OCAML_STDLIB_DIR "/usr/local/lib/ocaml" - #define POSIX_SIGNALS - //#define HAS_GETRUSAGE diff --git a/xen-ocaml/trace-gc.patch b/xen-ocaml/trace-gc.patch deleted file mode 100644 index 3014372..0000000 --- a/xen-ocaml/trace-gc.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff -ur ocaml-src/byterun/minor_gc.c ocaml-src.new/byterun/minor_gc.c ---- ocaml-src/byterun/minor_gc.c 2015-02-03 15:10:46.743321379 +0000 -+++ ocaml-src.new/byterun/minor_gc.c 2015-02-03 15:11:27.756654339 +0000 -@@ -25,6 +25,11 @@ - #include "roots.h" - #include "signals.h" - #include "weak.h" -+#include "callback.h" -+#include "mlvalues.h" -+#include "alloc.h" -+#include -+#include - - asize_t caml_minor_heap_size; - static void *caml_young_base = NULL; -@@ -271,6 +276,13 @@ - */ - CAMLexport void caml_minor_collection (void) - { -+ value *note_gc; -+ uint64_t start_time; -+ -+ note_gc = caml_named_value("MProf.Trace.note_gc"); -+ if (note_gc) -+ start_time = NOW(); -+ - intnat prev_alloc_words = caml_allocated_words; - - caml_empty_minor_heap (); -@@ -282,6 +294,13 @@ - - caml_final_do_calls (); - -+ if (note_gc){ -+ double duration_ns = (double) (NOW () - start_time); -+ value result = caml_callback_exn(*note_gc, caml_copy_double(duration_ns / 1000000000)); -+ if (Is_exception_result(result)) -+ printk("warning: note_gc threw an exception!\n"); -+ } -+ - caml_empty_minor_heap (); - } - diff --git a/xen-posix/src/mini_libc.c b/xen-posix/src/mini_libc.c index bfe9971..72c8871 100644 --- a/xen-posix/src/mini_libc.c +++ b/xen-posix/src/mini_libc.c @@ -192,6 +192,11 @@ clock_t times(struct tms *buf) return now; } +uid_t geteuid() { return 0; } +uid_t getuid() { return 0; } +uid_t getgid() { return 0; } +uid_t getegid() { return 0; } + /* Not supported by FS yet. */ unsupported_function_crash(link); unsupported_function(int, readlink, -1);