diff options
43 files changed, 2222 insertions, 0 deletions
| diff --git a/arch/x86_64/atomic.h b/arch/x86_64/atomic.h new file mode 100644 index 00000000..e74e4535 --- /dev/null +++ b/arch/x86_64/atomic.h @@ -0,0 +1,110 @@ +#ifndef _INTERNAA_ATOMIC_H +#define _INTERNAA_ATOMIC_H + +#include <stdint.h> + +static inline int a_ctz_64(uint64_t x) +{ +	int r; +	__asm__( "bsf %1,%0 ; jnz 1f ; bsf %2,%0 ; addl $32,%0\n1:" +		: "=r"(r) : "r"((unsigned)x), "r"((unsigned)(x>>32)) ); +	return r; +} + + +static inline void a_and_64(volatile uint64_t *p, uint64_t v) +{ +	__asm__( "lock ; andl %1, (%0) ; lock ; andl %2, 4(%0)" +		: : "r"((long *)p), "r"((unsigned)v), "r"((unsigned)(v>>32)) : "memory" ); +} + +static inline void a_or_64(volatile uint64_t *p, uint64_t v) +{ +	__asm__( "lock ; orl %1, (%0) ; lock ; orl %2, 4(%0)" +		: : "r"((long *)p), "r"((unsigned)v), "r"((unsigned)(v>>32)) : "memory" ); +} + +static inline void a_store_l(volatile void *p, long x) +{ +	__asm__( "movl %1, %0" : "=m"(*(long *)p) : "r"(x) : "memory" ); +} + +static inline void a_or_l(volatile void *p, long v) +{ +	__asm__( "lock ; orl %1, %0" +		: "=m"(*(long *)p) : "r"(v) : "memory" ); +} + +static inline void *a_cas_p(volatile void *p, void *t, void *s) +{ +	__asm__( "lock ; cmpxchg %3, %1" +		: "=a"(t), "=m"(*(long *)p) : "a"(t), "r"(s) : "memory" ); +	return t; +} + +static inline long a_cas_l(volatile void *p, long t, long s) +{ +	__asm__( "lock ; cmpxchg %3, %1" +		: "=a"(t), "=m"(*(long *)p) : "a"(t), "r"(s) : "memory" ); +	return t; +} + +static inline void *a_swap_p(void *volatile *x, void *v) +{ +	__asm__( "xchg %0, %1" : "=r"(v), "=m"(*(void **)x) : "0"(v) : "memory" ); +	return v; +} +static inline long a_swap_l(volatile void *x, long v) +{ +	__asm__( "xchg %0, %1" : "=r"(v), "=m"(*(long *)x) : "0"(v) : "memory" ); +	return v; +} + +static inline void a_or(volatile void *p, int v) +{ +	__asm__( "lock ; orl %1, %0" +		: "=m"(*(int *)p) : "r"(v) : "memory" ); +} + +static inline void a_and(volatile void *p, int v) +{ +	__asm__( "lock ; andl %1, %0" +		: "=m"(*(int *)p) : "r"(v) : "memory" ); +} + +static inline int a_swap(volatile int *x, int v) +{ +	__asm__( "xchg %0, %1" : "=r"(v), "=m"(*x) : "0"(v) : "memory" ); +	return v; +} + +#define a_xchg a_swap + +static inline int a_fetch_add(volatile int *x, int v) +{ +	__asm__( "lock ; xadd %0, %1" : "=r"(v), "=m"(*x) : "0"(v) : "memory" ); +	return v; +} + +static inline void a_inc(volatile int *x) +{ +	__asm__( "lock ; incl %0" : "=m"(*x) : "m"(*x) : "memory" ); +} + +static inline void a_dec(volatile int *x) +{ +	__asm__( "lock ; decl %0" : "=m"(*x) : "m"(*x) : "memory" ); +} + +static inline void a_store(volatile int *p, int x) +{ +	__asm__( "movl %1, %0" : "=m"(*p) : "r"(x) : "memory" ); +} + +static inline void a_spin() +{ +	__asm__ __volatile__( "pause" : : : "memory" ); +} + + +#endif diff --git a/arch/x86_64/bits/alltypes.h.sh b/arch/x86_64/bits/alltypes.h.sh new file mode 100755 index 00000000..ce0b8ff1 --- /dev/null +++ b/arch/x86_64/bits/alltypes.h.sh @@ -0,0 +1,116 @@ +#!/bin/sh +sed -e << EOF \ +'/^TYPEDEF/s/TYPEDEF \(.*\) \([^ ]*\);$/#if defined(__NEED_\2) \&\& !defined(__DEFINED_\2)\ +typedef \1 \2;\ +#define __DEFINED_\2\ +#endif\ +/ +/^STRUCT/s/STRUCT * \([^ ]*\) \(.*\);$/#if defined(__NEED_struct_\1) \&\& !defined(__DEFINED_struct_\1)\ +struct \1 \2;\ +#define __DEFINED_struct_\1\ +#endif\ +/ +/^UNION/s/UNION * \([^ ]*\) \(.*\);$/#if defined(__NEED_union_\1) \&\& !defined(__DEFINED_union_\1)\ +union \1 \2;\ +#define __DEFINED_union_\1\ +#endif\ +/' + +TYPEDEF unsigned long size_t; +TYPEDEF long ssize_t; +TYPEDEF long ptrdiff_t; +TYPEDEF __builtin_va_list va_list; + +TYPEDEF int wchar_t; +TYPEDEF int wint_t; +TYPEDEF int wctrans_t; +TYPEDEF int wctype_t; + +TYPEDEF char      int8_t; +TYPEDEF short     int16_t; +TYPEDEF int       int32_t; +TYPEDEF long      int64_t; + +TYPEDEF unsigned char      uint8_t; +TYPEDEF unsigned short     uint16_t; +TYPEDEF unsigned int       uint32_t; +TYPEDEF unsigned long      uint64_t; + +TYPEDEF unsigned char      __uint8_t; +TYPEDEF unsigned short     __uint16_t; +TYPEDEF unsigned int       __uint32_t; +TYPEDEF unsigned long      __uint64_t; + +TYPEDEF int8_t  int_least8_t; +TYPEDEF int16_t int_least16_t; +TYPEDEF int32_t int_least32_t; +TYPEDEF int64_t int_least64_t; + +TYPEDEF uint8_t  uint_least8_t; +TYPEDEF uint16_t uint_least16_t; +TYPEDEF uint32_t uint_least32_t; +TYPEDEF uint64_t uint_least64_t; + +TYPEDEF int8_t    int_fast8_t; +TYPEDEF int       int_fast16_t; +TYPEDEF int       int_fast32_t; +TYPEDEF int64_t   int_fast64_t; + +TYPEDEF unsigned char      uint_fast8_t; +TYPEDEF unsigned int       uint_fast16_t; +TYPEDEF unsigned int       uint_fast32_t; +TYPEDEF uint64_t           uint_fast64_t; + +TYPEDEF long          intptr_t; +TYPEDEF unsigned long uintptr_t; + +TYPEDEF long long          intmax_t; +TYPEDEF unsigned long long uintmax_t; + +TYPEDEF long time_t; +TYPEDEF unsigned int useconds_t; +TYPEDEF long suseconds_t; +STRUCT timeval { time_t tv_sec; long tv_usec; }; +STRUCT timespec { time_t tv_sec; long tv_nsec; }; + +TYPEDEF int pid_t; +TYPEDEF int id_t; +TYPEDEF unsigned int uid_t; +TYPEDEF unsigned int gid_t; +TYPEDEF int key_t; +TYPEDEF struct __pthread * pthread_t; + +TYPEDEF long off_t; + +TYPEDEF unsigned int mode_t; + +TYPEDEF unsigned long nlink_t; +TYPEDEF unsigned long long ino_t; +TYPEDEF unsigned long dev_t; +TYPEDEF long blksize_t; +TYPEDEF long long blkcnt_t; +TYPEDEF unsigned long long fsblkcnt_t; +TYPEDEF unsigned long long fsfilcnt_t; + +TYPEDEF long timer_t; +TYPEDEF int clockid_t; +TYPEDEF long clock_t; + +TYPEDEF struct { unsigned long __bits[1024/sizeof(long)]; } sigset_t; +TYPEDEF struct __siginfo siginfo_t; + +TYPEDEF unsigned int socklen_t; +TYPEDEF unsigned short sa_family_t; +TYPEDEF unsigned short in_port_t; +TYPEDEF unsigned int in_addr_t; +STRUCT in_addr { in_addr_t s_addr; }; + +TYPEDEF struct __FILE_s FILE; + +TYPEDEF int nl_item; + +TYPEDEF struct __locale * locale_t; + +STRUCT iovec { void *iov_base; size_t iov_len; }; + +EOF diff --git a/arch/x86_64/bits/endian.h b/arch/x86_64/bits/endian.h new file mode 100644 index 00000000..172c338f --- /dev/null +++ b/arch/x86_64/bits/endian.h @@ -0,0 +1 @@ +#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/arch/x86_64/bits/errno.h b/arch/x86_64/bits/errno.h new file mode 100644 index 00000000..ec3d3633 --- /dev/null +++ b/arch/x86_64/bits/errno.h @@ -0,0 +1,132 @@ +#define EPERM            1 +#define ENOENT           2 +#define ESRCH            3 +#define EINTR            4 +#define EIO              5 +#define ENXIO            6 +#define E2BIG            7 +#define ENOEXEC          8 +#define EBADF            9 +#define ECHILD          10 +#define EAGAIN          11 +#define ENOMEM          12 +#define EACCES          13 +#define EFAULT          14 +#define ENOTBLK         15 +#define EBUSY           16 +#define EEXIST          17 +#define EXDEV           18 +#define ENODEV          19 +#define ENOTDIR         20 +#define EISDIR          21 +#define EINVAL          22 +#define ENFILE          23 +#define EMFILE          24 +#define ENOTTY          25 +#define ETXTBSY         26 +#define EFBIG           27 +#define ENOSPC          28 +#define ESPIPE          29 +#define EROFS           30 +#define EMLINK          31 +#define EPIPE           32 +#define EDOM            33 +#define ERANGE          34 +#define EDEADLK         35 +#define ENAMETOOLONG    36 +#define ENOLCK          37 +#define ENOSYS          38 +#define ENOTEMPTY       39 +#define ELOOP           40 +#define EWOULDBLOCK     EAGAIN +#define ENOMSG          42 +#define EIDRM           43 +#define ECHRNG          44 +#define EL2NSYNC        45 +#define EL3HLT          46 +#define EL3RST          47 +#define ELNRNG          48 +#define EUNATCH         49 +#define ENOCSI          50 +#define EL2HLT          51 +#define EBADE           52 +#define EBADR           53 +#define EXFULL          54 +#define ENOANO          55 +#define EBADRQC         56 +#define EBADSLT         57 +#define EDEADLOCK       EDEADLK +#define EBFONT          59 +#define ENOSTR          60 +#define ENODATA         61 +#define ETIME           62 +#define ENOSR           63 +#define ENONET          64 +#define ENOPKG          65 +#define EREMOTE         66 +#define ENOLINK         67 +#define EADV            68 +#define ESRMNT          69 +#define ECOMM           70 +#define EPROTO          71 +#define EMULTIHOP       72 +#define EDOTDOT         73 +#define EBADMSG         74 +#define EOVERFLOW       75 +#define ENOTUNIQ        76 +#define EBADFD          77 +#define EREMCHG         78 +#define ELIBACC         79 +#define ELIBBAD         80 +#define ELIBSCN         81 +#define ELIBMAX         82 +#define ELIBEXEC        83 +#define EILSEQ          84 +#define ERESTART        85 +#define ESTRPIPE        86 +#define EUSERS          87 +#define ENOTSOCK        88 +#define EDESTADDRREQ    89 +#define EMSGSIZE        90 +#define EPROTOTYPE      91 +#define ENOPROTOOPT     92 +#define EPROTONOSUPPORT 93 +#define ESOCKTNOSUPPORT 94 +#define EOPNOTSUPP      95 +#define EPFNOSUPPORT    96 +#define EAFNOSUPPORT    97 +#define EADDRINUSE      98 +#define EADDRNOTAVAIL   99 +#define ENETDOWN        100 +#define ENETUNREACH     101 +#define ENETRESET       102 +#define ECONNABORTED    103 +#define ECONNRESET      104 +#define ENOBUFS         105 +#define EISCONN         106 +#define ENOTCONN        107 +#define ESHUTDOWN       108 +#define ETOOMANYREFS    109 +#define ETIMEDOUT       110 +#define ECONNREFUSED    111 +#define EHOSTDOWN       112 +#define EHOSTUNREACH    113 +#define EALREADY        114 +#define EINPROGRESS     115 +#define ESTALE          116 +#define EUCLEAN         117 +#define ENOTNAM         118 +#define ENAVAIL         119 +#define EISNAM          120 +#define EREMOTEIO       121 +#define EDQUOT          122 +#define ENOMEDIUM       123 +#define EMEDIUMTYPE     124 +#define ECANCELED       125 +#define ENOKEY          126 +#define EKEYEXPIRED     127 +#define EKEYREVOKED     128 +#define EKEYREJECTED    129 +#define EOWNERDEAD      130 +#define ENOTRECOVERABLE 131 +#define ERFKILL         132 diff --git a/arch/x86_64/bits/fcntl.h b/arch/x86_64/bits/fcntl.h new file mode 100644 index 00000000..802c3d14 --- /dev/null +++ b/arch/x86_64/bits/fcntl.h @@ -0,0 +1,60 @@ +#define O_ACCMODE 03 +#define O_RDONLY  00 +#define O_WRONLY  01 +#define O_RDWR    02 + +#define O_CREAT        0100 +#define O_EXCL         0200 +#define O_NOCTTY       0400 +#define O_TRUNC       01000 +#define O_APPEND      02000 +#define O_NONBLOCK    04000 +#define O_SYNC       010000 +#define O_DIRECTORY 0200000 +#define O_NOFOLLOW  0400000 +#define O_CLOEXEC  02000000 + +#ifdef _GNU_SOURCE +#define O_NDELAY O_NONBLOCK +#define O_ASYNC      020000 +#define O_DIRECT     040000 +#define O_NOATIME  01000000 +#define F_DUPFD_CLOEXEC 1030 +#define FAPPENT O_APPEND +#define FFSYNC O_FSYNC +#define FASYNC O_ASYNC +#define FNONBLOCK O_NONBLOCK +#define FNDELAY O_NDELAY +#endif + +#define F_DUPFD  0 +#define F_GETFD  1 +#define F_SETFD  2 +#define F_GETFL  3 +#define F_SETFL  4 + +#define F_SETOWN 8 +#define F_GETOWN 9 + +#define F_GETLK 12 +#define F_SETLK 13 +#define F_SETLKW 14 + +#define FD_CLOEXEC 1 + +#define F_RDLCK 0 +#define F_WRLCK 1 +#define F_UNLCK 2 + +#define AT_FDCWD (-100) +#define AT_SYMLINK_NOFOLLOW 0x100 +#define AT_REMOVEDIR 0x200 +#define AT_SYMLINK_FOLLOW 0x400 +#define AT_EACCESS 0x200 + +#define POSIX_FADV_NORMAL     0 +#define POSIX_FADV_RANDOM     1 +#define POSIX_FADV_SEQUENTIAL 2 +#define POSIX_FADV_WILLNEED   3 +#define POSIX_FADV_DONTNEED   4 +#define POSIX_FADV_NOREUSE    5 diff --git a/arch/x86_64/bits/fenv.h b/arch/x86_64/bits/fenv.h new file mode 100644 index 00000000..24df0417 --- /dev/null +++ b/arch/x86_64/bits/fenv.h @@ -0,0 +1,34 @@ +#define FE_INVALID    1 +#define __FE_DENORM   2 +#define FE_DIVBYZERO  4 +#define FE_OVERFLOW   8 +#define FE_UNDERFLOW  16 +#define FE_INEXACT    32 + +#define FE_ALL_EXCEPT 63 + +#define FE_TONEAREST  0 +#define FE_DOWNWARD   0x400 +#define FE_UPWARD     0x800 +#define FE_TOWARDZERO 0xc00 + +typedef unsigned short fexcept_t; + +typedef struct { +	unsigned short __control_word; +	unsigned short __unused1; +	unsigned short __status_word; +	unsigned short __unused2; +	unsigned short __tags; +	unsigned short __unused3; +	unsigned int __eip; +	unsigned short __cs_selector; +	unsigned int __opcode:11; +	unsigned int __unused4:5; +	unsigned int __data_offset; +	unsigned short __data_selector; +	unsigned short __unused5; +	unsigned int __mxcsr; +} fenv_t; + +#define FE_DFL_ENV      ((const fenv_t *) -1) diff --git a/arch/x86_64/bits/float.h b/arch/x86_64/bits/float.h new file mode 100644 index 00000000..162b3e46 --- /dev/null +++ b/arch/x86_64/bits/float.h @@ -0,0 +1,11 @@ +#define LDBL_MIN     3.3621031431120935063e-4932L +#define LDBL_MAX     1.1897314953572317650e+4932L +#define LDBL_EPSILON 1.0842021724855044340e-19L + +#define LDBL_MANT_DIG 64 +#define LDBL_MIN_EXP (-16381) +#define LDBL_MAX_EXP 16384 + +#define LDBL_DIG 18 +#define LDBL_MIN_10_EXP (-4931) +#define LDBL_MAX_10_EXP 4932 diff --git a/arch/x86_64/bits/in.h b/arch/x86_64/bits/in.h new file mode 100644 index 00000000..b2337064 --- /dev/null +++ b/arch/x86_64/bits/in.h @@ -0,0 +1,133 @@ +#define IP_TOS             1 +#define IP_TTL             2 +#define IP_HDRINCL         3 +#define IP_OPTIONS         4 +#define IP_ROUTER_ALERT    5 +#define IP_RECVOPTS        6 +#define IP_RETOPTS         7 +//#define IP_PKTINFO         8 +#define IP_PKTOPTIONS      9 +#define IP_PMTUDISC        10 +#define IP_MTU_DISCOVER    10 +#define IP_RECVERR         11 +#define IP_RECVTTL         12 +#define IP_RECVTOS         13 +#define IP_MTU             14 +#define IP_FREEBIND        15 +#define IP_IPSEC_POLICY    16 +#define IP_XFRM_POLICY     17 +#define IP_PASSSEC         18 +#define IP_TRANSPARENT     19 +#define IP_ORIGDSTADDR     20 +#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR +#define IP_MINTTL          21 +#define IP_MULTICAST_IF    32 +#define IP_MULTICAST_TTL   33 +#define IP_MULTICAST_LOOP  34 +#define IP_ADD_MEMBERSHIP  35 +#define IP_DROP_MEMBERSHIP 36 +#define IP_UNBLOCK_SOURCE  37 +#define IP_BLOCK_SOURCE    38 +#define IP_ADD_SOURCE_MEMBERSHIP  39 +#define IP_DROP_SOURCE_MEMBERSHIP 40 +#define IP_MSFILTER        41 + +#define IP_RECVRETOPTS IP_RETOPTS + +#define IP_PMTUDISC_DONT   0 +#define IP_PMTUDISC_WANT   1 +#define IP_PMTUDISC_DO     2 +#define IP_PMTUDISC_PROBE  3 + +#define SOL_IP 0 + +#define IP_DEFAULT_MULTICAST_TTL        1 +#define IP_DEFAULT_MULTICAST_LOOP       1 +#define IP_MAX_MEMBERSHIPS              20 + +struct ip_opts +{ +	struct in_addr ip_dst; +	char ip_opts[40]; +}; + +struct ip_mreq +{ +	struct in_addr imr_multiaddr; +	struct in_addr imr_interface; +}; + +struct ip_mreqn +{ +	struct in_addr imr_multiaddr; +	struct in_addr imr_address; +	int imr_ifindex; +}; + +struct in_pktinfo +{ +	int ipi_ifindex; +	struct in_addr ipi_spec_dst; +	struct in_addr ipi_addr; +}; + +#define IPV6_ADDRFORM           1 +#define IPV6_2292PKTINFO        2 +#define IPV6_2292HOPOPTS        3 +#define IPV6_2292DSTOPTS        4 +#define IPV6_2292RTHDR          5 +#define IPV6_2292PKTOPTIONS     6 +#define IPV6_CHECKSUM           7 +#define IPV6_2292HOPLIMIT       8 +#define SCM_SRCRT               IPV6_RXSRCRT +#define IPV6_NEXTHOP            9 +#define IPV6_AUTHHDR            10 +#define IPV6_UNICAST_HOPS       16 +#define IPV6_MULTICAST_IF       17 +#define IPV6_MULTICAST_HOPS     18 +#define IPV6_MULTICAST_LOOP     19 +#define IPV6_JOIN_GROUP         20 +#define IPV6_LEAVE_GROUP        21 +#define IPV6_ROUTER_ALERT       22 +#define IPV6_MTU_DISCOVER       23 +#define IPV6_MTU                24 +#define IPV6_RECVERR            25 +#define IPV6_V6ONLY             26 +#define IPV6_JOIN_ANYCAST       27 +#define IPV6_LEAVE_ANYCAST      28 +#define IPV6_IPSEC_POLICY       34 +#define IPV6_XFRM_POLICY        35 + +#define IPV6_RECVPKTINFO        49 +#define IPV6_PKTINFO            50 +#define IPV6_RECVHOPLIMIT       51 +#define IPV6_HOPLIMIT           52 +#define IPV6_RECVHOPOPTS        53 +#define IPV6_HOPOPTS            54 +#define IPV6_RTHDRDSTOPTS       55 +#define IPV6_RECVRTHDR          56 +#define IPV6_RTHDR              57 +#define IPV6_RECVDSTOPTS        58 +#define IPV6_DSTOPTS            59 + +#define IPV6_RECVTCLASS         66 +#define IPV6_TCLASS             67 + +#define IPV6_ADD_MEMBERSHIP     IPV6_JOIN_GROUP +#define IPV6_DROP_MEMBERSHIP    IPV6_LEAVE_GROUP +#define IPV6_RXHOPOPTS          IPV6_HOPOPTS +#define IPV6_RXDSTOPTS          IPV6_DSTOPTS + + +#define IPV6_PMTUDISC_DONT      0 +#define IPV6_PMTUDISC_WANT      1 +#define IPV6_PMTUDISC_DO        2 +#define IPV6_PMTUDISC_PROBE     3 + +#define SOL_IPV6        41 +#define SOL_ICMPV6      58 + +#define IPV6_RTHDR_LOOSE        0 +#define IPV6_RTHDR_STRICT       1 + +#define IPV6_RTHDR_TYPE_0       0 diff --git a/arch/x86_64/bits/ioctl.h b/arch/x86_64/bits/ioctl.h new file mode 100644 index 00000000..7f3c0380 --- /dev/null +++ b/arch/x86_64/bits/ioctl.h @@ -0,0 +1,197 @@ +#define _IOC(a,b,c,d) ( ((a)<<30) | ((b)<<8) | (c) | ((d)<<16) ) +#define _IOC_NONE  0U +#define _IOC_WRITE 1U +#define _IOC_READ  2U + +#define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0) +#define _IOW(a,b,c) _IOC(1,(a),(b),sizeof(c)) +#define _IOR(a,b,c) _IOC(2,(a),(b),sizeof(c)) +#define _IOWR(a,b,c) _IOC(3,(a),(b),sizeof(c)) + +#define TCGETS		0x5401 +#define TCSETS		0x5402 +#define TCSETSW		0x5403 +#define TCSETSF		0x5404 +#define TCGETA		0x5405 +#define TCSETA		0x5406 +#define TCSETAW		0x5407 +#define TCSETAF		0x5408 +#define TCSBRK		0x5409 +#define TCXONC		0x540A +#define TCFLSH		0x540B +#define TIOCEXCL	0x540C +#define TIOCNXCL	0x540D +#define TIOCSCTTY	0x540E +#define TIOCGPGRP	0x540F +#define TIOCSPGRP	0x5410 +#define TIOCOUTQ	0x5411 +#define TIOCSTI		0x5412 +#define TIOCGWINSZ	0x5413 +#define TIOCSWINSZ	0x5414 +#define TIOCMGET	0x5415 +#define TIOCMBIS	0x5416 +#define TIOCMBIC	0x5417 +#define TIOCMSET	0x5418 +#define TIOCGSOFTCAR	0x5419 +#define TIOCSSOFTCAR	0x541A +#define FIONREAD	0x541B +#define TIOCINQ		FIONREAD +#define TIOCLINUX	0x541C +#define TIOCCONS	0x541D +#define TIOCGSERIAL	0x541E +#define TIOCSSERIAL	0x541F +#define TIOCPKT		0x5420 +#define FIONBIO		0x5421 +#define TIOCNOTTY	0x5422 +#define TIOCSETD	0x5423 +#define TIOCGETD	0x5424 +#define TCSBRKP		0x5425 +#define TIOCTTYGSTRUCT	0x5426 +#define TIOCSBRK	0x5427 +#define TIOCCBRK	0x5428 +#define TIOCGSID	0x5429 +#define TIOCGPTN	0x80045430 +#define TIOCSPTLCK	0x40045431 +#define TCGETX          0x5432 +#define TCSETX          0x5433 +#define TCSETXF         0x5434 +#define TCSETXW         0x5435 + +#define FIONCLEX	0x5450 +#define FIOCLEX		0x5451 +#define FIOASYNC	0x5452 +#define TIOCSERCONFIG	0x5453 +#define TIOCSERGWILD	0x5454 +#define TIOCSERSWILD	0x5455 +#define TIOCGLCKTRMIOS	0x5456 +#define TIOCSLCKTRMIOS	0x5457 +#define TIOCSERGSTRUCT	0x5458 +#define TIOCSERGETLSR   0x5459 +#define TIOCSERGETMULTI 0x545A +#define TIOCSERSETMULTI 0x545B + +#define TIOCMIWAIT	0x545C +#define TIOCGICOUNT	0x545D +#define TIOCGHAYESESP   0x545E +#define TIOCSHAYESESP   0x545F +#define FIOQSIZE	0x5460 + +#define TIOCPKT_DATA		 0 +#define TIOCPKT_FLUSHREAD	 1 +#define TIOCPKT_FLUSHWRITE	 2 +#define TIOCPKT_STOP		 4 +#define TIOCPKT_START		 8 +#define TIOCPKT_NOSTOP		16 +#define TIOCPKT_DOSTOP		32 +#define TIOCPKT_IOCTL           64 + +#define TIOCSER_TEMT    0x01 + +struct winsize { +	unsigned short ws_row; +	unsigned short ws_col; +	unsigned short ws_xpixel; +	unsigned short ws_ypixel; +}; + +#define TIOCM_LE        0x001 +#define TIOCM_DTR       0x002 +#define TIOCM_RTS       0x004 +#define TIOCM_ST        0x008 +#define TIOCM_SR        0x010 +#define TIOCM_CTS       0x020 +#define TIOCM_CAR       0x040 +#define TIOCM_RNG       0x080 +#define TIOCM_DSR       0x100 +#define TIOCM_CD        TIOCM_CAR +#define TIOCM_RI        TIOCM_RNG +#define TIOCM_OUT1      0x2000 +#define TIOCM_OUT2      0x4000 +#define TIOCM_LOOP      0x8000 +#define TIOCM_MODEM_BITS TIOCM_OUT2 + +#define N_TTY           0 +#define N_SLIP          1 +#define N_MOUSE         2 +#define N_PPP           3 +#define N_STRIP         4 +#define N_AX25          5 +#define N_X25           6 +#define N_6PACK         7 +#define N_MASC          8 +#define N_R3964         9 +#define N_PROFIBUS_FDL  10 +#define N_IRDA          11 +#define N_SMSBLOCK      12 +#define N_HDLC          13 +#define N_SYNC_PPP      14 +#define N_HCI           15 + +#define FIOSETOWN       0x8901 +#define SIOCSPGRP       0x8902 +#define FIOGETOWN       0x8903 +#define SIOCGPGRP       0x8904 +#define SIOCATMARK      0x8905 +#define SIOCGSTAMP      0x8906 + +#define SIOCADDRT       0x890B +#define SIOCDELRT       0x890C +#define SIOCRTMSG       0x890D + +#define SIOCGIFNAME     0x8910 +#define SIOCSIFLINK     0x8911 +#define SIOCGIFCONF     0x8912 +#define SIOCGIFFLAGS    0x8913 +#define SIOCSIFFLAGS    0x8914 +#define SIOCGIFADDR     0x8915 +#define SIOCSIFADDR     0x8916 +#define SIOCGIFDSTADDR  0x8917 +#define SIOCSIFDSTADDR  0x8918 +#define SIOCGIFBRDADDR  0x8919 +#define SIOCSIFBRDADDR  0x891a +#define SIOCGIFNETMASK  0x891b +#define SIOCSIFNETMASK  0x891c +#define SIOCGIFMETRIC   0x891d +#define SIOCSIFMETRIC   0x891e +#define SIOCGIFMEM      0x891f +#define SIOCSIFMEM      0x8920 +#define SIOCGIFMTU      0x8921 +#define SIOCSIFMTU      0x8922 +#define SIOCSIFHWADDR   0x8924 +#define SIOCGIFENCAP    0x8925 +#define SIOCSIFENCAP    0x8926 +#define SIOCGIFHWADDR   0x8927 +#define SIOCGIFSLAVE    0x8929 +#define SIOCSIFSLAVE    0x8930 +#define SIOCADDMULTI    0x8931 +#define SIOCDELMULTI    0x8932 +#define SIOCGIFINDEX    0x8933 +#define SIOGIFINDEX     SIOCGIFINDEX +#define SIOCSIFPFLAGS   0x8934 +#define SIOCGIFPFLAGS   0x8935 +#define SIOCDIFADDR     0x8936 +#define SIOCSIFHWBROADCAST 0x8937 +#define SIOCGIFCOUNT    0x8938 + +#define SIOCGIFBR       0x8940 +#define SIOCSIFBR       0x8941 + +#define SIOCGIFTXQLEN   0x8942 +#define SIOCSIFTXQLEN   0x8943 + +#define SIOCDARP        0x8953 +#define SIOCGARP        0x8954 +#define SIOCSARP        0x8955 + +#define SIOCDRARP       0x8960 +#define SIOCGRARP       0x8961 +#define SIOCSRARP       0x8962 + +#define SIOCGIFMAP      0x8970 +#define SIOCSIFMAP      0x8971 + +#define SIOCADDDLCI     0x8980 +#define SIOCDELDLCI     0x8981 + +#define SIOCDEVPRIVATE  0x89F0 +#define SIOCPROTOPRIVATE 0x89E0 diff --git a/arch/x86_64/bits/ipc.h b/arch/x86_64/bits/ipc.h new file mode 100644 index 00000000..04fbefe1 --- /dev/null +++ b/arch/x86_64/bits/ipc.h @@ -0,0 +1,25 @@ +#define IPC_CREAT  01000 +#define IPC_EXCL   02000 +#define IPC_NOWAIT 04000 + +#define IPC_RMID 0 +#define IPC_SET  1 +#define IPC_STAT 2 +#ifdef _GNU_SOURCE +# define IPC_INFO       3               /* See ipcs.  */ +#endif + +#define IPC_PRIVATE ((key_t) 0) + +struct ipc_perm +{ +	key_t key; +	uid_t uid; +	gid_t gid; +	uid_t cuid; +	gid_t cgid; +	mode_t mode; +	int seq; +	long __pad1; +	long __pad2; +}; diff --git a/arch/x86_64/bits/limits.h b/arch/x86_64/bits/limits.h new file mode 100644 index 00000000..fadaf849 --- /dev/null +++ b/arch/x86_64/bits/limits.h @@ -0,0 +1,32 @@ +#define PIPE_BUF 4096 +#define PAGESIZE 4096 +#define PAGE_SIZE PAGESIZE +#define FILESIZEBITS 64 +#define NAME_MAX 255 +#define SYMLINK_MAX 255 +#define PATH_MAX 4096 +#define NZERO 20 +#define NGROUPS_MAX 32 +#define ARG_MAX 131072 +#define IOV_MAX 1024 +#define SYMLOOP_MAX 40 + +#define WORD_BIT 64 +#define LONG_BIT 64 + +#define SHRT_MIN  (-1-0x7fff) +#define SHRT_MAX  0x7fff +#define USHRT_MAX 0xffff + +#define INT_MIN  (-1-0x7fffffff) +#define INT_MAX  0x7fffffff +#define UINT_MAX 0xffffffff + +#define LONG_MIN  (-1-0x7fffffffffffffffL) +#define LONG_MAX  0x7fffffffffffffffL +#define ULONG_MAX 0xffffffffffffffffL + +#define LLONG_MIN  (-1-0x7fffffffffffffffLL) +#define LLONG_MAX  0x7fffffffffffffffLL +#define ULLONG_MAX 0xffffffffffffffffULL + diff --git a/arch/x86_64/bits/mman.h b/arch/x86_64/bits/mman.h new file mode 100644 index 00000000..cd6cb845 --- /dev/null +++ b/arch/x86_64/bits/mman.h @@ -0,0 +1,50 @@ +#define MAP_FAILED ((void *) -1) + +#define	PROT_NONE      0 +#define	PROT_READ      1 +#define	PROT_WRITE     2 +#define	PROT_EXEC      4 +#define PROT_GROWSDOWN  0x01000000 +#define PROT_GROWSUP    0x02000000 + +#define	MAP_SHARED     0x01 +#define	MAP_PRIVATE    0x02 +#define	MAP_FIXED      0x10 + +/* linux extensions */ +#define MAP_TYPE       0x0f +#define MAP_FILE       0x00 +#define MAP_ANON       0x20 +#define MAP_ANONYMOUS  MAP_ANON +#define MAP_32BIT      0x40 + +#define MADV_NORMAL      0 +#define MADV_RANDOM      1 +#define MADV_SEQUENTIAL  2 +#define MADV_WILLNEED    3 +#define MADV_DONTNEED    4 +#define MADV_REMOVE      9 +#define MADV_DONTFORK    10 +#define MADV_DOFORK      11 +#define MADV_MERGEABLE   12 +#define MADV_UNMERGEABLE 13 +#define MADV_HUGEPAGE    14 +#define MADV_NOHUGEPAGE  15 +#define MADV_HWPOISON    100 + +#define POSIX_MADV_NORMAL       0 +#define POSIX_MADV_RANDOM       1 +#define POSIX_MADV_SEQUENTIAL   2 +#define POSIX_MADV_WILLNEED     3 +#define POSIX_MADV_DONTNEED     0 + +#define MS_ASYNC        1 +#define MS_INVALIDATE   2 +#define MS_SYNC         4 + +#define MCL_CURRENT     1 +#define MCL_FUTURE      2 + +/* linux extensions */ +#define MREMAP_MAYMOVE  1 +#define MREMAP_FIXED    2 diff --git a/arch/x86_64/bits/posix.h b/arch/x86_64/bits/posix.h new file mode 100644 index 00000000..30a38714 --- /dev/null +++ b/arch/x86_64/bits/posix.h @@ -0,0 +1,2 @@ +#define _POSIX_V6_ILP32_OFFBIG  1 +#define _POSIX_V7_ILP32_OFFBIG  1 diff --git a/arch/x86_64/bits/pthread.h b/arch/x86_64/bits/pthread.h new file mode 100644 index 00000000..7d19065d --- /dev/null +++ b/arch/x86_64/bits/pthread.h @@ -0,0 +1,6 @@ +struct __ptcb { +	long __jb[7]; +	int __dummy; +	struct __ptcb *__next; +	void *__ptrs[3]; +}; diff --git a/arch/x86_64/bits/reg.h b/arch/x86_64/bits/reg.h new file mode 100644 index 00000000..a4df04ce --- /dev/null +++ b/arch/x86_64/bits/reg.h @@ -0,0 +1,29 @@ +#undef __WORDSIZE +#define __WORDSIZE 64 +#define R15    0 +#define R14    1 +#define R13    2 +#define R12    3 +#define RBP    4 +#define RBX    5 +#define R11    6 +#define R10    7 +#define R9     8 +#define R8     9 +#define RAX    10 +#define RCX    11 +#define RDX    12 +#define RSI    13 +#define RDI    14 +#define ORIG_RAX 15 +#define RIP    16 +#define CS     17 +#define EFLAGS 18 +#define RSP    19 +#define SS     20 +#define FS_BASE 21 +#define GS_BASE 22 +#define DS     23 +#define ES     24 +#define FS     25 +#define GS     26 diff --git a/arch/x86_64/bits/setjmp.h b/arch/x86_64/bits/setjmp.h new file mode 100644 index 00000000..c5b9e4af --- /dev/null +++ b/arch/x86_64/bits/setjmp.h @@ -0,0 +1 @@ +typedef unsigned long jmp_buf [9]; diff --git a/arch/x86_64/bits/shm.h b/arch/x86_64/bits/shm.h new file mode 100644 index 00000000..bc95a1ca --- /dev/null +++ b/arch/x86_64/bits/shm.h @@ -0,0 +1,24 @@ +#define SHMLBA 4096 + +#define SHM_RDONLY 010000 +#define SHM_RND    020000 +#define SHM_REMAP  040000 +#define SHM_EXEC   0100000 + +/* linux extensions */ +#define SHM_LOCK        11 +#define SHM_UNLOCK      12 + +struct shmid_ds +{ +	struct ipc_perm shm_perm; +	size_t shm_segsz; +	time_t shm_atime; +	time_t shm_dtime; +	time_t shm_ctime; +	pid_t shm_cpid; +	pid_t shm_lpid; +	unsigned long shm_nattch; +	unsigned long __pad1; +	unsigned long __pad2; +}; diff --git a/arch/x86_64/bits/signal.h b/arch/x86_64/bits/signal.h new file mode 100644 index 00000000..02c54d5a --- /dev/null +++ b/arch/x86_64/bits/signal.h @@ -0,0 +1,107 @@ +struct __siginfo +{ +	int si_signo; +	int si_errno; +	int si_code; +	union +	{ +		int __pad[(128 - 4*sizeof(int)) / sizeof(int)]; +		struct { +			pid_t si_pid; +			uid_t si_uid; +		} __kill; +		struct { +			timer_t si_timerid; +			int si_overrun; +			char __pad[sizeof(uid_t) - sizeof(int)]; +			union sigval si_sigval; +			int si_private; +		} __timer; +		struct { +			pid_t si_pid; +			uid_t si_uid; +			union sigval si_sigval; +		} __rt; +		struct { +			pid_t si_pid; +			uid_t si_uid; +			int si_status; +			clock_t si_utime; +			clock_t si_stime; +		} __sigchld; +		struct { +			void *si_addr; +			short addr_lsb; +		} __sigfault; +		struct { +			long si_band; +			int si_fd; +		} __sigpoll; +	} __si_fields; +}; + +#define si_pid     __si_fields.__sigchld.si_pid +#define si_uid     __si_fields.__sigchld.si_uid +#define si_status  __si_fields.__sigchld.si_status +#define si_utime   __si_fields.__sigchld.si_utime +#define si_stime   __si_fields.__sigchld.si_stime +#define si_value   __si_fields.__rt.si_sigval +#define si_addr    __si_fields.__sigfault.si_addr +#define si_band    __si_fields.__sigpoll.si_band + +#define SA_NOCLDSTOP  1 +#define SA_NOCLDWAIT  2 +#define SA_SIGINFO    4 +#define SA_ONSTACK    0x08000000 +#define SA_RESTART    0x10000000 +#define SA_NODEFER    0x40000000 +#define SA_RESETHAND  0x80000000 +#define SA_RESTORER   0x04000000 + +#define SS_ONSTACK    1 +#define SS_DISABLE    2 + +#define SIG_BLOCK     0 +#define SIG_UNBLOCK   1 +#define SIG_SETMASK   2 + +#define SIG_ERR  ((void (*)(int))-1) +#define SIG_DFL  ((void (*)(int)) 0) +#define SIG_IGN  ((void (*)(int)) 1) +#define SIG_HOLD ((void (*)(int)) 2) + +#define NSIG      64 + +#define SIGHUP    1 +#define SIGINT    2 +#define SIGQUIT   3 +#define SIGILL    4 +#define SIGTRAP   5 +#define SIGABRT   6 +#define SIGBUS    7 +#define SIGFPE    8 +#define SIGKILL   9 +#define SIGUSR1   10 +#define SIGSEGV   11 +#define SIGUSR2   12 +#define SIGPIPE   13 +#define SIGALRM   14 +#define SIGTERM   15 +#define SIGSTKFLT 16 +#define SIGCHLD   17 +#define SIGCONT   18 +#define SIGSTOP   19 +#define SIGTSTP   20 +#define SIGTTIN   21 +#define SIGTTOU   22 +#define SIGURG    23 +#define SIGXCPU   24 +#define SIGXFSZ   25 +#define SIGVTALRM 26 +#define SIGPROF   27 +#define SIGWINCH  28 +#define SIGIO     29 +#define SIGPOLL   29 +#define SIGPWR    30 +#define SIGSYS    31 +#define SIGUNUSED SIGSYS diff --git a/arch/x86_64/bits/socket.h b/arch/x86_64/bits/socket.h new file mode 100644 index 00000000..cec01729 --- /dev/null +++ b/arch/x86_64/bits/socket.h @@ -0,0 +1,212 @@ +struct iovec; + +struct msghdr +{ +	void *msg_name; +	socklen_t msg_namelen; +	struct iovec *msg_iov; +	int msg_iovlen; +	void *msg_control; +	socklen_t msg_controllen; +	int msg_flags; +}; + +struct cmsghdr +{ +	socklen_t cmsg_len; +	int cmsg_level; +	int cmsg_type; +}; + +struct ucred +{ +	pid_t pid; +	uid_t uid; +	gid_t gid; +}; + +struct linger +{ +	int l_onoff; +	int l_linger; +}; + +#define SHUT_RD 0 +#define SHUT_WD 1 +#define SHUT_RDWR 2 + +#define SOCK_STREAM    1 +#define SOCK_DGRAM     2 +#define SOCK_RAW       3 +#define SOCK_RDM       4 +#define SOCK_SEQPACKET 5 +#define SOCK_DCCP      6 +#define SOCK_PACKET    10 + +/* linux extensions */ +#define SOCK_CLOEXEC   02000000 +#define SOCK_NONBLOCK  04000 + +#define PF_UNSPEC       0 +#define PF_LOCAL        1 +#define PF_UNIX         PF_LOCAL +#define PF_FILE         PF_LOCAL +#define PF_INET         2 +#define PF_AX25         3 +#define PF_IPX          4 +#define PF_APPLETALK    5 +#define PF_NETROM       6 +#define PF_BRIDGE       7 +#define PF_ATMPVC       8 +#define PF_X25          9 +#define PF_INET6        10 +#define PF_ROSE         11 +#define PF_DECnet       12 +#define PF_NETBEUI      13 +#define PF_SECURITY     14 +#define PF_KEY          15 +#define PF_NETLINK      16 +#define PF_ROUTE        PF_NETLINK +#define PF_PACKET       17 +#define PF_ASH          18 +#define PF_ECONET       19 +#define PF_ATMSVC       20 +#define PF_SNA          22 +#define PF_IRDA         23 +#define PF_PPPOX        24 +#define PF_WANPIPE      25 +#define PF_BLUETOOTH    31 +#define PF_IUCV         32 +#define PF_RXRPC        33 +#define PF_ISDN         34 +#define PF_PHONET       35 +#define PF_IEEE802154   36 +#define PF_CAIF         37 +#define PF_ALG          38 +#define PF_MAX          39 + +#define AF_UNSPEC       PF_UNSPEC +#define AF_LOCAL        PF_LOCAL +#define AF_UNIX         AF_LOCAL +#define AF_FILE         AF_LOCAL +#define AF_INET         PF_INET +#define AF_AX25         PF_AX25 +#define AF_IPX          PF_IPX +#define AF_APPLETALK    PF_APPLETALK +#define AF_NETROM       PF_NETROM +#define AF_BRIDGE       PF_BRIDGE +#define AF_ATMPVC       PF_ATMPVC +#define AF_X25          PF_X25 +#define AF_INET6        PF_INET6 +#define AF_ROSE         PF_ROSE +#define AF_DECnet       PF_DECnet +#define AF_NETBEUI      PF_NETBEUI +#define AF_SECURITY     PF_SECURITY +#define AF_KEY          PF_KEY +#define AF_NETLINK      PF_NETLINK +#define AF_ROUTE        AF_NETLINK +#define AF_PACKET       PF_PACKET +#define AF_ASH          PF_ASH +#define AF_ECONET       PF_ECONET +#define AF_ATMSVC       PF_ATMSVC +#define AF_SNA          PF_SNA +#define AF_IRDA         PF_IRDA +#define AF_PPPOX        PF_PPPOX +#define AF_WANPIPE      PF_WANPIPE +#define AF_BLUETOOTH    PF_BLUETOOTH +#define AF_IUCV         PF_IUCV +#define AF_RXRPC        PF_RXRPC +#define AF_ISDN         PF_ISDN +#define AF_PHONET       PF_PHONET +#define AF_IEEE802154   PF_IEEE802154 +#define AF_CAIF         PF_CAIF +#define AF_ALG          PF_ALG +#define AF_MAX          PF_MAX + +#define SO_DEBUG        1 +#define SO_REUSEADDR    2 +#define SO_TYPE         3 +#define SO_ERROR        4 +#define SO_DONTROUTE    5 +#define SO_BROADCAST    6 +#define SO_SNDBUF       7 +#define SO_RCVBUF       8 +#define SO_KEEPALIVE    9 +#define SO_OOBINLINE    10 +#define SO_NO_CHECK     11 +#define SO_PRIORITY     12 +#define SO_LINGER       13 +#define SO_BSDCOMPAT    14 +#define SO_REUSEPORT    15 +#define SO_PASSCRED     16 +#define SO_PEERCRED     17 +#define SO_RCVLOWAT     18 +#define SO_SNDLOWAT     19 +#define SO_RCVTIMEO     20 +#define SO_SNDTIMEO     21 + +#define SO_SECURITY_AUTHENTICATION              22 +#define SO_SECURITY_ENCRYPTION_TRANSPORT        23 +#define SO_SECURITY_ENCRYPTION_NETWORK          24 + +#define SO_BINDTODEVICE 25 + +#define SO_ATTACH_FILTER        26 +#define SO_DETACH_FILTER        27 + +#define SO_PEERNAME             28 +#define SO_TIMESTAMP            29 +#define SCM_TIMESTAMP           SO_TIMESTAMP + +#define SO_ACCEPTCONN           30 + +#define SOL_SOCKET      1 + +/* ??? */ +#define SOL_RAW         255 +#define SOL_DECNET      261 +#define SOL_X25         262 +#define SOL_PACKET      263 +#define SOL_ATM         264 +#define SOL_AAL         265 +#define SOL_IRDA        266 + +#define SOMAXCONN       128 + +#define MSG_OOB       0x0001 +#define MSG_PEEK      0x0002 +#define MSG_DONTROUTE 0x0004 +#define MSG_CTRUNC    0x0008 +#define MSG_PROXY     0x0010 +#define MSG_TRUNC     0x0020 +#define MSG_DONTWAIT  0x0040 +#define MSG_EOR       0x0080 +#define MSG_WAITALL   0x0100 +#define MSG_FIN       0x0200 +#define MSD_SYN       0x0400 +#define MSG_CONFIRM   0x0800 +#define MSG_RST       0x1000 +#define MSG_ERRQUEUE  0x2000 +#define MSG_NOSIGNAL  0x4000 +#define MSG_MORE      0x8000 +#define MSG_WAITFORONE 0x10000 +#define MSG_CMSG_CLOEXEC 0x40000000 + +/* Internal use only!! to make CMSG_NXTHDR definition readable by mortals */ +#define __CMSG_LEN(cmsg) (((cmsg)->cmsg_len + sizeof(long) - 1) & ~(long)(sizeof(long) - 1)) +#define __CMSG_NEXT(cmsg) ((unsigned char *)(cmsg) + __CMSG_LEN(cmsg)) +#define __MHDR_END(mhdr) ((unsigned char *)(mhdr)->msg_control + (mhdr)->msg_controllen) + +#define CMSG_DATA(cmsg) ((unsigned char *) (((struct cmsghdr *)(cmsg)) + 1)) +#define CMSG_NXTHDR(mhdr, cmsg) ((cmsg)->cmsg_len < sizeof (struct cmsghdr) ? (struct cmsghdr *)0 : \ +        (__CMSG_NEXT(cmsg) + sizeof (struct cmsghdr) >= __MHDR_END(mhdr) ? (struct cmsghdr *)0 : \ +        ((struct cmsghdr *)__CMSG_NEXT(cmsg)))) +#define CMSG_FIRSTHDR(mhdr) ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0) + +/* Are these valid? */ +#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) +#define CMSG_SPACE(len) (CMSG_ALIGN (len) + CMSG_ALIGN (sizeof (struct cmsghdr))) +#define CMSG_LEN(len)   (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) + +#define SCM_RIGHTS      0x01 +#define SCM_CREDENTIALS 0x02 diff --git a/arch/x86_64/bits/stat.h b/arch/x86_64/bits/stat.h new file mode 100644 index 00000000..84a4179a --- /dev/null +++ b/arch/x86_64/bits/stat.h @@ -0,0 +1,25 @@ +/* copied from kernel definition, but with padding replaced + * by the corresponding correctly-sized userspace types. */ + +struct stat { +	unsigned long st_dev; +	ino_t st_ino; +	nlink_t st_nlink; + +	mode_t st_mode; +	uid_t st_uid; +	gid_t st_gid; +	unsigned int    __pad0; +	dev_t st_rdev; +	off_t st_size; +	blksize_t st_blksize; +	blkcnt_t st_blocks; + +	time_t st_atime; +	unsigned long st_atime_nsec; +	time_t st_mtime; +	unsigned long st_mtime_nsec; +	time_t st_ctime; +	unsigned long st_ctime_nsec; +	long __unused[3]; +}; diff --git a/arch/x86_64/bits/statfs.h b/arch/x86_64/bits/statfs.h new file mode 100644 index 00000000..51bf8a5b --- /dev/null +++ b/arch/x86_64/bits/statfs.h @@ -0,0 +1,15 @@ +struct statvfs { +	unsigned long f_type; +	unsigned long f_bsize; +	fsblkcnt_t f_blocks; +	fsblkcnt_t f_bfree; +	fsblkcnt_t f_bavail; +	fsfilcnt_t f_files; +	fsfilcnt_t f_ffree; +	unsigned long f_fsid; +	unsigned long f_namemax; +	unsigned long f_frsize; +	fsfilcnt_t f_favail; +	unsigned long f_flag; +	unsigned long __reserved[2]; +}; diff --git a/arch/x86_64/bits/stdarg.h b/arch/x86_64/bits/stdarg.h new file mode 100644 index 00000000..24b679c9 --- /dev/null +++ b/arch/x86_64/bits/stdarg.h @@ -0,0 +1,5 @@ +#define va_start(v,l)   __builtin_va_start(v,l) +#define va_end(v)       __builtin_va_end(v) +#define va_arg(v,l)     __builtin_va_arg(v,l) +#define va_copy(d,s)    __builtin_va_copy(d,s) +#define __va_copy(d,s)  __builtin_va_copy(d,s) diff --git a/arch/x86_64/bits/stdint.h b/arch/x86_64/bits/stdint.h new file mode 100644 index 00000000..878e4de2 --- /dev/null +++ b/arch/x86_64/bits/stdint.h @@ -0,0 +1,23 @@ +#define INT_FAST8_MIN   INT8_MIN +#define INT_FAST16_MIN  INT32_MIN +#define INT_FAST32_MIN  INT32_MIN +#define INT_FAST64_MIN  INT64_MIN + +#define INT_FAST8_MAX   INT8_MAX +#define INT_FAST16_MAX  INT32_MAX +#define INT_FAST32_MAX  INT32_MAX +#define INT_FAST64_MAX  INT64_MAX + +#define UINT_FAST8_MAX  UINT8_MAX +#define UINT_FAST16_MAX UINT32_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +#define INTPTR_MIN      INT64_MIN +#define INTPTR_MAX      INT64_MAX +#define UINTPTR_MAX     UINT64_MAX +#define PTRDIFF_MIN     INT64_MIN +#define PTRDIFF_MAX     INT64_MAX +#define SIG_ATOMIC_MIN  INT64_MIN +#define SIG_ATOMIC_MAX  INT64_MAX +#define SIZE_MAX        UINT64_MAX diff --git a/arch/x86_64/bits/stdio.h b/arch/x86_64/bits/stdio.h new file mode 100644 index 00000000..0afd8b40 --- /dev/null +++ b/arch/x86_64/bits/stdio.h @@ -0,0 +1,10 @@ +#define BUFSIZ 1024 + +#define FILENAME_MAX 4095 +#define FOPEN_MAX 1000 +#define TMP_MAX 10000 + +#define L_cuserid 20 +#define L_ctermid 20 +#define L_tmpnam 20 +#define P_tmpdir "/tmp" diff --git a/arch/x86_64/bits/sysmacros.h b/arch/x86_64/bits/sysmacros.h new file mode 100644 index 00000000..da29022d --- /dev/null +++ b/arch/x86_64/bits/sysmacros.h @@ -0,0 +1,7 @@ +#define major(x) (((x) >> 8) & 0xff) +#define minor(x) ((x) & 0xff) +#define makedev(x,y) (((x)<<8)|((y)&0xff)) + +//#define makedev(x,y) \ +//	((x)*0x100000001ULL)&(0xfffffffffff0) +//	((y)*0x1001 & 0xffff0ff) diff --git a/arch/x86_64/bits/tcp.h b/arch/x86_64/bits/tcp.h new file mode 100644 index 00000000..923231b2 --- /dev/null +++ b/arch/x86_64/bits/tcp.h @@ -0,0 +1 @@ +#define TCP_NODELAY 1 diff --git a/arch/x86_64/bits/termios.h b/arch/x86_64/bits/termios.h new file mode 100644 index 00000000..316baeb2 --- /dev/null +++ b/arch/x86_64/bits/termios.h @@ -0,0 +1,158 @@ +struct termios +{ +	tcflag_t c_iflag; +	tcflag_t c_oflag; +	tcflag_t c_cflag; +	tcflag_t c_lflag; +	cc_t c_line; +	cc_t c_cc[NCCS]; +	speed_t __c_ispeed; +	speed_t __c_ospeed; +}; + +#define VINTR     0 +#define VQUIT     1 +#define VERASE    2 +#define VKILL     3 +#define VEOF      4 +#define VTIME     5 +#define VMIN      6 +#define VSWTC     7 +#define VSTART    8 +#define VSTOP     9 +#define VSUSP    10 +#define VEOL     11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE  14 +#define VLNEXT   15 +#define VEOL2    16 + +#define IGNBRK  0000001 +#define BRKINT  0000002 +#define IGNPAR  0000004 +#define PARMRK  0000010 +#define INPCK   0000020 +#define ISTRIP  0000040 +#define INLCR   0000100 +#define IGNCR   0000200 +#define ICRNL   0000400 +#define IUCLC   0001000 +#define IXON    0002000 +#define IXANY   0004000 +#define IXOFF   0010000 +#define IMAXBEL 0020000 + +#define OPOST  0000001 +#define OLCUC  0000002 +#define ONLCR  0000004 +#define OCRNL  0000010 +#define ONOCR  0000020 +#define ONLRET 0000040 +#define OFILL  0000100 +#define OFDEL  0000200 +#define NLDLY  0000400 +#define NL0    0000000 +#define NL1    0000400 +#define CRDLY  0003000 +#define CR0    0000000 +#define CR1    0001000 +#define CR2    0002000 +#define CR3    0003000 +#define TABDLY 0014000 +#define TAB0   0000000 +#define TAB1   0004000 +#define TAB2   0010000 +#define TAB3   0014000 +#define BSDLY  0020000 +#define BS0    0000000 +#define BS1    0020000 +#define FFDLY  0100000 +#define FF0    0000000 +#define FF1    0100000 + +#define VTDLY  0040000 +#define VT0    0000000 +#define VT1    0040000 + +/* ?? */ +#define XTABS  0014000 + +#define B0       0000000 +#define B50      0000001 +#define B75      0000002 +#define B110     0000003 +#define B134     0000004 +#define B150     0000005 +#define B200     0000006 +#define B300     0000007 +#define B600     0000010 +#define B1200    0000011 +#define B1800    0000012 +#define B2400    0000013 +#define B4800    0000014 +#define B9600    0000015 +#define B19200   0000016 +#define B38400   0000017 + +#define B57600   0010001 +#define B115200  0010002 +#define B230400  0010003 +#define B460800  0010004 +#define B500000  0010005 +#define B576000  0010006 +#define B921600  0010007 +#define B1000000 0010010 +#define B1152000 0010011 +#define B1500000 0010012 +#define B2000000 0010013 +#define B2500000 0010014 +#define B3000000 0010015 +#define B3500000 0010016 +#define B4000000 0010017 + +#define CBAUD    0010017 + +#define CSIZE  0000060 +#define CS5    0000000 +#define CS6    0000020 +#define CS7    0000040 +#define CS8    0000060 +#define CSTOPB 0000100 +#define CREAD  0000200 +#define PARENB 0000400 +#define PARODD 0001000 +#define HUPCL  0002000 +#define CLOCAL 0004000 + +#define CRTSCTS  020000000000 + +#define ISIG   0000001 +#define ICANON 0000002 +#define ECHO   0000010 +#define ECHOE  0000020 +#define ECHOK  0000040 +#define ECHONL 0000100 +#define NOFLSH 0000200 +#define TOSTOP 0000400 +#define IEXTEN 0100000 + +/* Extensions? */ +#define ECHOCTL 0001000 +#define ECHOPRT 0002000 +#define ECHOKE 0004000 +#define FLUSHO 0010000 +#define PENDIN 0040000 + +#define TCOOFF 0 +#define TCOON  1 +#define TCIOFF 2 +#define TCION  3 + +#define TCIFLUSH  0 +#define TCOFLUSH  1 +#define TCIOFLUSH 2 + +#define TCSANOW   0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 diff --git a/arch/x86_64/bits/user.h b/arch/x86_64/bits/user.h new file mode 100644 index 00000000..13ff027b --- /dev/null +++ b/arch/x86_64/bits/user.h @@ -0,0 +1,77 @@ +#undef __WORDSIZE +#define __WORDSIZE 32 + +struct user_fpregs_struct +{ +	long int cwd; +	long int swd; +	long int twd; +	long int fip; +	long int fcs; +	long int foo; +	long int fos; +	long int st_space[20]; +}; + +struct user_fpxregs_struct +{ +	unsigned short int cwd; +	unsigned short int swd; +	unsigned short int twd; +	unsigned short int fop; +	long int fip; +	long int fcs; +	long int foo; +	long int fos; +	long int mxcsr; +	long int reserved; +	long int st_space[32]; +	long int xmm_space[32]; +	long int padding[56]; +}; + +struct user_regs_struct +{ +	long int ebx; +	long int ecx; +	long int edx; +	long int esi; +	long int edi; +	long int ebp; +	long int eax; +	long int xds; +	long int xes; +	long int xfs; +	long int xgs; +	long int orig_eax; +	long int eip; +	long int xcs; +	long int eflags; +	long int esp; +	long int xss; +}; + +struct user +{ +	struct user_regs_struct		regs; +	int				u_fpvalid; +	struct user_fpregs_struct	i387; +	unsigned long int		u_tsize; +	unsigned long int		u_dsize; +	unsigned long int		u_ssize; +	unsigned long			start_code; +	unsigned long			start_stack; +	long int			signal; +	int				reserved; +	struct user_regs_struct		*u_ar0; +	struct user_fpregs_struct	*u_fpstate; +	unsigned long int		magic; +	char				u_comm[32]; +	int				u_debugreg[8]; +}; + +#define PAGE_MASK		(~(PAGE_SIZE-1)) +#define NBPG			PAGE_SIZE +#define UPAGES			1 +#define HOST_TEXT_START_ADDR	(u.start_code) +#define HOST_STACK_END_ADDR	(u.start_stack + u.u_ssize * NBPG) diff --git a/arch/x86_64/bits/wait.h b/arch/x86_64/bits/wait.h new file mode 100644 index 00000000..ca9b57e0 --- /dev/null +++ b/arch/x86_64/bits/wait.h @@ -0,0 +1,11 @@ +#define WNOHANG    1 +#define WUNTRACED  2 + +#define WSTOPPED   2 +#define WEXITED    4 +#define WCONTINUED 8 +#define WNOWAIT    0x1000000 + +#define P_ALL  0 +#define P_PID  1 +#define P_PGID 2 diff --git a/arch/x86_64/bits/wexitstatus.h b/arch/x86_64/bits/wexitstatus.h new file mode 100644 index 00000000..34a80238 --- /dev/null +++ b/arch/x86_64/bits/wexitstatus.h @@ -0,0 +1,9 @@ +#ifndef WEXITSTATUS +#define WEXITSTATUS(s) (((s) & 0xff00) >> 8) +#define WTERMSIG(s) ((s) & 0x7f) +#define WSTOPSIG(s) WEXITSTATUS(s) +#define WCOREDUMP(s) ((s) & 0x80) +#define WIFEXITED(s) (!WTERMSIG(s)) +#define WIFSTOPPED(s) (((s) & 0xff) == 0x7f) +#define WIFSIGNALED(s) (!WIFSTOPPED(s) && !WIFEXITED(s)) +#endif diff --git a/arch/x86_64/pthread_arch.h b/arch/x86_64/pthread_arch.h new file mode 100644 index 00000000..40d26797 --- /dev/null +++ b/arch/x86_64/pthread_arch.h @@ -0,0 +1,6 @@ +static inline struct pthread *__pthread_self() +{ +	struct pthread *self; +	__asm__ ("movq %%fs:0,%0" : "=r" (self) ); +	return self; +} diff --git a/arch/x86_64/syscall.h b/arch/x86_64/syscall.h new file mode 100644 index 00000000..274fcd72 --- /dev/null +++ b/arch/x86_64/syscall.h @@ -0,0 +1,438 @@ +#ifndef _SYSCALL_H +#define _SYSCALL_H + +#define SYSCALL_LL(x) x, 0 +#define SYSCALL_SIGSET_SIZE 8 + +#if defined(SYSCALL_STANDALONE) +#include <errno.h> +static inline long __syscall_ret(unsigned long r) +{ +	if (r >= (unsigned long)-1 - 4096) { +		errno = -(long)r; +		return -1; +	} +	return (long)r; +} +#elif defined(SYSCALL_NORETURN) +static inline long __syscall_ret(unsigned long r) +{ +	for(;;); +	return 0; +} +#elif defined(SYSCALL_RETURN_ERRNO) +static inline long __syscall_ret(unsigned long r) +{ +	return -r; +} +#else +extern long __syscall_ret(unsigned long); +#endif + +// 64: di,  si,  dx,  r10, r8,  r9 +// 32: ebx, ecx, edx, esi, edi, ebp + +#define SYSCALL "syscall" + +static inline long syscall0(long n) +{ +	unsigned long ret; +	__asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n) : "rcx", "r11", "memory"); +	return __syscall_ret(ret); +} + +static inline long syscall1(long n, long a1) +{ +	unsigned long ret; +	__asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), "D"(a1) : "rcx", "r11", "memory"); +	return __syscall_ret(ret); +} + +static inline long syscall2(long n, long a1, long a2) +{ +	unsigned long ret; +	__asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), "D"(a1), "S"(a2) +						  : "rcx", "r11", "memory"); +	return __syscall_ret(ret); +} + +static inline long syscall3(long n, long a1, long a2, long a3) +{ +	unsigned long ret; +	__asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), "D"(a1), "S"(a2), +						  "d"(a3) : "rcx", "r11", "memory"); +	return __syscall_ret(ret); +} + +static inline long syscall4(long n, long a1, long a2, long a3, long a4) +{ +	unsigned long ret; +	register long r10 __asm__("r10") = a4; +	__asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), "D"(a1), "S"(a2), +						  "d"(a3), "r"(r10): "rcx", "r11", "memory"); +	return __syscall_ret(ret); +} + +static inline long syscall5(long n, long a1, long a2, long a3, long a4, +							long a5) +{ +	unsigned long ret; +	register long r10 __asm__("r10") = a4; +	register long r8 __asm__("r8") = a5; +	__asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), "D"(a1), "S"(a2), +						  "d"(a3), "r"(r10), "r"(r8) : "rcx", "r11", "memory"); +	return __syscall_ret(ret); +} + +static inline long syscall6(long n, long a1, long a2, long a3, long a4, +							long a5, long a6) +{ +	unsigned long ret; +	register long r10 __asm__("r10") = a4; +	register long r8 __asm__("r8") = a5; +	register long r9 __asm__("r9") = a6; +	__asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), "D"(a1), "S"(a2), +						  "d"(a3), "r"(r10), "r"(r8), "r"(r9) : "rcx", "r11", "memory"); +	return __syscall_ret(ret); +} + +#define __NR_read				0 +#define __NR_write				1 +#define __NR_open				2 +#define __NR_close				3 +#define __NR_stat				4 +#define __NR_fstat				5 +#define __NR_lstat				6 +#define __NR_poll				7 +#define __NR_lseek				8 +#define __NR_mmap				9 +#define __NR_mprotect			10 +#define __NR_munmap				11 +#define __NR_brk				12 +#define __NR_rt_sigaction		13 +#define __NR_rt_sigprocmask		14 +#define __NR_rt_sigreturn		15 +#define __NR_ioctl				16 +#define __NR_pread64			17 +#define __NR_pwrite64			18 +#define __NR_readv				19 +#define __NR_writev				20 +#define __NR_access				21 +#define __NR_pipe				22 +#define __NR_select				23 +#define __NR_sched_yield		24 +#define __NR_mremap				25 +#define __NR_msync				26 +#define __NR_mincore			27 +#define __NR_madvise			28 +#define __NR_shmget				29 +#define __NR_shmat				30 +#define __NR_shmctl				31 +#define __NR_dup				32 +#define __NR_dup2				33 +#define __NR_pause				34 +#define __NR_nanosleep			35 +#define __NR_getitimer			36 +#define __NR_alarm				37 +#define __NR_setitimer			38 +#define __NR_getpid				39 +#define __NR_sendfile			40 +#define __NR_socket				41 +#define __NR_connect			42 +#define __NR_accept				43 +#define __NR_sendto				44 +#define __NR_recvfrom			45 +#define __NR_sendmsg			46 +#define __NR_recvmsg			47 +#define __NR_shutdown			48 +#define __NR_bind				49 +#define __NR_listen				50 +#define __NR_getsockname		51 +#define __NR_getpeername		52 +#define __NR_socketpair			53 +#define __NR_setsockopt			54 +#define __NR_getsockopt			55 +#define __NR_clone				56 +#define __NR_fork				57 +#define __NR_vfork				58 +#define __NR_execve				59 +#define __NR_exit				60 +#define __NR_wait4				61 +#define __NR_kill				62 +#define __NR_uname				63 +#define __NR_semget				64 +#define __NR_semop				65 +#define __NR_semctl				66 +#define __NR_shmdt				67 +#define __NR_msgget				68 +#define __NR_msgsnd				69 +#define __NR_msgrcv				70 +#define __NR_msgctl				71 +#define __NR_fcntl				72 +#define __NR_flock				73 +#define __NR_fsync				74 +#define __NR_fdatasync			75 +#define __NR_truncate			76 +#define __NR_ftruncate			77 +#define __NR_getdents			78 +#define __NR_getcwd				79 +#define __NR_chdir				80 +#define __NR_fchdir				81 +#define __NR_rename				82 +#define __NR_mkdir				83 +#define __NR_rmdir				84 +#define __NR_creat				85 +#define __NR_link				86 +#define __NR_unlink				87 +#define __NR_symlink			88 +#define __NR_readlink			89 +#define __NR_chmod				90 +#define __NR_fchmod				91 +#define __NR_chown				92 +#define __NR_fchown				93 +#define __NR_lchown				94 +#define __NR_umask				95 +#define __NR_gettimeofday		96 +#define __NR_getrlimit			97 +#define __NR_getrusage			98 +#define __NR_sysinfo			99 +#define __NR_times				100 +#define __NR_ptrace				101 +#define __NR_getuid				102 +#define __NR_syslog				103 +#define __NR_getgid				104 +#define __NR_setuid				105 +#define __NR_setgid				106 +#define __NR_geteuid			107 +#define __NR_getegid			108 +#define __NR_setpgid			109 +#define __NR_getppid			110 +#define __NR_getpgrp			111 +#define __NR_setsid				112 +#define __NR_setreuid			113 +#define __NR_setregid			114 +#define __NR_getgroups			115 +#define __NR_setgroups			116 +#define __NR_setresuid			117 +#define __NR_getresuid			118 +#define __NR_setresgid			119 +#define __NR_getresgid			120 +#define __NR_getpgid			121 +#define __NR_setfsuid			122 +#define __NR_setfsgid			123 +#define __NR_getsid				124 +#define __NR_capget				125 +#define __NR_capset				126 +#define __NR_rt_sigpending		127 +#define __NR_rt_sigtimedwait	128 +#define __NR_rt_sigqueueinfo	129 +#define __NR_rt_sigsuspend		130 +#define __NR_sigaltstack		131 +#define __NR_utime				132 +#define __NR_mknod				133 +#define __NR_uselib				134 +#define __NR_personality		135 +#define __NR_ustat				136 +#define __NR_statfs				137 +#define __NR_fstatfs			138 +#define __NR_sysfs				139 +#define __NR_getpriority			140 +#define __NR_setpriority			141 +#define __NR_sched_setparam			142 +#define __NR_sched_getparam			143 +#define __NR_sched_setscheduler		144 +#define __NR_sched_getscheduler		145 +#define __NR_sched_get_priority_max	146 +#define __NR_sched_get_priority_min	147 +#define __NR_sched_rr_get_interval	148 +#define __NR_mlock					149 +#define __NR_munlock				150 +#define __NR_mlockall				151 +#define __NR_munlockall				152 +#define __NR_vhangup				153 +#define __NR_modify_ldt				154 +#define __NR_pivot_root				155 +#define __NR__sysctl				156 +#define __NR_prctl					157 +#define __NR_arch_prctl				158 +#define __NR_adjtimex				159 +#define __NR_setrlimit				160 +#define __NR_chroot					161 +#define __NR_sync					162 +#define __NR_acct					163 +#define __NR_settimeofday			164 +#define __NR_mount					165 +#define __NR_umount2				166 +#define __NR_swapon					167 +#define __NR_swapoff				168 +#define __NR_reboot					169 +#define __NR_sethostname			170 +#define __NR_setdomainname			171 +#define __NR_iopl					172 +#define __NR_ioperm					173 +#define __NR_create_module			174 +#define __NR_init_module			175 +#define __NR_delete_module			176 +#define __NR_get_kernel_syms		177 +#define __NR_query_module			178 +#define __NR_quotactl				179 +#define __NR_nfsservctl				180 +#define __NR_getpmsg				181 +#define __NR_putpmsg				182 +#define __NR_afs_syscall			183 +#define __NR_tuxcall				184 +#define __NR_security				185 +#define __NR_gettid					186 +#define __NR_readahead				187 +#define __NR_setxattr				188 +#define __NR_lsetxattr				189 +#define __NR_fsetxattr				190 +#define __NR_getxattr				191 +#define __NR_lgetxattr				192 +#define __NR_fgetxattr				193 +#define __NR_listxattr				194 +#define __NR_llistxattr				195 +#define __NR_flistxattr				196 +#define __NR_removexattr			197 +#define __NR_lremovexattr			198 +#define __NR_fremovexattr			199 +#define __NR_tkill					200 +#define __NR_time					201 +#define __NR_futex					202 +#define __NR_sched_setaffinity		203 +#define __NR_sched_getaffinity		204 +#define __NR_set_thread_area		205 +#define __NR_io_setup				206 +#define __NR_io_destroy				207 +#define __NR_io_getevents			208 +#define __NR_io_submit				209 +#define __NR_io_cancel				210 +#define __NR_get_thread_area		211 +#define __NR_lookup_dcookie			212 +#define __NR_epoll_create			213 +#define __NR_epoll_ctl_old			214 +#define __NR_epoll_wait_old			215 +#define __NR_remap_file_pages		216 +#define __NR_getdents64				217 +#define __NR_set_tid_address		218 +#define __NR_restart_syscall		219 +#define __NR_semtimedop				220 +#define __NR_fadvise64				221 +#define __NR_timer_create			222 +#define __NR_timer_settime			223 +#define __NR_timer_gettime			224 +#define __NR_timer_getoverrun		225 +#define __NR_timer_delete			226 +#define __NR_clock_settime			227 +#define __NR_clock_gettime			228 +#define __NR_clock_getres			229 +#define __NR_clock_nanosleep		230 +#define __NR_exit_group				231 +#define __NR_epoll_wait				232 +#define __NR_epoll_ctl				233 +#define __NR_tgkill					234 +#define __NR_utimes					235 +#define __NR_vserver				236 +#define __NR_mbind					237 +#define __NR_set_mempolicy			238 +#define __NR_get_mempolicy			239 +#define __NR_mq_open				240 +#define __NR_mq_unlink				241 +#define __NR_mq_timedsend			242 +#define __NR_mq_timedreceive		243 +#define __NR_mq_notify				244 +#define __NR_mq_getsetattr			245 +#define __NR_kexec_load				246 +#define __NR_waitid					247 +#define __NR_add_key				248 +#define __NR_request_key			249 +#define __NR_keyctl					250 +#define __NR_ioprio_set				251 +#define __NR_ioprio_get				252 +#define __NR_inotify_init			253 +#define __NR_inotify_add_watch		254 +#define __NR_inotify_rm_watch		255 +#define __NR_migrate_pages			256 +#define __NR_openat					257 +#define __NR_mkdirat				258 +#define __NR_mknodat				259 +#define __NR_fchownat				260 +#define __NR_futimesat				261 +#define __NR_newfstatat				262 +#define __NR_unlinkat				263 +#define __NR_renameat				264 +#define __NR_linkat					265 +#define __NR_symlinkat				266 +#define __NR_readlinkat				267 +#define __NR_fchmodat				268 +#define __NR_faccessat				269 +#define __NR_pselect6				270 +#define __NR_ppoll					271 +#define __NR_unshare				272 +#define __NR_set_robust_list		273 +#define __NR_get_robust_list		274 +#define __NR_splice					275 +#define __NR_tee					276 +#define __NR_sync_file_range		277 +#define __NR_vmsplice				278 +#define __NR_move_pages				279 +#define __NR_utimensat				280 +#define __NR_epoll_pwait			281 +#define __NR_signalfd				282 +#define __NR_timerfd_create			283 +#define __NR_eventfd				284 +#define __NR_fallocate				285 +#define __NR_timerfd_settime		286 +#define __NR_timerfd_gettime		287 +#define __NR_accept4				288 +#define __NR_signalfd4				289 +#define __NR_eventfd2				290 +#define __NR_epoll_create1			291 +#define __NR_dup3					292 +#define __NR_pipe2					293 +#define __NR_inotify_init1			294 +#define __NR_preadv					295 +#define __NR_pwritev				296 +#define __NR_rt_tgsigqueueinfo		297 +#define __NR_perf_event_open		298 +#define __NR_recvmmsg				299 +#define __NR_fanotify_init			300 +#define __NR_fanotify_mark			301 +#define __NR_prlimit64				302 + +#undef __NR_fstatat +#undef __NR_pread +#undef __NR_pwrite +#define __NR_fstatat __NR_newfstatat +#define __NR_pread __NR_pread64 +#define __NR_pwrite __NR_pwrite64 + +#undef O_LARGEFILE +#define O_LARGEFILE 0100000 + +#define socketcall(nm, a, b, c, d, e, f) syscall6(__NR_##nm, \ +    (long)a, (long)b, (long)c, (long)d, (long)e, (long)f) + +/* the following are needed for iso c functions to use */ +#define __syscall_open(filename, flags, mode) syscall3(__NR_open, (long)(filename), (flags)|O_LARGEFILE, (mode)) +#define __syscall_read(fd, buf, len)          syscall3(__NR_read, (fd), (long)(buf), (len)) +#define __syscall_write(fd, buf, len)         syscall3(__NR_write, (fd), (long)(buf), (len)) +#define __syscall_close(fd)                   syscall1(__NR_close, (fd)) +#define __syscall_fcntl(fd, cmd, arg)         syscall3(__NR_fcntl, (fd), (cmd), (long)(arg)) +#define __syscall_dup2(old, new)              syscall2(__NR_dup2, (old), (new)) +#define __syscall_unlink(path)                syscall1(__NR_unlink, (long)(path)) +#define __syscall_getpid()                    syscall0(__NR_getpid) +#define __syscall_kill(pid,sig)               syscall2(__NR_kill, (pid), (sig)) +#define __syscall_sigaction(sig,new,old)      syscall4(__NR_rt_sigaction, (sig), (long)(new), (long)(old), SYSCALL_SIGSET_SIZE) +#define __syscall_ioctl(fd,ioc,arg)           syscall3(__NR_ioctl, (fd), (ioc), (long)(arg)) +#define __syscall_exit(code)                  syscall1(__NR_exit, code) + +#define __NEED_off_t +#include <bits/alltypes.h> + +static inline off_t __syscall_lseek(int fd, off_t offset, int whence) +{ +	return syscall3(__NR_lseek, fd, offset, whence); +} + +#endif diff --git a/crt/x86_64/crt1.s b/crt/x86_64/crt1.s new file mode 100644 index 00000000..45cbb9db --- /dev/null +++ b/crt/x86_64/crt1.s @@ -0,0 +1,16 @@ +/* Written 2011 Nicholas J. Kain, released as Public Domain */ +.text +.global _start +_start: +	xor %rbp,%rbp   /* rbp:undefined -> mark as zero 0 (ABI) */ +	mov %rdx,%r9    /* 6th arg: ptr to register with atexit() */ +	pop %rsi        /* 2nd arg: argc */ +	mov %rsp,%rdx   /* 3rd arg: argv */ +	andq $-16,%rsp  /* align stack pointer */ +	push %rax       /* 8th arg: glibc ABI compatible */ +	push %rsp       /* 7th arg: glibc ABI compatible */ +	xor %r8,%r8     /* 5th arg: always 0 */ +	xor %rcx,%rcx   /* 4th arg: always 0 */ +	mov $main,%rdi  /* 1st arg: application entry ip */ +	call __libc_start_main /* musl init will run the program */ +.L0:	jmp .L0 diff --git a/include/signal.h b/include/signal.h index d69419e3..b727fc30 100644 --- a/include/signal.h +++ b/include/signal.h @@ -14,6 +14,7 @@ extern "C" {  #define __NEED_struct_timespec  #define __NEED_pthread_t  #define __NEED_time_t +#define __NEED_timer_t  #define __NEED_clock_t  #define __NEED_sigset_t  #define __NEED_siginfo_t diff --git a/src/math/x86_64/e_sqrt.s b/src/math/x86_64/e_sqrt.s new file mode 100644 index 00000000..64de7d6a --- /dev/null +++ b/src/math/x86_64/e_sqrt.s @@ -0,0 +1,3 @@ +.global sqrt +sqrt:	sqrtsd %xmm0, %xmm0 +	ret diff --git a/src/math/x86_64/e_sqrtf.s b/src/math/x86_64/e_sqrtf.s new file mode 100644 index 00000000..2c77076b --- /dev/null +++ b/src/math/x86_64/e_sqrtf.s @@ -0,0 +1,3 @@ +.global sqrtf +sqrtf:  sqrtss %xmm0, %xmm0 +	ret diff --git a/src/setjmp/x86_64/longjmp.s b/src/setjmp/x86_64/longjmp.s new file mode 100644 index 00000000..c63b0c95 --- /dev/null +++ b/src/setjmp/x86_64/longjmp.s @@ -0,0 +1,24 @@ +/* Copyright 2011 Nicholas J. Kain, licensed GNU LGPL 2.1 or later */ +.global _longjmp +.global longjmp +.type _longjmp,%function +.type longjmp,%function +_longjmp: +longjmp: +	mov %rsi,%rax           /* val will be longjmp return */ +	test %rax,%rax +	jnz .L0 +	inc %rax                /* if val==0, val=1 per longjmp semantics */ +.L0: +	movq (%rdi),%rbx        /* rdi is the jmp_buf, restore regs from it */ +	movq 8(%rdi),%rbp +	movq 16(%rdi),%r12 +	movq 24(%rdi),%r13 +	movq 32(%rdi),%r14 +	movq 40(%rdi),%r15 +	movq 48(%rdi),%rdx      /* this ends up being the stack pointer */ +	mov %rdx,%rsp +	movq 56(%rdi),%rdx      /* this is the instruction pointer */ +	jmp *%rdx               /* goto saved address without altering rsp */ +.size _longjmp,.-_longjmp +.size longjmp,.-longjmp diff --git a/src/setjmp/x86_64/setjmp.s b/src/setjmp/x86_64/setjmp.s new file mode 100644 index 00000000..8f29fa81 --- /dev/null +++ b/src/setjmp/x86_64/setjmp.s @@ -0,0 +1,25 @@ +/* Copyright 2011 Nicholas J. Kain, licensed GNU LGPL 2.1 or later */ +.global __setjmp +.global _setjmp +.global setjmp +.type __setjmp,%function +.type _setjmp,%function +.type setjmp,%function +__setjmp: +_setjmp: +setjmp: +	mov %rbx,(%rdi)         /* rdi is jmp_buf, move registers onto it */ +	mov %rbp,8(%rdi) +	mov %r12,16(%rdi) +	mov %r13,24(%rdi) +	mov %r14,32(%rdi) +	mov %r15,40(%rdi) +	leaq 8(%rsp),%rdx       /* this is our rsp WITHOUT current ret addr */ +	mov %rdx,48(%rdi) +	movq (%rsp),%rdx        /* save return addr ptr for new rip */ +	mov %rdx,56(%rdi) +	xor %rax,%rax           /* always return 0 */ +	ret +.size __setjmp,.-__setjmp +.size _setjmp,.-_setjmp +.size setjmp,.-setjmp diff --git a/src/signal/x86_64/restore.s b/src/signal/x86_64/restore.s new file mode 100644 index 00000000..bc5e0d74 --- /dev/null +++ b/src/signal/x86_64/restore.s @@ -0,0 +1,11 @@ +.global __restore_rt +.global __restore +.type __restore_rt,%function +.type __restore,%function +__restore_rt: +__restore: +	movl $15, %eax +	syscall +.size __restore_rt,.-__restore_rt +.size __restore,.-__restore + diff --git a/src/signal/x86_64/sigsetjmp.s b/src/signal/x86_64/sigsetjmp.s new file mode 100644 index 00000000..0a450785 --- /dev/null +++ b/src/signal/x86_64/sigsetjmp.s @@ -0,0 +1,11 @@ +/* Copyright 2011 Nicholas J. Kain, licensed GNU LGPL 2.1 or later */ +.global sigsetjmp +sigsetjmp: +	test %rsi,%rsi +	jz 1f              /* if save == 0, just goto setjmp */ +	movq %rsi,64(%rdi) /* move save -> jmp_buf[8] */ +	addq $72,%rdi      /* add sizeof(jmp_buf) to rdi */ +	movl $0,%esi       /* arg2 = 0 */ +	movl $2,%edx       /* arg3 = 2 */ +	call sigprocmask   /* sigprocmask(jmp_buf, 0, 2) */ +1:	jmp setjmp diff --git a/src/thread/x86_64/__set_thread_area.s b/src/thread/x86_64/__set_thread_area.s new file mode 100644 index 00000000..ed35b7a8 --- /dev/null +++ b/src/thread/x86_64/__set_thread_area.s @@ -0,0 +1,15 @@ +/* Copyright 2011 Nicholas J. Kain, licensed GNU LGPL 2.1 or later */ +.text +.global __set_thread_area +.type   __set_thread_area,%function +__set_thread_area: +        push %rbx               /* save x86_64 abi clobbered registers */ +        push %r11 +        mov %rdi,%rsi           /* shift for syscall */ +        movl $0x1002,%edi       /* SET_FS register */ +        movl $158,%eax          /* set fs segment to */ +        syscall                 /* arch_prctl(SET_FS, arg)*/ +        pop %r11                /* restore clobbered registers */ +        pop %rbx +	ret +.size __set_thread_area,.-__set_thread_area diff --git a/src/thread/x86_64/__unmapself.s b/src/thread/x86_64/__unmapself.s new file mode 100644 index 00000000..59092eaa --- /dev/null +++ b/src/thread/x86_64/__unmapself.s @@ -0,0 +1,24 @@ +/* Copyright 2011 Nicholas J. Kain, licensed GNU LGPL 2.1 or later */ +.text +.global __unmapself +.type   __unmapself,%function +__unmapself: +	call 1f         /* glibc ABI compat */ +	.long -1 +	.long -1 +1:      push %rsi       /* save arg2 for munmap */ +	push %rdx       /* save arg3 for munmap */ +	mov %rdi,%rsi   /* rt_sigprocmask() args: move arg1 to rsi */ +	xor %rdi,%rdi +	xor %rdx,%rdx +	movq $8,%r10 +	movl $14,%eax   /* __NR_rt_sigprocmask */ +	syscall         /* call rt_sigprocmask(0,arg1,0,8) */ +	pop %rsi        /* munmap() args: reload from stack */ +	pop %rdi +	movl $11,%eax   /* __NR_munmap */ +	syscall         /* munmap(arg2,arg3) */ +	xor %rdi,%rdi   /* exit() args: always return success */ +	movl $60,%eax   /* __NR_exit */ +	syscall         /* exit(0) */ +.size __unmapself,.-__unmapself diff --git a/src/thread/x86_64/clone.s b/src/thread/x86_64/clone.s new file mode 100644 index 00000000..51410051 --- /dev/null +++ b/src/thread/x86_64/clone.s @@ -0,0 +1,22 @@ +/* Copyright 2011 Nicholas J. Kain, licensed GNU LGPL 2.1 or later */ +.text +.global __uniclone +.type   __uniclone,%function +/* rdi = child_stack, rsi = start, rdx = pthread_struct */ +__uniclone: +        subq    $16,%rdi        /* grow child_stack */ +        mov     %rsi,8(%rdi)    /* push start onto child_stack as return ptr */ +        mov     %rdx,0(%rdi)    /* push pthread_struct onto child_stack */ +        mov     %rdx,%r8        /* r8 = tls */ +        mov     %rdi,%rsi       /* rsi = child_stack */ +        leaq    40(%rdx),%r10   /* r10 = child_id */ +        movl    $56,%eax        /* clone syscall number */ +        movl    $0x7d0f00,%edi  /* rdi = flags */ +        mov     %r10,%rdx       /* rdx = parent_id */ +	syscall                 /* clone(flags, child_stack, parent_id, +	                         *       child_id, tls) */ +	test	%rax,%rax +	jnz	1f              /* if we're in the parent -> goto 1f */ +        pop     %rdi            /* restore pthread_struct from child stack */ +1:      ret +.size __uniclone,.-__uniclone | 
