[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH 3/3] libdruntime: Add patches dealing with bugs and various incompatibilities with the platform
--- ...0003-Add-builtin-symbols-definitions.patch | 78 +++++++++++++++++++ patches/0004-Solve-stdio.d-unittest-bug.patch | 27 +++++++ patches/0005-Solve-clock-routine-bug.patch | 28 +++++++ ...patibility-in-clock-related-unittest.patch | 26 +++++++ ...ilities-in-networking-related-struct.patch | 51 ++++++++++++ ...0008-Solve-mmap64-missing-dependency.patch | 38 +++++++++ ...ilities-preventing-the-GC-from-scann.patch | 43 ++++++++++ 7 files changed, 291 insertions(+) create mode 100644 patches/0003-Add-builtin-symbols-definitions.patch create mode 100644 patches/0004-Solve-stdio.d-unittest-bug.patch create mode 100644 patches/0005-Solve-clock-routine-bug.patch create mode 100644 patches/0006-Solve-incompatibility-in-clock-related-unittest.patch create mode 100644 patches/0007-Solve-incompatibilities-in-networking-related-struct.patch create mode 100644 patches/0008-Solve-mmap64-missing-dependency.patch create mode 100644 patches/0009-Solve-incompatibilities-preventing-the-GC-from-scann.patch diff --git a/patches/0003-Add-builtin-symbols-definitions.patch b/patches/0003-Add-builtin-symbols-definitions.patch new file mode 100644 index 0000000..1133eec --- /dev/null +++ b/patches/0003-Add-builtin-symbols-definitions.patch @@ -0,0 +1,78 @@ +From 4bf8ec9f1ac59ff85f00189f87fc74d67d79caa4 Mon Sep 17 00:00:00 2001 +From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx> +Date: Sun, 19 Jul 2020 02:52:02 +0300 +Subject: [PATCH 1/6] Add builtin symbols definitions + +--- + libphobos/libdruntime/core/atomic.d | 8 ++++---- + libphobos/libdruntime/gcc/builtins.d | 24 ++++++++++++++++++++++++ + 2 files changed, 28 insertions(+), 4 deletions(-) + +diff --git a/libphobos/libdruntime/core/atomic.d b/libphobos/libdruntime/core/atomic.d +index 544fc1e6a..bcbfd85e9 100644 +--- a/libphobos/libdruntime/core/atomic.d ++++ b/libphobos/libdruntime/core/atomic.d +@@ -1374,8 +1374,8 @@ else version (GNU) + } + else static if (T.sizeof == long.sizeof && GNU_Have_64Bit_Atomics) + { +- res = __atomic_compare_exchange_8(here, cast(void*) &ifThis, *cast(ulong*) &writeThis, +- false, MemoryOrder.seq, MemoryOrder.seq); ++ res = __atomic_compare_exchange(T.sizeof, cast(void *)here, cast(void*)&ifThis, ++ cast(void *) &writeThis, MemoryOrder.seq, MemoryOrder.seq); + } + else static if (GNU_Have_LibAtomic) + { +@@ -1458,7 +1458,7 @@ else version (GNU) + else static if (GNU_Have_LibAtomic) + { + T value; +- __atomic_load(T.sizeof, &val, cast(void*)&value, ms); ++ __atomic_load(T.sizeof, cast(void *)&val, cast(void*)&value, ms); + return *cast(HeadUnshared!T*) &value; + } + else +@@ -1499,7 +1499,7 @@ else version (GNU) + } + else static if (GNU_Have_LibAtomic) + { +- __atomic_store(T.sizeof, &val, cast(void*)&newval, ms); ++ __atomic_store(T.sizeof, cast(void *)&val, cast(void*)&newval, ms); + } + else + static assert(0, "Invalid template type specified."); +diff --git a/libphobos/libdruntime/gcc/builtins.d b/libphobos/libdruntime/gcc/builtins.d +index 0cacf7afc..ce1a6cb24 100644 +--- a/libphobos/libdruntime/gcc/builtins.d ++++ b/libphobos/libdruntime/gcc/builtins.d +@@ -42,3 +42,27 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + */ + + module gcc.builtins; ++ ++public alias __builtin_clonglong = long; ++public alias __builtin_culonglong = ulong; ++ ++extern (C) void __atomic_store_c(int size, void *dest, void *src, int model) pure nothrow @nogc; ++ ++void __atomic_store(int size, void *dest, void *src, int model) pure nothrow @nogc { ++ __atomic_store_c(size, dest, src, model); ++} ++ ++extern (C) int __atomic_compare_exchange_c(int size, void *dest, void *src, void *desired, ++ int success, int failure) pure nothrow @nogc; ++ ++bool __atomic_compare_exchange(int size, void *dest, void *src, void *desired, ++ int success, int failure) pure nothrow @nogc { ++ return cast(bool)__atomic_compare_exchange_c(size, dest, src, desired, success, failure); ++} ++ ++extern (C) void __atomic_load_c(int size, void *dest, void *src, int model) pure nothrow @nogc @trusted; ++ ++void __atomic_load(int size, void *dest, void *src, int model) pure nothrow @nogc { ++ __atomic_load_c(size, dest, src, model); ++} ++ +-- +2.17.1 + diff --git a/patches/0004-Solve-stdio.d-unittest-bug.patch b/patches/0004-Solve-stdio.d-unittest-bug.patch new file mode 100644 index 0000000..ae1a074 --- /dev/null +++ b/patches/0004-Solve-stdio.d-unittest-bug.patch @@ -0,0 +1,27 @@ +From b4f89ed1deadd32b000d2cfb11763608acbccc93 Mon Sep 17 00:00:00 2001 +From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx> +Date: Sun, 19 Jul 2020 02:53:54 +0300 +Subject: [PATCH 2/6] Solve stdio.d unittest bug + +open_wmemstream() guarantees a NULL byte at the end of the buffer, +but the memcmp() call expects last 4 bytes to be NULL +--- + libphobos/libdruntime/core/sys/posix/stdio.d | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d +index 0c6a144f5..7a070aaf6 100644 +--- a/libphobos/libdruntime/core/sys/posix/stdio.d ++++ b/libphobos/libdruntime/core/sys/posix/stdio.d +@@ -485,7 +485,7 @@ unittest + assert(f !is null); + assert(fwprintf(f, testdata.ptr) == 5); + assert(fflush(f) == 0); +- assert(memcmp(ptr, testdata.ptr, testdata.length*wchar_t.sizeof) == 0); ++ assert(memcmp(ptr, testdata.ptr, (testdata.length - 1)*wchar_t.sizeof) == 0); + assert(fclose(f) == 0); + } + +-- +2.17.1 + diff --git a/patches/0005-Solve-clock-routine-bug.patch b/patches/0005-Solve-clock-routine-bug.patch new file mode 100644 index 0000000..53ae32a --- /dev/null +++ b/patches/0005-Solve-clock-routine-bug.patch @@ -0,0 +1,28 @@ +From 18e75c8e7e6b61ed235fa7279b448a4951f09413 Mon Sep 17 00:00:00 2001 +From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx> +Date: Sun, 19 Jul 2020 03:05:49 +0300 +Subject: [PATCH 3/6] Solve clock routine bug + +clock_getres() returning 0 results in a floating point exception +--- + libphobos/libdruntime/core/time.d | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libphobos/libdruntime/core/time.d b/libphobos/libdruntime/core/time.d +index a7640ec19..bdcf6cdd6 100644 +--- a/libphobos/libdruntime/core/time.d ++++ b/libphobos/libdruntime/core/time.d +@@ -2813,8 +2813,8 @@ struct TickDuration + //or worse, but the time is updated much more frequently + //than that). In such cases, we'll just use nanosecond + //resolution. +- ticksPerSec = ts.tv_nsec >= 1000 ? 1_000_000_000 +- : 1_000_000_000 / ts.tv_nsec; ++ ticksPerSec = ts.tv_nsec >= 1000 || ts.tv_nsec == 0 ++ ? 1_000_000_000 : 1_000_000_000 / ts.tv_nsec; + } + } + else +-- +2.17.1 + diff --git a/patches/0006-Solve-incompatibility-in-clock-related-unittest.patch b/patches/0006-Solve-incompatibility-in-clock-related-unittest.patch new file mode 100644 index 0000000..f3dd416 --- /dev/null +++ b/patches/0006-Solve-incompatibility-in-clock-related-unittest.patch @@ -0,0 +1,26 @@ +From 5c36f87b3c961d8210fc73675360c45ec7eea523 Mon Sep 17 00:00:00 2001 +From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx> +Date: Sun, 19 Jul 2020 03:08:19 +0300 +Subject: [PATCH 4/6] Solve incompatibility in clock-related unittest + +Not all types of clocks are supported in Unikraft +--- + libphobos/libdruntime/core/time.d | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/libphobos/libdruntime/core/time.d b/libphobos/libdruntime/core/time.d +index bdcf6cdd6..a3c463db2 100644 +--- a/libphobos/libdruntime/core/time.d ++++ b/libphobos/libdruntime/core/time.d +@@ -2544,6 +2544,8 @@ unittest + // common denominator supported by all versions of Linux pre-2.6.12. + version (Linux_Pre_2639) + return c == ClockType.normal || c == ClockType.precise; ++ else version (UNIKRAFT) ++ return c == ClockType.normal || c == ClockType.precise; + else + return c != ClockType.second; // second doesn't work with MonoTimeImpl + +-- +2.17.1 + diff --git a/patches/0007-Solve-incompatibilities-in-networking-related-struct.patch b/patches/0007-Solve-incompatibilities-in-networking-related-struct.patch new file mode 100644 index 0000000..496dd0c --- /dev/null +++ b/patches/0007-Solve-incompatibilities-in-networking-related-struct.patch @@ -0,0 +1,51 @@ +From 2a75214e0d16fff5e968364f156d7027680a2276 Mon Sep 17 00:00:00 2001 +From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx> +Date: Sun, 19 Jul 2020 03:09:57 +0300 +Subject: [PATCH 5/6] Solve incompatibilities in networking-related structures + between the runtime and lwip library + +--- + libphobos/libdruntime/core/sys/posix/netinet/in_.d | 4 ++-- + libphobos/libdruntime/core/sys/posix/sys/socket.d | 3 ++- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/libphobos/libdruntime/core/sys/posix/netinet/in_.d b/libphobos/libdruntime/core/sys/posix/netinet/in_.d +index 82da6c702..a24981d80 100644 +--- a/libphobos/libdruntime/core/sys/posix/netinet/in_.d ++++ b/libphobos/libdruntime/core/sys/posix/netinet/in_.d +@@ -90,13 +90,13 @@ version (CRuntime_Glibc) + + struct sockaddr_in + { ++ ubyte sin_len; + sa_family_t sin_family; + in_port_t sin_port; + in_addr sin_addr; + + /* Pad to size of `struct sockaddr'. */ +- ubyte[__SOCK_SIZE__ - sa_family_t.sizeof - +- in_port_t.sizeof - in_addr.sizeof] __pad; ++ ubyte[8] __pad; + } + + enum +diff --git a/libphobos/libdruntime/core/sys/posix/sys/socket.d b/libphobos/libdruntime/core/sys/posix/sys/socket.d +index 197f1d6f7..743d59f2f 100644 +--- a/libphobos/libdruntime/core/sys/posix/sys/socket.d ++++ b/libphobos/libdruntime/core/sys/posix/sys/socket.d +@@ -162,10 +162,11 @@ version (CRuntime_Glibc) + // Some of the constants below and from the Bionic section are really from + // the linux kernel headers. + alias uint socklen_t; +- alias ushort sa_family_t; ++ alias ubyte sa_family_t; + + struct sockaddr + { ++ ubyte sa_len; + sa_family_t sa_family; + byte[14] sa_data; + } +-- +2.17.1 + diff --git a/patches/0008-Solve-mmap64-missing-dependency.patch b/patches/0008-Solve-mmap64-missing-dependency.patch new file mode 100644 index 0000000..dc8782d --- /dev/null +++ b/patches/0008-Solve-mmap64-missing-dependency.patch @@ -0,0 +1,38 @@ +From 889f9ea51a7158c4fa9fe9efcc3ffaf0e23bd294 Mon Sep 17 00:00:00 2001 +From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx> +Date: Mon, 20 Jul 2020 01:01:14 +0300 +Subject: [PATCH 1/2] Solve mmap64() missing dependency + +--- + libphobos/libdruntime/core/sys/posix/sys/mman.d | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/libphobos/libdruntime/core/sys/posix/sys/mman.d b/libphobos/libdruntime/core/sys/posix/sys/mman.d +index c0bee5528..618e9974c 100644 +--- a/libphobos/libdruntime/core/sys/posix/sys/mman.d ++++ b/libphobos/libdruntime/core/sys/posix/sys/mman.d +@@ -234,11 +234,16 @@ int munmap(void*, size_t); + + version (CRuntime_Glibc) + { +- static if (__USE_LARGEFILE64) void* mmap64(void*, size_t, int, int, int, off_t); +- static if (__USE_FILE_OFFSET64) +- alias mmap = mmap64; +- else +- void* mmap(void*, size_t, int, int, int, off_t); ++ version (UNIKRAFT) { ++ void *mmap(void *, size_t, int, int, int, off_t); ++ alias mmap mmap64; ++ } else { ++ static if (__USE_LARGEFILE64) void* mmap64(void*, size_t, int, int, int, off_t); ++ static if (__USE_FILE_OFFSET64) ++ alias mmap = mmap64; ++ else ++ void* mmap(void*, size_t, int, int, int, off_t); ++ } + int munmap(void*, size_t); + } + else version (Darwin) +-- +2.17.1 + diff --git a/patches/0009-Solve-incompatibilities-preventing-the-GC-from-scann.patch b/patches/0009-Solve-incompatibilities-preventing-the-GC-from-scann.patch new file mode 100644 index 0000000..5053b32 --- /dev/null +++ b/patches/0009-Solve-incompatibilities-preventing-the-GC-from-scann.patch @@ -0,0 +1,43 @@ +From 32e379f4cf43c9542524330fdaef87da2476f38a Mon Sep 17 00:00:00 2001 +From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx> +Date: Mon, 20 Jul 2020 19:08:14 +0300 +Subject: [PATCH] Solve incompatibilities preventing the GC from scanning the + stack + +--- + libphobos/libdruntime/core/sys/posix/sys/types.d | 6 +++++- + libphobos/libdruntime/core/thread.d | 1 + + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/libphobos/libdruntime/core/sys/posix/sys/types.d b/libphobos/libdruntime/core/sys/posix/sys/types.d +index 060b56f88..c5cc17941 100644 +--- a/libphobos/libdruntime/core/sys/posix/sys/types.d ++++ b/libphobos/libdruntime/core/sys/posix/sys/types.d +@@ -719,7 +719,11 @@ version (CRuntime_Glibc) + c_long __align; + } + +- alias c_ulong pthread_t; ++ struct pthread_t ++ { ++ void *p; ++ uint x; ++ } + } + else version (CRuntime_Musl) + { +diff --git a/libphobos/libdruntime/core/thread.d b/libphobos/libdruntime/core/thread.d +index edd86b4ac..8c95d68da 100644 +--- a/libphobos/libdruntime/core/thread.d ++++ b/libphobos/libdruntime/core/thread.d +@@ -3276,6 +3276,7 @@ private void* getStackBottom() nothrow @nogc + pthread_attr_t attr; + void* addr; size_t size; + ++ pthread_attr_init(&attr); + pthread_getattr_np(pthread_self(), &attr); + pthread_attr_getstack(&attr, &addr, &size); + pthread_attr_destroy(&attr); +-- +2.17.1 + -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |