Commit 6e5084b4 by Iain Buclaw

libphobos: Merge upstream druntime 7915b6a3

Includes port fixes for Musl on ARM, AArch64, and SystemZ targets.

Reviewed-on: https://github.com/dlang/druntime/pull/2751
             https://github.com/dlang/druntime/pull/2843
             https://github.com/dlang/druntime/pull/2844
             https://github.com/dlang/druntime/pull/2898
parent 9a6408bd
5bb8ce19fa495e5f794b3c513ae1bf7aabae93ff
7915b6a399fbb6d9c0db351eb5a8fda7e43fe8c5
The first line of this file holds the git revision number of the last
merge done from the dlang/druntime repository.
......@@ -386,6 +386,8 @@ else version (CRuntime_Musl)
}
else version (ARM)
{
import core.stdc.config : c_ulong;
struct fenv_t
{
c_ulong __cw;
......
......@@ -67,15 +67,21 @@ version (CRuntime_Glibc)
}
else version (CRuntime_Musl)
{
// off_t is always 64 bits on Musl
enum _FILE_OFFSET_BITS = 64;
// Not present in Musl sources
enum __REDIRECT = false;
// Those three are irrelevant for Musl as it always uses 64 bits off_t
enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
enum __USE_LARGEFILE = __USE_FILE_OFFSET64 && !__REDIRECT;
enum __USE_LARGEFILE64 = __USE_FILE_OFFSET64 && !__REDIRECT;
enum __WORDSIZE=64;
version (D_LP64)
enum __WORDSIZE = 64;
else
enum __WORDSIZE = 32;
}
else version (CRuntime_UClibc)
{
......
......@@ -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,
......
......@@ -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)
{
......
......@@ -1895,22 +1895,52 @@ else version (CRuntime_Musl)
enum
{
SO_DEBUG = 1,
SO_REUSEADDR = 2,
SO_TYPE = 3,
SO_ERROR = 4,
SO_DONTROUTE = 5,
SO_BROADCAST = 6,
SO_SNDBUF = 7,
SO_RCVBUF = 8,
SO_KEEPALIVE = 9,
SO_OOBINLINE = 10,
SO_LINGER = 13,
SO_RCVLOWAT = 18,
SO_SNDLOWAT = 19,
SO_RCVTIMEO = 20,
SO_SNDTIMEO = 21,
SO_ACCEPTCONN = 30
SO_DEBUG = 1
}
version (MIPS_Any)
{
enum
{
SO_REUSEADDR = 0x0004,
SO_TYPE = 0x1008,
SO_ERROR = 0x1007,
SO_DONTROUTE = 0x0010,
SO_BROADCAST = 0x0020,
SO_SNDBUF = 0x1001,
SO_RCVBUF = 0x1002,
SO_KEEPALIVE = 0x0008,
SO_OOBINLINE = 0x0100,
SO_LINGER = 0x0080,
SO_REUSEPORT = 0x0200,
SO_RCVLOWAT = 0x1004,
SO_SNDLOWAT = 0x1003,
SO_RCVTIMEO = 0x1006,
SO_SNDTIMEO = 0x1005,
SO_ACCEPTCONN = 0x1009
}
}
else
{
enum
{
SO_REUSEADDR = 2,
SO_TYPE = 3,
SO_ERROR = 4,
SO_DONTROUTE = 5,
SO_BROADCAST = 6,
SO_SNDBUF = 7,
SO_RCVBUF = 8,
SO_KEEPALIVE = 9,
SO_OOBINLINE = 10,
SO_LINGER = 13,
SO_REUSEPORT = 15,
SO_RCVLOWAT = 18,
SO_SNDLOWAT = 19,
SO_RCVTIMEO = 20,
SO_SNDTIMEO = 21,
SO_ACCEPTCONN = 30
}
}
enum : uint
......
......@@ -1664,31 +1664,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;
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; }
}
}
}
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;
timespec st_atim;
timespec st_mtim;
timespec st_ctim;
extern(D) @safe @property inout pure nothrow
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
{
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; }
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; }
}
}
long[3] __unused;
}
else
static assert("Unsupported platform");
private
{
extern (D) bool S_ISTYPE( mode_t mode, uint mask )
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment