aboutsummaryrefslogtreecommitdiffstats
path: root/main/gcc/402-dlang-stat.patch
diff options
context:
space:
mode:
authorGeod24 <pro.mathias.lang@gmail.com>2020-01-04 01:08:28 +0900
committerNatanael Copa <ncopa@alpinelinux.org>2020-01-14 10:55:04 +0000
commitc123e0f14ab73976a36c651d47d134f249413f29 (patch)
treedf8346d713ab32b33d70bc80dca182d29d2e9db1 /main/gcc/402-dlang-stat.patch
parentbcca4ab2885b92cdfbb3b498006d4d6ccdd42bf3 (diff)
downloadaports-c123e0f14ab73976a36c651d47d134f249413f29.tar.gz
aports-c123e0f14ab73976a36c651d47d134f249413f29.tar.bz2
aports-c123e0f14ab73976a36c651d47d134f249413f29.tar.xz
main/gcc: Fix D language support on non-x86_64
While some basic functions were working, some C definitions in Druntime were wrong, which led to wrong compilation when trying to bootstrap other packages on x86, ARM and AArch64. Additionally, s390x didn't seem to pick the dependency on the C runtime, and needed an extra dependency on libucontext-dev (not to mention a few fixes to C definitions, like other archs). Finally, 404-dlang-zlib.patch contains a fix that was done in 2.077.0, but is needed for another Alpine package to work on all platforms. While not required to fix platform support, it fixes #11125.
Diffstat (limited to 'main/gcc/402-dlang-stat.patch')
-rw-r--r--main/gcc/402-dlang-stat.patch448
1 files changed, 448 insertions, 0 deletions
diff --git a/main/gcc/402-dlang-stat.patch b/main/gcc/402-dlang-stat.patch
new file mode 100644
index 0000000000..faf4ed731f
--- /dev/null
+++ b/main/gcc/402-dlang-stat.patch
@@ -0,0 +1,448 @@
+diff -Nurp a/libphobos/libdruntime/core/sys/posix/fcntl.d b/libphobos/libdruntime/core/sys/posix/fcntl.d
+--- a/libphobos/libdruntime/core/sys/posix/fcntl.d 2020-01-01 00:00:00.000000000 +0900
++++ b/libphobos/libdruntime/core/sys/posix/fcntl.d 2020-01-01 00:00:00.000000000 +0900
+@@ -779,7 +779,102 @@ else version (CRuntime_Bionic)
+ }
+ else version (CRuntime_Musl)
+ {
+- enum {
++ version (X86_64)
++ {
++ enum
++ {
++ O_DIRECTORY = 0x010000, // octal 0200000
++ O_NOFOLLOW = 0x020000, // octal 0400000
++ O_DIRECT = 0x004000, // octal 040000
++ O_LARGEFILE = 0,
++ O_TMPFILE = 0x410000, // octal 020200000
++
++ F_GETLK = 5,
++ F_SETLK = 6,
++ F_SETLKW = 7,
++ }
++ }
++ // Note: Definitions for i386 are in arch/generic/bits/fcntl.h
++ else version (X86)
++ {
++ enum
++ {
++ O_DIRECTORY = 0x010000, // octal 0200000
++ O_NOFOLLOW = 0x020000, // octal 0400000
++ O_DIRECT = 0x004000, // octal 040000
++ O_LARGEFILE = 0x008000, // octal 0100000
++ O_TMPFILE = 0x410000, // octal 020200000
++
++ F_GETLK = 12,
++ F_SETLK = 13,
++ F_SETLKW = 14,
++ }
++ }
++ else version (ARM)
++ {
++ enum
++ {
++ O_DIRECTORY = 0x004000, // octal 040000
++ O_NOFOLLOW = 0x008000, // octal 0100000
++ O_DIRECT = 0x010000, // octal 0200000
++ O_LARGEFILE = 0x020000, // octal 0400000
++ O_TMPFILE = 0x404000, // octal 020040000
++
++ F_GETLK = 12,
++ F_SETLK = 13,
++ F_SETLKW = 14,
++ }
++ }
++ else version (AArch64)
++ {
++ enum
++ {
++ O_DIRECTORY = 0x004000, // octal 040000
++ O_NOFOLLOW = 0x008000, // octal 0100000
++ O_DIRECT = 0x010000, // octal 0200000
++ O_LARGEFILE = 0x020000, // octal 0400000
++ O_TMPFILE = 0x404000, // octal 020040000
++
++ F_GETLK = 5,
++ F_SETLK = 6,
++ F_SETLKW = 7,
++ }
++ }
++ else version (SystemZ)
++ {
++ enum
++ {
++ O_DIRECTORY = 0x010000, // octal 0200000
++ O_NOFOLLOW = 0x020000, // octal 0400000
++ O_DIRECT = 0x004000, // octal 040000
++ O_LARGEFILE = 0x008000, // octal 0100000
++ O_TMPFILE = 0x410000, // octal 020200000
++
++ F_GETLK = 5,
++ F_SETLK = 6,
++ F_SETLKW = 7,
++ }
++ }
++ else version (PPC64)
++ {
++ enum
++ {
++ O_DIRECTORY = 0x004000, // octal 040000
++ O_NOFOLLOW = 0x008000, // octal 0100000
++ O_DIRECT = 0x020000, // octal 0400000
++ O_LARGEFILE = 0x010000, // octal 0200000
++ O_TMPFILE = 0x410000, // octal 020200000
++
++ F_GETLK = 5,
++ F_SETLK = 6,
++ F_SETLKW = 7,
++ }
++ }
++ else
++ static assert(0, "Platform not supported");
++
++ enum
++ {
+ O_CREAT = 0x40, // octal 0100
+ O_EXCL = 0x80, // octal 0200
+ O_NOCTTY = 0x100, // octal 0400
+@@ -790,16 +885,11 @@ else version (CRuntime_Musl)
+ O_DSYNC = 0x1000, // octal 010000
+ O_SYNC = 0x101000, // octal 04010000
+ O_RSYNC = O_SYNC,
+- O_DIRECTORY = 0x10000,
+- O_NOFOLLOW = 0x20000,
+ O_CLOEXEC = 0x80000,
+
+ O_ASYNC = 0x2000,
+- O_DIRECT = 0x4000,
+- O_LARGEFILE = 0,
+ O_NOATIME = 0x40000,
+ O_PATH = 0x200000,
+- O_TMPFILE = 0x410000,
+ O_NDELAY = O_NONBLOCK,
+ O_SEARCH = O_PATH,
+ O_EXEC = O_PATH,
+@@ -809,19 +899,19 @@ else version (CRuntime_Musl)
+ O_WRONLY = 01,
+ O_RDWR = 02,
+ }
+- enum {
++ enum
++ {
+ F_DUPFD = 0,
+ F_GETFD = 1,
+ F_SETFD = 2,
+ F_GETFL = 3,
+ F_SETFL = 4,
+- F_GETLK = 5,
+- F_SETLK = 6,
+- F_SETLKW = 7,
++ // F_GETLK, F_SETLK, F_SETLKW are arch-specific
+ F_SETOWN = 8,
+ F_GETOWN = 9,
+ }
+- enum {
++ enum
++ {
+ F_RDLCK = 0,
+ F_WRLCK = 1,
+ F_UNLCK = 2,
+diff -Nurp a/libphobos/libdruntime/core/sys/posix/semaphore.d b/libphobos/libdruntime/core/sys/posix/semaphore.d
+--- a/libphobos/libdruntime/core/sys/posix/semaphore.d 2020-01-01 00:00:00.000000000 +0900
++++ b/libphobos/libdruntime/core/sys/posix/semaphore.d 2020-01-01 00:00:00.000000000 +0900
+@@ -143,8 +143,10 @@ else version (CRuntime_Bionic)
+ else version (CRuntime_Musl)
+ {
+ struct sem_t {
+- int[4*long.sizeof/int.sizeof] __val;
++ int[4*c_long.sizeof/int.sizeof] __val;
+ }
++
++ enum SEM_FAILED = (sem_t*).init;
+ }
+ else version (CRuntime_UClibc)
+ {
+diff -Nurp a/libphobos/libdruntime/core/sys/posix/sys/stat.d b/libphobos/libdruntime/core/sys/posix/sys/stat.d
+--- a/libphobos/libdruntime/core/sys/posix/sys/stat.d 2020-01-01 00:00:00.000000000 +0900
++++ b/libphobos/libdruntime/core/sys/posix/sys/stat.d 2020-01-01 00:00:00.000000000 +0900
+@@ -1587,31 +1587,225 @@ else version (CRuntime_Musl)
+ S_ISGID = 0x400, // octal 02000
+ S_ISVTX = 0x200, // octal 01000
+ }
+- struct stat_t {
+- dev_t st_dev;
+- ino_t st_ino;
+- nlink_t st_nlink;
+-
+- mode_t st_mode;
+- uid_t st_uid;
+- gid_t st_gid;
+- uint __pad0;
+- dev_t st_rdev;
+- off_t st_size;
+- blksize_t st_blksize;
+- blkcnt_t st_blocks;
+-
+- timespec st_atim;
+- timespec st_mtim;
+- timespec st_ctim;
+- extern(D) @safe @property inout pure nothrow
+- {
+- ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
+- ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
+- ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ version (ARM)
++ {
++ struct stat_t
++ {
++ dev_t st_dev;
++ int __st_dev_padding;
++ c_long __st_ino_truncated;
++ mode_t st_mode;
++ nlink_t st_nlink;
++
++ uid_t st_uid;
++ gid_t st_gid;
++ dev_t st_rdev;
++ int __st_rdev_padding;
++ off_t st_size;
++ blksize_t st_blksize;
++ blkcnt_t st_blocks;
++
++ timespec st_atim;
++ timespec st_mtim;
++ timespec st_ctim;
++ ino_t st_ino;
++
++ extern(D) @safe @property inout pure nothrow
++ {
++ ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
++ ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
++ ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ }
++ }
++ }
++ else version (AArch64)
++ {
++ struct stat_t
++ {
++ dev_t st_dev;
++ ino_t st_ino;
++ mode_t st_mode;
++ nlink_t st_nlink;
++
++ uid_t st_uid;
++ gid_t st_gid;
++ dev_t st_rdev;
++ c_ulong __pad;
++ off_t st_size;
++ blksize_t st_blksize;
++ int __pad2;
++ blkcnt_t st_blocks;
++
++ timespec st_atim;
++ timespec st_mtim;
++ timespec st_ctim;
++ uint[2] __unused;
++
++ extern(D) @safe @property inout pure nothrow
++ {
++ ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
++ ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
++ ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ }
++ }
++ }
++ else version (X86_64)
++ {
++ struct stat_t
++ {
++ dev_t st_dev;
++ ino_t st_ino;
++ nlink_t st_nlink;
++
++ mode_t st_mode;
++ uid_t st_uid;
++ gid_t st_gid;
++ uint __pad0;
++ dev_t st_rdev;
++ off_t st_size;
++ blksize_t st_blksize;
++ blkcnt_t st_blocks;
++
++ timespec st_atim;
++ timespec st_mtim;
++ timespec st_ctim;
++
++ c_long[3] __unused;
++
++ extern(D) @safe @property inout pure nothrow
++ {
++ ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
++ ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
++ ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ }
++ }
++ }
++ else version (X86)
++ {
++ struct stat_t
++ {
++ dev_t st_dev;
++ int __st_dev_padding;
++ c_long __st_ino_truncated;
++ mode_t st_mode;
++ nlink_t st_nlink;
++
++ uid_t st_uid;
++ gid_t st_gid;
++ dev_t st_rdev;
++ int __st_rdev_padding;
++ off_t st_size;
++ blksize_t st_blksize;
++ blkcnt_t st_blocks;
++
++ timespec st_atim;
++ timespec st_mtim;
++ timespec st_ctim;
++ ino_t st_ino;
++
++ extern(D) @safe @property inout pure nothrow
++ {
++ ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
++ ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
++ ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ }
+ }
+- long[3] __unused;
+ }
++ else version (MIPS64)
++ {
++ struct stat_t
++ {
++ dev_t st_dev;
++ int[3] __pad1;
++ ino_t st_ino;
++ mode_t st_mode;
++ nlink_t st_nlink;
++
++ uid_t st_uid;
++ gid_t st_gid;
++ dev_t st_rdev;
++ uint[2] __pad2;
++ off_t st_size;
++ int __pad3;
++
++ timespec st_atim;
++ timespec st_mtim;
++ timespec st_ctim;
++ blksize_t st_blksize;
++ uint __pad4;
++ blkcnt_t st_blocks;
++ int[14] __pad5;
++
++ extern(D) @safe @property inout pure nothrow
++ {
++ ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
++ ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
++ ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ }
++ }
++ }
++ else version (PPC64)
++ {
++ struct stat_t
++ {
++ dev_t st_dev;
++ ino_t st_ino;
++ nlink_t st_nlink;
++ mode_t st_mode;
++
++ uid_t st_uid;
++ gid_t st_gid;
++ dev_t st_rdev;
++ off_t st_size;
++ blksize_t st_blksize;
++ blkcnt_t st_blocks;
++
++ timespec st_atim;
++ timespec st_mtim;
++ timespec st_ctim;
++ c_ulong[3] __unused;
++
++ extern(D) @safe @property inout pure nothrow
++ {
++ ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
++ ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
++ ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ }
++ }
++ }
++ else version (SystemZ)
++ {
++ struct stat_t
++ {
++ dev_t st_dev;
++ ino_t st_ino;
++ nlink_t st_nlink;
++ mode_t st_mode;
++
++ uid_t st_uid;
++ gid_t st_gid;
++ dev_t st_rdev;
++ off_t st_size;
++
++ timespec st_atim;
++ timespec st_mtim;
++ timespec st_ctim;
++
++ blksize_t st_blksize;
++ blkcnt_t st_blocks;
++ c_ulong[3] __unused;
++
++ extern(D) @safe @property inout pure nothrow
++ {
++ ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
++ ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
++ ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
++ }
++ }
++ }
++ else
++ static assert("Unsupported platform");
++
+ private
+ {
+ extern (D) bool S_ISTYPE( mode_t mode, uint mask )
+diff -Nurp a/libphobos/libdruntime/core/sys/posix/sys/types.d b/libphobos/libdruntime/core/sys/posix/sys/types.d
+--- a/libphobos/libdruntime/core/sys/posix/sys/types.d 2020-01-08 00:00:00.000000000 +0900
++++ b/libphobos/libdruntime/core/sys/posix/sys/types.d 2020-01-08 00:00:00.000000000 +0900
+@@ -112,8 +112,26 @@ version (CRuntime_Glibc)
+ }
+ else version (CRuntime_Musl)
+ {
+- alias c_long blksize_t;
+- alias c_ulong nlink_t;
++ version (AArch64)
++ {
++ alias int blksize_t;
++ alias uint nlink_t;
++ }
++ else version (MIPS64)
++ {
++ alias c_long blksize_t;
++ alias uint nlink_t;
++ }
++ else version (RISCV64)
++ {
++ alias int blksize_t;
++ alias uint nlink_t;
++ }
++ else
++ {
++ alias c_long blksize_t;
++ alias c_ulong nlink_t;
++ }
+ alias long dev_t;
+ alias long blkcnt_t;
+ alias ulong ino_t;