libphobos: Add platform bindings for hppa-linux-gnu.

Backported from upstream druntime 2.084

Reviewed-on: https://github.com/dlang/druntime/pull/2402

From-SVN: r268055
This commit is contained in:
Iain Buclaw 2019-01-18 00:48:51 +00:00
parent fa95915e47
commit 50deb97073
17 changed files with 460 additions and 0 deletions

View File

@ -25,6 +25,7 @@ else version (WatchOS)
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -421,6 +422,112 @@ else version (linux)
enum ERFKILL = 132; ///
enum EHWPOISON = 133; ///
}
else version (HPPA_Any)
{
enum ENOMSG = 35; ///
enum EIDRM = 36; ///
enum ECHRNG = 37; ///
enum EL2NSYNC = 38; ///
enum EL3HLT = 39; ///
enum EL3RST = 40; ///
enum ELNRNG = 41; ///
enum EUNATCH = 42; ///
enum ENOCSI = 43; ///
enum EL2HLT = 44; ///
enum EDEADLK = 45; ///
enum EDEADLOCK = EDEADLK; ///
enum ENOLCK = 46; ///
enum EILSEQ = 47; ///
enum ENONET = 50; ///
enum ENODATA = 51; ///
enum ETIME = 52; ///
enum ENOSR = 53; ///
enum ENOSTR = 54; ///
enum ENOPKG = 55; ///
enum ENOLINK = 57; ///
enum EADV = 58; ///
enum ESRMNT = 59; ///
enum ECOMM = 60; ///
enum EPROTO = 61; ///
enum EMULTIHOP = 64; ///
enum EDOTDOT = 66; ///
enum EBADMSG = 67; ///
enum EUSERS = 68; ///
enum EDQUOT = 69; ///
enum ESTALE = 70; ///
enum EREMOTE = 71; ///
enum EOVERFLOW = 72; ///
enum EBADE = 160; ///
enum EBADR = 161; ///
enum EXFULL = 162; ///
enum ENOANO = 163; ///
enum EBADRQC = 164; ///
enum EBADSLT = 165; ///
enum EBFONT = 166; ///
enum ENOTUNIQ = 167; ///
enum EBADFD = 168; ///
enum EREMCHG = 169; ///
enum ELIBACC = 170; ///
enum ELIBBAD = 171; ///
enum ELIBSCN = 172; ///
enum ELIBMAX = 173; ///
enum ELIBEXEC = 174; ///
enum ERESTART = 175; ///
enum ESTRPIPE = 176; ///
enum EUCLEAN = 177; ///
enum ENOTNAM = 178; ///
enum ENAVAIL = 179; ///
enum EISNAM = 180; ///
enum EREMOTEIO = 181; ///
enum ENOMEDIUM = 182; ///
enum EMEDIUMTYPE = 183; ///
enum ENOKEY = 184; ///
enum EKEYEXPIRED = 185; ///
enum EKEYREVOKED = 186; ///
enum EKEYREJECTED = 187; ///
enum ENOSYM = 215; ///
enum ENOTSOCK = 216; ///
enum EDESTADDRREQ = 217; ///
enum EMSGSIZE = 218; ///
enum EPROTOTYPE = 219; ///
enum ENOPROTOOPT = 220; ///
enum EPROTONOSUPPORT = 221; ///
enum ESOCKTNOSUPPORT = 221; ///
enum EOPNOTSUPP = 223; ///
enum EPFNOSUPPORT = 224; ///
enum EAFNOSUPPORT = 225; ///
enum EADDRINUSE = 226; ///
enum EADDRNOTAVAIL = 227; ///
enum ENETDOWN = 228; ///
enum ENETUNREACH = 229; ///
enum ENETRESET = 230; ///
enum ECONNABORTED = 231; ///
enum ECONNRESET = 232; ///
enum ENOBUFS = 233; ///
enum EISCONN = 234; ///
enum ENOTCONN = 235; ///
enum ESHUTDOWN = 236; ///
enum ETOOMANYREFS = 237; ///
enum ETIMEDOUT = 238; ///
enum ECONNREFUSED = 239; ///
enum EREFUSED = ECONNREFUSED; ///
enum EREMOTERELEASE = 240; ///
enum EHOSTDOWN = 241; ///
enum EHOSTUNREACH = 242; ///
enum EALREADY = 244; ///
enum EINPROGRESS = 245; ///
enum EWOULDBLOCK = EAGAIN; ///
enum ENOTEMPTY = 247; ///
enum ENAMETOOLONG = 248; ///
enum ELOOP = 249; ///
enum ENOSYS = 251; ///
enum ECANCELLED = 253; ///
enum ECANCELED = ECANCELLED; ///
enum EOWNERDEAD = 254; ///
enum ENOTRECOVERABLE = 255; ///
enum ERFKILL = 256; ///
enum EHWPOISON = 257; ///
}
else version (MIPS_Any)
{
enum ENOMSG = 35; ///

View File

@ -30,6 +30,7 @@ nothrow:
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -93,6 +94,17 @@ version (GNUFP)
alias fexcept_t = ushort;
}
// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/hppa/bits/fenv.h
else version (HPPA_Any)
{
struct fenv_t
{
uint __status_word;
uint[7] __exception;
}
alias fexcept_t = uint;
}
// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/mips/bits/fenv.h
else version (MIPS_Any)
{
@ -575,6 +587,28 @@ else
FE_TOWARDZERO = 0xC00000, ///
}
}
else version (HPPA_Any)
{
// Define bits representing the exception.
enum
{
FE_INEXACT = 0x01, ///
FE_UNDERFLOW = 0x02, ///
FE_OVERFLOW = 0x04, ///
FE_DIVBYZERO = 0x08, ///
FE_INVALID = 0x10, ///
FE_ALL_EXCEPT = 0x1F, ///
}
// The HPPA FPU supports all of the four defined rounding modes.
enum
{
FE_TONEAREST = 0x0, ///
FE_TOWARDZERO = 0x200, ///
FE_UPWARD = 0x400, ///
FE_DOWNWARD = 0x600, ///
}
}
else version (MIPS_Any)
{
// Define bits representing the exception.

View File

@ -26,6 +26,7 @@ else version (WatchOS)
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -147,6 +148,13 @@ else version (CRuntime_Glibc)
///
enum int FP_ILOGBNAN = int.max;
}
else version (HPPA_Any)
{
///
enum int FP_ILOGB0 = -int.max;
///
enum int FP_ILOGBNAN = int.max;
}
else version (MIPS_Any)
{
///

View File

@ -12,6 +12,7 @@ nothrow:
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -53,6 +54,30 @@ version (X86_Any)
void _dl_mcount_wrapper_check(void* __selfpc);
}
}
else version (HPPA_Any)
{
// http://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/hppa/bits/dlfcn.h
// enum RTLD_LAZY = 0x0001; // POSIX
// enum RTLD_NOW = 0x0002; // POSIX
enum RTLD_BINDING_MASK = 0x3;
enum RTLD_NOLOAD = 0x00004;
enum RTLD_DEEPBIND = 0x00008;
// enum RTLD_GLOBAL = 0x0004; // POSIX
// enum RTLD_LOCAL = 0; // POSIX
enum RTLD_NODELETE = 0x01000;
static if (__USE_GNU)
{
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
{
_dl_mcount_wrapper_check(cast(void*)fctp);
return fctp(args);
}
void _dl_mcount_wrapper_check(void* __selfpc);
}
}
else version (MIPS_Any)
{
// http://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/bits/dlfcn.h

View File

@ -17,6 +17,7 @@ nothrow:
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -86,6 +87,14 @@ else version (PPC_Any)
epoll_data_t data;
}
}
else version (HPPA_Any)
{
struct epoll_event
{
uint events;
epoll_data_t data;
}
}
else version (MIPS_Any)
{
struct epoll_event

View File

@ -11,6 +11,7 @@ nothrow:
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -34,6 +35,12 @@ version (X86_Any)
alias __WORDSIZE __ELF_NATIVE_CLASS;
alias uint32_t Elf_Symndx;
}
else version (HPPA_Any)
{
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h
alias __WORDSIZE __ELF_NATIVE_CLASS;
alias uint32_t Elf_Symndx;
}
else version (MIPS_Any)
{
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h

View File

@ -14,6 +14,7 @@ nothrow:
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -48,6 +49,12 @@ version (X86_Any)
enum EFD_CLOEXEC = 0x80000; // octal!2000000
enum EFD_NONBLOCK = 0x800; // octal!4000
}
else version (HPPA_Any)
{
enum EFD_SEMAPHORE = 1;
enum EFD_CLOEXEC = 0x200000; // octal!10000000
enum EFD_NONBLOCK = 0x10004; // octal!00200004
}
else version (MIPS_Any)
{
enum EFD_SEMAPHORE = 1;

View File

@ -13,6 +13,7 @@ nothrow:
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -73,6 +74,11 @@ version (X86_Any)
enum IN_CLOEXEC = 0x80000; // octal!2000000
enum IN_NONBLOCK = 0x800; // octal!4000
}
else version (HPPA_Any)
{
enum IN_CLOEXEC = 0x200000; // octal!10000000
enum IN_NONBLOCK = 0x10004; // octal!200004
}
else version (MIPS_Any)
{
enum IN_CLOEXEC = 0x80000; // octal!2000000

View File

@ -27,6 +27,7 @@ else version (WatchOS)
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -69,6 +70,13 @@ version (CRuntime_Glibc)
enum RTLD_GLOBAL = 0x00100;
enum RTLD_LOCAL = 0x00000;
}
else version (HPPA_Any)
{
enum RTLD_LAZY = 0x0001;
enum RTLD_NOW = 0x0002;
enum RTLD_GLOBAL = 0x0100;
enum RTLD_LOCAL = 0;
}
else version (MIPS_Any)
{
enum RTLD_LAZY = 0x0001;

View File

@ -30,6 +30,7 @@ else version (WatchOS)
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -154,6 +155,19 @@ version (CRuntime_Glibc)
enum O_DSYNC = 0x1000; // octal 010000
enum O_RSYNC = O_SYNC;
}
else version (HPPA_Any)
{
enum O_CREAT = 0x00100; // octal 04000
enum O_EXCL = 0x00400; // octal 0200
enum O_NOCTTY = 0x20000; // octal 0400
enum O_TRUNC = 0x00200; // octal 01000
enum O_APPEND = 0x00008; // octal 010
enum O_NONBLOCK = 0x10004; // octal 0200004
enum O_SYNC = 0x48000; // octal 01100000
enum O_DSYNC = 0x40000; // octal 01000000
enum O_RSYNC = 0x80000; // octal 02000000
}
else version (MIPS_Any)
{
enum O_CREAT = 0x0100;

View File

@ -77,6 +77,20 @@ version (CRuntime_Glibc)
{
alias int[64] __jmp_buf;
}
else version (HPPA)
{
struct __jmp_buf
{
int __r3;
int[15] __r4_r18;
int __r19;
int __r27;
int __sp;
int __rp;
int __pad1;
double[10] __fr12_fr21;
}
}
else version (PPC)
{
alias int[64 + (12*4)] __jmp_buf;

View File

@ -27,6 +27,7 @@ else version (WatchOS)
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -258,6 +259,30 @@ version (linux)
enum SIGUSR2 = 12;
enum SIGURG = 23;
}
else version (HPPA_Any)
{
//SIGABRT (defined in core.stdc.signal)
enum SIGALRM = 14;
enum SIGBUS = 10;
enum SIGCHLD = 18;
enum SIGCONT = 26;
//SIGFPE (defined in core.stdc.signal)
enum SIGHUP = 1;
//SIGILL (defined in core.stdc.signal)
//SIGINT (defined in core.stdc.signal)
enum SIGKILL = 9;
enum SIGPIPE = 13;
enum SIGQUIT = 3;
//SIGSEGV (defined in core.stdc.signal)
enum SIGSTOP = 24;
//SIGTERM (defined in core.stdc.signal)
enum SIGTSTP = 25;
enum SIGTTIN = 27;
enum SIGTTOU = 28;
enum SIGUSR1 = 16;
enum SIGUSR2 = 17;
enum SIGURG = 29;
}
else version (MIPS_Any)
{
//SIGABRT (defined in core.stdc.signal)
@ -2015,6 +2040,16 @@ version (CRuntime_Glibc)
enum SIGXCPU = 24;
enum SIGXFSZ = 25;
}
else version (HPPA_Any)
{
enum SIGPOLL = 22;
enum SIGPROF = 21;
enum SIGSYS = 31;
enum SIGTRAP = 5;
enum SIGVTALRM = 20;
enum SIGXCPU = 12;
enum SIGXFSZ = 30;
}
else version (MIPS_Any)
{
enum SIGPOLL = 22;

View File

@ -29,6 +29,7 @@ else version (WatchOS)
version (ARM) version = ARM_Any;
version (AArch64) version = ARM_Any;
version (HPPA) version = HPPA_Any;
version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
@ -290,6 +291,40 @@ version (CRuntime_Glibc)
SO_TYPE = 3
}
}
else version (HPPA_Any)
{
enum
{
SOCK_DGRAM = 2,
SOCK_SEQPACKET = 5,
SOCK_STREAM = 1,
}
enum
{
SOL_SOCKET = 0xffff
}
enum
{
SO_ACCEPTCONN = 0x401c,
SO_BROADCAST = 0x0020,
SO_DEBUG = 0x0001,
SO_DONTROUTE = 0x0010,
SO_ERROR = 0x1007,
SO_KEEPALIVE = 0x0008,
SO_LINGER = 0x0080,
SO_OOBINLINE = 0x0100,
SO_RCVBUF = 0x1002,
SO_RCVLOWAT = 0x1004,
SO_RCVTIMEO = 0x1006,
SO_REUSEADDR = 0x0004,
SO_SNDBUF = 0x1001,
SO_SNDLOWAT = 0x1003,
SO_SNDTIMEO = 0x1005,
SO_TYPE = 0x1008,
}
}
else version (MIPS_Any)
{
enum

View File

@ -186,6 +186,101 @@ version (CRuntime_Glibc)
slong_t[3] __unused;
}
}
else version (HPPA)
{
private
{
alias __dev_t = ulong;
alias __ino_t = c_ulong;
alias __ino64_t = ulong;
alias __mode_t = uint;
alias __nlink_t = size_t;
alias __uid_t = uint;
alias __gid_t = uint;
alias __off_t = c_long;
alias __off64_t = long;
alias __blksize_t = c_long;
alias __blkcnt_t = c_long;
alias __blkcnt64_t = long;
alias __timespec = timespec;
alias __time_t = time_t;
}
struct stat_t
{
__dev_t st_dev;
ushort __pad1;
static if (!__USE_FILE_OFFSET64)
{
__ino_t st_ino;
}
else
{
__ino_t __st_ino;
}
__mode_t st_mode;
__nlink_t st_nlink;
__uid_t st_uid;
__gid_t st_gid;
__dev_t st_rdev;
ushort __pad2;
static if (!__USE_FILE_OFFSET64)
{
__off_t st_size;
}
else
{
__off64_t st_size;
}
__blksize_t st_blksize;
static if (!__USE_FILE_OFFSET64)
{
__blkcnt_t st_blocks;
}
else
{
__blkcnt64_t st_blocks;
}
static if ( __USE_MISC || __USE_XOPEN2K8)
{
__timespec st_atim;
__timespec st_mtim;
__timespec st_ctim;
extern(D)
{
@property ref time_t st_atime() { return st_atim.tv_sec; }
@property ref time_t st_mtime() { return st_mtim.tv_sec; }
@property ref time_t st_ctime() { return st_ctim.tv_sec; }
}
}
else
{
__time_t st_atime;
c_ulong st_atimensec;
__time_t st_mtime;
c_ulong st_mtimensec;
__time_t st_ctime;
c_ulong st_ctimensec;
}
static if (!__USE_FILE_OFFSET64)
{
c_ulong __unused4;
c_ulong __unused5;
}
else
{
__ino64_t st_ino;
}
}
static if (__USE_FILE_OFFSET64)
static assert(stat_t.sizeof == 104);
else
static assert(stat_t.sizeof == 88);
}
else version (MIPS_O32)
{
struct stat_t

View File

@ -545,6 +545,18 @@ version (CRuntime_Glibc)
enum __SIZEOF_PTHREAD_BARRIER_T = 20;
enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
}
else version (HPPA)
{
enum __SIZEOF_PTHREAD_ATTR_T = 36;
enum __SIZEOF_PTHREAD_MUTEX_T = 48;
enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
enum __SIZEOF_PTHREAD_COND_T = 48;
enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
enum __SIZEOF_PTHREAD_RWLOCK_T = 64;
enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
enum __SIZEOF_PTHREAD_BARRIER_T = 48;
enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
}
else version (IA64)
{
enum __SIZEOF_PTHREAD_ATTR_T = 56;

View File

@ -197,6 +197,48 @@ version (CRuntime_Glibc)
_libc_fpstate __fpregs_mem;
}
}
else version (HPPA)
{
private
{
enum NGREG = 80;
enum NFPREG = 32;
alias c_ulong greg_t;
struct gregset_t
{
greg_t[32] g_regs;
greg_t[8] sr_regs;
greg_t[24] cr_regs;
greg_t[16] g_pad;
}
struct fpregset_t
{
double[32] fpregs;
}
}
struct mcontext_t
{
greg_t sc_flags;
greg_t[32] sc_gr;
fpregset_t sc_fr;
greg_t[2] sc_iasq;
greg_t[2] sc_iaoq;
greg_t sc_sar;
}
struct ucontext_t
{
c_ulong uc_flags;
ucontext_t* uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
}
}
else version (MIPS32)
{
private

View File

@ -979,6 +979,8 @@ else version (RISCV32)
enum TLS_DTV_OFFSET = 0x800;
else version (RISCV64)
enum TLS_DTV_OFFSET = 0x800;
else version (HPPA)
enum TLS_DTV_OFFSET = 0x0;
else version (SPARC)
enum TLS_DTV_OFFSET = 0x0;
else version (SPARC64)