mirror of https://git.musl-libc.org/git/musl
Browse Source
three ABIs are supported: the default with 68881 80-bit fpu format and results returned in floating point registers, softfloat-only with the same format, and coldfire fpu with IEEE single/double only. only the first is tested at all, and only under qemu which has fpu emulation bugs. basic functionality smoke tests have been performed for the most common arch-specific breakage via libc-test and qemu user-level emulation. some sysvipc failures remain, but are shared with other big endian archs and will be fixed separately.master
27 changed files with 1079 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||
#define a_cas a_cas |
|||
static inline int a_cas(volatile int *p, int t, int s) |
|||
{ |
|||
__asm__ __volatile__ ( |
|||
"cas.l %0, %2, (%1)" |
|||
: "+d"(t) : "a"(p), "d"(s) : "memory", "cc"); |
|||
return t; |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
#define _Addr int |
|||
#define _Int64 long long |
|||
#define _Reg int |
|||
|
|||
TYPEDEF __builtin_va_list va_list; |
|||
TYPEDEF __builtin_va_list __isoc_va_list; |
|||
|
|||
#ifndef __cplusplus |
|||
TYPEDEF long wchar_t; |
|||
#endif |
|||
|
|||
#if __mcffpu__ |
|||
TYPEDEF float float_t; |
|||
TYPEDEF double double_t; |
|||
#else |
|||
TYPEDEF long double float_t; |
|||
TYPEDEF long double double_t; |
|||
#endif |
|||
|
|||
TYPEDEF struct { long long __ll; long double __ld; } max_align_t; |
|||
|
|||
TYPEDEF long time_t; |
|||
TYPEDEF long suseconds_t; |
|||
|
|||
TYPEDEF struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t; |
|||
TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t; |
|||
TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t; |
|||
TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t; |
|||
TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t; |
|||
TYPEDEF struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t; |
|||
TYPEDEF struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t; |
|||
@ -0,0 +1 @@ |
|||
#define __BYTE_ORDER __BIG_ENDIAN |
|||
@ -0,0 +1,40 @@ |
|||
#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_DSYNC 010000 |
|||
#define O_SYNC 04010000 |
|||
#define O_RSYNC 04010000 |
|||
#define O_DIRECTORY 040000 |
|||
#define O_NOFOLLOW 0100000 |
|||
#define O_CLOEXEC 02000000 |
|||
|
|||
#define O_ASYNC 020000 |
|||
#define O_DIRECT 0200000 |
|||
#define O_LARGEFILE 0400000 |
|||
#define O_NOATIME 01000000 |
|||
#define O_PATH 010000000 |
|||
#define O_TMPFILE 020200000 |
|||
#define O_NDELAY O_NONBLOCK |
|||
|
|||
#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_SETSIG 10 |
|||
#define F_GETSIG 11 |
|||
|
|||
#define F_GETLK 12 |
|||
#define F_SETLK 13 |
|||
#define F_SETLKW 14 |
|||
|
|||
#define F_SETOWN_EX 15 |
|||
#define F_GETOWN_EX 16 |
|||
|
|||
#define F_GETOWNER_UIDS 17 |
|||
@ -0,0 +1,29 @@ |
|||
#if __HAVE_68881__ || __mcffpu__ |
|||
|
|||
#define FE_INEXACT 8 |
|||
#define FE_DIVBYZERO 16 |
|||
#define FE_UNDERFLOW 32 |
|||
#define FE_OVERFLOW 64 |
|||
#define FE_INVALID 128 |
|||
|
|||
#define FE_ALL_EXCEPT 0xf8 |
|||
|
|||
#define FE_TONEAREST 0 |
|||
#define FE_TOWARDZERO 16 |
|||
#define FE_DOWNWARD 32 |
|||
#define FE_UPWARD 48 |
|||
|
|||
#else |
|||
|
|||
#define FE_ALL_EXCEPT 0 |
|||
#define FE_TONEAREST 0 |
|||
|
|||
#endif |
|||
|
|||
typedef unsigned fexcept_t; |
|||
|
|||
typedef struct { |
|||
unsigned __control_register, __status_register, __instruction_address; |
|||
} fenv_t; |
|||
|
|||
#define FE_DFL_ENV ((const fenv_t *) -1) |
|||
@ -0,0 +1,39 @@ |
|||
#if !__mcffpu__ |
|||
|
|||
#define FLT_EVAL_METHOD 2 |
|||
|
|||
#define LDBL_TRUE_MIN 3.6451995318824746025e-4951L |
|||
#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 |
|||
|
|||
#define DECIMAL_DIG 21 |
|||
|
|||
#else |
|||
|
|||
#define FLT_EVAL_METHOD 0 |
|||
|
|||
#define LDBL_TRUE_MIN 4.94065645841246544177e-324L |
|||
#define LDBL_MIN 2.22507385850720138309e-308L |
|||
#define LDBL_MAX 1.79769313486231570815e+308L |
|||
#define LDBL_EPSILON 2.22044604925031308085e-16L |
|||
|
|||
#define LDBL_MANT_DIG 53 |
|||
#define LDBL_MIN_EXP (-1021) |
|||
#define LDBL_MAX_EXP 1024 |
|||
|
|||
#define LDBL_DIG 15 |
|||
#define LDBL_MIN_10_EXP (-307) |
|||
#define LDBL_MAX_10_EXP 308 |
|||
|
|||
#define DECIMAL_DIG 17 |
|||
|
|||
#endif |
|||
@ -0,0 +1,7 @@ |
|||
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ |
|||
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
|||
#define LONG_BIT 32 |
|||
#endif |
|||
|
|||
#define LONG_MAX 0x7fffffffL |
|||
#define LLONG_MAX 0x7fffffffffffffffLL |
|||
@ -0,0 +1,2 @@ |
|||
#define _POSIX_V6_ILP32_OFFBIG 1 |
|||
#define _POSIX_V7_ILP32_OFFBIG 1 |
|||
@ -0,0 +1 @@ |
|||
typedef unsigned long __jmp_buf[39]; |
|||
@ -0,0 +1,140 @@ |
|||
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ |
|||
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
|||
|
|||
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
|||
#define MINSIGSTKSZ 2048 |
|||
#define SIGSTKSZ 8192 |
|||
#endif |
|||
|
|||
#ifdef _GNU_SOURCE |
|||
enum { R_D0 = 0 }; |
|||
#define R_D0 R_D0 |
|||
enum { R_D1 = 1 }; |
|||
#define R_D1 R_D1 |
|||
enum { R_D2 = 2 }; |
|||
#define R_D2 R_D2 |
|||
enum { R_D3 = 3 }; |
|||
#define R_D3 R_D3 |
|||
enum { R_D4 = 4 }; |
|||
#define R_D4 R_D4 |
|||
enum { R_D5 = 5 }; |
|||
#define R_D5 R_D5 |
|||
enum { R_D6 = 6 }; |
|||
#define R_D6 R_D6 |
|||
enum { R_D7 = 7 }; |
|||
#define R_D7 R_D7 |
|||
enum { R_A0 = 8 }; |
|||
#define R_A0 R_A0 |
|||
enum { R_A1 = 9 }; |
|||
#define R_A1 R_A1 |
|||
enum { R_A2 = 10 }; |
|||
#define R_A2 R_A2 |
|||
enum { R_A3 = 11 }; |
|||
#define R_A3 R_A3 |
|||
enum { R_A4 = 12 }; |
|||
#define R_A4 R_A4 |
|||
enum { R_A5 = 13 }; |
|||
#define R_A5 R_A5 |
|||
enum { R_A6 = 14 }; |
|||
#define R_A6 R_A6 |
|||
enum { R_A7 = 15 }; |
|||
#define R_A7 R_A7 |
|||
enum { R_SP = 15 }; |
|||
#define R_SP R_SP |
|||
enum { R_PC = 16 }; |
|||
#define R_PC R_PC |
|||
enum { R_PS = 17 }; |
|||
#define R_PS R_PS |
|||
#endif |
|||
|
|||
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
|||
|
|||
struct sigcontext { |
|||
unsigned long sc_mask, sc_usp, sc_d0, sc_d1, sc_a0, sc_a1; |
|||
unsigned short sc_sr; |
|||
unsigned long sc_pc; |
|||
unsigned short sc_formatvec; |
|||
unsigned long sc_fpregs[6], sc_fpcntl[3]; |
|||
unsigned char sc_fpstate[216]; |
|||
}; |
|||
|
|||
typedef int greg_t, gregset_t[18]; |
|||
typedef struct { |
|||
int f_pcr, f_psr, f_fpiaddr, f_fpregs[8][3]; |
|||
} fpregset_t; |
|||
|
|||
typedef struct { |
|||
int version; |
|||
gregset_t gregs; |
|||
fpregset_t fpregs; |
|||
} mcontext_t; |
|||
#else |
|||
typedef struct { |
|||
int __version; |
|||
int __gregs[18]; |
|||
int __fpregs[27]; |
|||
} mcontext_t; |
|||
#endif |
|||
|
|||
struct sigaltstack { |
|||
void *ss_sp; |
|||
int ss_flags; |
|||
size_t ss_size; |
|||
}; |
|||
|
|||
typedef struct __ucontext { |
|||
unsigned long uc_flags; |
|||
struct __ucontext *uc_link; |
|||
stack_t uc_stack; |
|||
mcontext_t uc_mcontext; |
|||
long __reserved[80]; |
|||
sigset_t uc_sigmask; |
|||
} ucontext_t; |
|||
|
|||
#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 |
|||
|
|||
#endif |
|||
|
|||
#define SIGHUP 1 |
|||
#define SIGINT 2 |
|||
#define SIGQUIT 3 |
|||
#define SIGILL 4 |
|||
#define SIGTRAP 5 |
|||
#define SIGABRT 6 |
|||
#define SIGIOT SIGABRT |
|||
#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 |
|||
|
|||
#define _NSIG 65 |
|||
@ -0,0 +1,21 @@ |
|||
/* copied from kernel definition, but with padding replaced
|
|||
* by the corresponding correctly-sized userspace types. */ |
|||
|
|||
struct stat { |
|||
dev_t st_dev; |
|||
short __st_dev_padding; |
|||
long __st_ino_truncated; |
|||
mode_t st_mode; |
|||
nlink_t st_nlink; |
|||
uid_t st_uid; |
|||
gid_t st_gid; |
|||
dev_t st_rdev; |
|||
short __st_rdev_padding; |
|||
off_t st_size; |
|||
blksize_t st_blksize; |
|||
blkcnt_t st_blocks; |
|||
struct timespec st_atim; |
|||
struct timespec st_mtim; |
|||
struct timespec st_ctim; |
|||
ino_t st_ino; |
|||
}; |
|||
@ -0,0 +1,20 @@ |
|||
typedef int32_t int_fast16_t; |
|||
typedef int32_t int_fast32_t; |
|||
typedef uint32_t uint_fast16_t; |
|||
typedef uint32_t uint_fast32_t; |
|||
|
|||
#define INT_FAST16_MIN INT32_MIN |
|||
#define INT_FAST32_MIN INT32_MIN |
|||
|
|||
#define INT_FAST16_MAX INT32_MAX |
|||
#define INT_FAST32_MAX INT32_MAX |
|||
|
|||
#define UINT_FAST16_MAX UINT32_MAX |
|||
#define UINT_FAST32_MAX UINT32_MAX |
|||
|
|||
#define INTPTR_MIN INT32_MIN |
|||
#define INTPTR_MAX INT32_MAX |
|||
#define UINTPTR_MAX UINT32_MAX |
|||
#define PTRDIFF_MIN INT32_MIN |
|||
#define PTRDIFF_MAX INT32_MAX |
|||
#define SIZE_MAX UINT32_MAX |
|||
@ -0,0 +1,361 @@ |
|||
#define __NR_restart_syscall 0 |
|||
#define __NR_exit 1 |
|||
#define __NR_fork 2 |
|||
#define __NR_read 3 |
|||
#define __NR_write 4 |
|||
#define __NR_open 5 |
|||
#define __NR_close 6 |
|||
#define __NR_waitpid 7 |
|||
#define __NR_creat 8 |
|||
#define __NR_link 9 |
|||
#define __NR_unlink 10 |
|||
#define __NR_execve 11 |
|||
#define __NR_chdir 12 |
|||
#define __NR_time 13 |
|||
#define __NR_mknod 14 |
|||
#define __NR_chmod 15 |
|||
#define __NR_chown 16 |
|||
#define __NR_oldstat 18 |
|||
#define __NR_lseek 19 |
|||
#define __NR_getpid 20 |
|||
#define __NR_mount 21 |
|||
#define __NR_umount 22 |
|||
#define __NR_setuid 23 |
|||
#define __NR_getuid 24 |
|||
#define __NR_stime 25 |
|||
#define __NR_ptrace 26 |
|||
#define __NR_alarm 27 |
|||
#define __NR_oldfstat 28 |
|||
#define __NR_pause 29 |
|||
#define __NR_utime 30 |
|||
#define __NR_access 33 |
|||
#define __NR_nice 34 |
|||
#define __NR_sync 36 |
|||
#define __NR_kill 37 |
|||
#define __NR_rename 38 |
|||
#define __NR_mkdir 39 |
|||
#define __NR_rmdir 40 |
|||
#define __NR_dup 41 |
|||
#define __NR_pipe 42 |
|||
#define __NR_times 43 |
|||
#define __NR_brk 45 |
|||
#define __NR_setgid 46 |
|||
#define __NR_getgid 47 |
|||
#define __NR_signal 48 |
|||
#define __NR_geteuid 49 |
|||
#define __NR_getegid 50 |
|||
#define __NR_acct 51 |
|||
#define __NR_umount2 52 |
|||
#define __NR_ioctl 54 |
|||
#define __NR_fcntl 55 |
|||
#define __NR_setpgid 57 |
|||
#define __NR_umask 60 |
|||
#define __NR_chroot 61 |
|||
#define __NR_ustat 62 |
|||
#define __NR_dup2 63 |
|||
#define __NR_getppid 64 |
|||
#define __NR_getpgrp 65 |
|||
#define __NR_setsid 66 |
|||
#define __NR_sigaction 67 |
|||
#define __NR_sgetmask 68 |
|||
#define __NR_ssetmask 69 |
|||
#define __NR_setreuid 70 |
|||
#define __NR_setregid 71 |
|||
#define __NR_sigsuspend 72 |
|||
#define __NR_sigpending 73 |
|||
#define __NR_sethostname 74 |
|||
#define __NR_setrlimit 75 |
|||
#define __NR_getrlimit 76 |
|||
#define __NR_getrusage 77 |
|||
#define __NR_gettimeofday 78 |
|||
#define __NR_settimeofday 79 |
|||
#define __NR_getgroups 80 |
|||
#define __NR_setgroups 81 |
|||
#define __NR_select 82 |
|||
#define __NR_symlink 83 |
|||
#define __NR_oldlstat 84 |
|||
#define __NR_readlink 85 |
|||
#define __NR_uselib 86 |
|||
#define __NR_swapon 87 |
|||
#define __NR_reboot 88 |
|||
#define __NR_readdir 89 |
|||
#define __NR_mmap 90 |
|||
#define __NR_munmap 91 |
|||
#define __NR_truncate 92 |
|||
#define __NR_ftruncate 93 |
|||
#define __NR_fchmod 94 |
|||
#define __NR_fchown 95 |
|||
#define __NR_getpriority 96 |
|||
#define __NR_setpriority 97 |
|||
#define __NR_statfs 99 |
|||
#define __NR_fstatfs 100 |
|||
#define __NR_socketcall 102 |
|||
#define __NR_syslog 103 |
|||
#define __NR_setitimer 104 |
|||
#define __NR_getitimer 105 |
|||
#define __NR_stat 106 |
|||
#define __NR_lstat 107 |
|||
#define __NR_fstat 108 |
|||
#define __NR_vhangup 111 |
|||
#define __NR_wait4 114 |
|||
#define __NR_swapoff 115 |
|||
#define __NR_sysinfo 116 |
|||
#define __NR_ipc 117 |
|||
#define __NR_fsync 118 |
|||
#define __NR_sigreturn 119 |
|||
#define __NR_clone 120 |
|||
#define __NR_setdomainname 121 |
|||
#define __NR_uname 122 |
|||
#define __NR_cacheflush 123 |
|||
#define __NR_adjtimex 124 |
|||
#define __NR_mprotect 125 |
|||
#define __NR_sigprocmask 126 |
|||
#define __NR_create_module 127 |
|||
#define __NR_init_module 128 |
|||
#define __NR_delete_module 129 |
|||
#define __NR_get_kernel_syms 130 |
|||
#define __NR_quotactl 131 |
|||
#define __NR_getpgid 132 |
|||
#define __NR_fchdir 133 |
|||
#define __NR_bdflush 134 |
|||
#define __NR_sysfs 135 |
|||
#define __NR_personality 136 |
|||
#define __NR_setfsuid 138 |
|||
#define __NR_setfsgid 139 |
|||
#define __NR__llseek 140 |
|||
#define __NR_getdents 141 |
|||
#define __NR__newselect 142 |
|||
#define __NR_flock 143 |
|||
#define __NR_msync 144 |
|||
#define __NR_readv 145 |
|||
#define __NR_writev 146 |
|||
#define __NR_getsid 147 |
|||
#define __NR_fdatasync 148 |
|||
#define __NR__sysctl 149 |
|||
#define __NR_mlock 150 |
|||
#define __NR_munlock 151 |
|||
#define __NR_mlockall 152 |
|||
#define __NR_munlockall 153 |
|||
#define __NR_sched_setparam 154 |
|||
#define __NR_sched_getparam 155 |
|||
#define __NR_sched_setscheduler 156 |
|||
#define __NR_sched_getscheduler 157 |
|||
#define __NR_sched_yield 158 |
|||
#define __NR_sched_get_priority_max 159 |
|||
#define __NR_sched_get_priority_min 160 |
|||
#define __NR_sched_rr_get_interval 161 |
|||
#define __NR_nanosleep 162 |
|||
#define __NR_mremap 163 |
|||
#define __NR_setresuid 164 |
|||
#define __NR_getresuid 165 |
|||
#define __NR_getpagesize 166 |
|||
#define __NR_query_module 167 |
|||
#define __NR_poll 168 |
|||
#define __NR_nfsservctl 169 |
|||
#define __NR_setresgid 170 |
|||
#define __NR_getresgid 171 |
|||
#define __NR_prctl 172 |
|||
#define __NR_rt_sigreturn 173 |
|||
#define __NR_rt_sigaction 174 |
|||
#define __NR_rt_sigprocmask 175 |
|||
#define __NR_rt_sigpending 176 |
|||
#define __NR_rt_sigtimedwait 177 |
|||
#define __NR_rt_sigqueueinfo 178 |
|||
#define __NR_rt_sigsuspend 179 |
|||
#define __NR_pread64 180 |
|||
#define __NR_pwrite64 181 |
|||
#define __NR_lchown 182 |
|||
#define __NR_getcwd 183 |
|||
#define __NR_capget 184 |
|||
#define __NR_capset 185 |
|||
#define __NR_sigaltstack 186 |
|||
#define __NR_sendfile 187 |
|||
#define __NR_getpmsg 188 |
|||
#define __NR_putpmsg 189 |
|||
#define __NR_vfork 190 |
|||
#define __NR_ugetrlimit 191 |
|||
#define __NR_mmap2 192 |
|||
#define __NR_truncate64 193 |
|||
#define __NR_ftruncate64 194 |
|||
#define __NR_stat64 195 |
|||
#define __NR_lstat64 196 |
|||
#define __NR_fstat64 197 |
|||
#define __NR_chown32 198 |
|||
#define __NR_getuid32 199 |
|||
#define __NR_getgid32 200 |
|||
#define __NR_geteuid32 201 |
|||
#define __NR_getegid32 202 |
|||
#define __NR_setreuid32 203 |
|||
#define __NR_setregid32 204 |
|||
#define __NR_getgroups32 205 |
|||
#define __NR_setgroups32 206 |
|||
#define __NR_fchown32 207 |
|||
#define __NR_setresuid32 208 |
|||
#define __NR_getresuid32 209 |
|||
#define __NR_setresgid32 210 |
|||
#define __NR_getresgid32 211 |
|||
#define __NR_lchown32 212 |
|||
#define __NR_setuid32 213 |
|||
#define __NR_setgid32 214 |
|||
#define __NR_setfsuid32 215 |
|||
#define __NR_setfsgid32 216 |
|||
#define __NR_pivot_root 217 |
|||
#define __NR_getdents64 220 |
|||
#define __NR_gettid 221 |
|||
#define __NR_tkill 222 |
|||
#define __NR_setxattr 223 |
|||
#define __NR_lsetxattr 224 |
|||
#define __NR_fsetxattr 225 |
|||
#define __NR_getxattr 226 |
|||
#define __NR_lgetxattr 227 |
|||
#define __NR_fgetxattr 228 |
|||
#define __NR_listxattr 229 |
|||
#define __NR_llistxattr 230 |
|||
#define __NR_flistxattr 231 |
|||
#define __NR_removexattr 232 |
|||
#define __NR_lremovexattr 233 |
|||
#define __NR_fremovexattr 234 |
|||
#define __NR_futex 235 |
|||
#define __NR_sendfile64 236 |
|||
#define __NR_mincore 237 |
|||
#define __NR_madvise 238 |
|||
#define __NR_fcntl64 239 |
|||
#define __NR_readahead 240 |
|||
#define __NR_io_setup 241 |
|||
#define __NR_io_destroy 242 |
|||
#define __NR_io_getevents 243 |
|||
#define __NR_io_submit 244 |
|||
#define __NR_io_cancel 245 |
|||
#define __NR_fadvise64 246 |
|||
#define __NR_exit_group 247 |
|||
#define __NR_lookup_dcookie 248 |
|||
#define __NR_epoll_create 249 |
|||
#define __NR_epoll_ctl 250 |
|||
#define __NR_epoll_wait 251 |
|||
#define __NR_remap_file_pages 252 |
|||
#define __NR_set_tid_address 253 |
|||
#define __NR_timer_create 254 |
|||
#define __NR_timer_settime 255 |
|||
#define __NR_timer_gettime 256 |
|||
#define __NR_timer_getoverrun 257 |
|||
#define __NR_timer_delete 258 |
|||
#define __NR_clock_settime 259 |
|||
#define __NR_clock_gettime 260 |
|||
#define __NR_clock_getres 261 |
|||
#define __NR_clock_nanosleep 262 |
|||
#define __NR_statfs64 263 |
|||
#define __NR_fstatfs64 264 |
|||
#define __NR_tgkill 265 |
|||
#define __NR_utimes 266 |
|||
#define __NR_fadvise64_64 267 |
|||
#define __NR_mbind 268 |
|||
#define __NR_get_mempolicy 269 |
|||
#define __NR_set_mempolicy 270 |
|||
#define __NR_mq_open 271 |
|||
#define __NR_mq_unlink 272 |
|||
#define __NR_mq_timedsend 273 |
|||
#define __NR_mq_timedreceive 274 |
|||
#define __NR_mq_notify 275 |
|||
#define __NR_mq_getsetattr 276 |
|||
#define __NR_waitid 277 |
|||
#define __NR_add_key 279 |
|||
#define __NR_request_key 280 |
|||
#define __NR_keyctl 281 |
|||
#define __NR_ioprio_set 282 |
|||
#define __NR_ioprio_get 283 |
|||
#define __NR_inotify_init 284 |
|||
#define __NR_inotify_add_watch 285 |
|||
#define __NR_inotify_rm_watch 286 |
|||
#define __NR_migrate_pages 287 |
|||
#define __NR_openat 288 |
|||
#define __NR_mkdirat 289 |
|||
#define __NR_mknodat 290 |
|||
#define __NR_fchownat 291 |
|||
#define __NR_futimesat 292 |
|||
#define __NR_fstatat64 293 |
|||
#define __NR_unlinkat 294 |
|||
#define __NR_renameat 295 |
|||
#define __NR_linkat 296 |
|||
#define __NR_symlinkat 297 |
|||
#define __NR_readlinkat 298 |
|||
#define __NR_fchmodat 299 |
|||
#define __NR_faccessat 300 |
|||
#define __NR_pselect6 301 |
|||
#define __NR_ppoll 302 |
|||
#define __NR_unshare 303 |
|||
#define __NR_set_robust_list 304 |
|||
#define __NR_get_robust_list 305 |
|||
#define __NR_splice 306 |
|||
#define __NR_sync_file_range 307 |
|||
#define __NR_tee 308 |
|||
#define __NR_vmsplice 309 |
|||
#define __NR_move_pages 310 |
|||
#define __NR_sched_setaffinity 311 |
|||
#define __NR_sched_getaffinity 312 |
|||
#define __NR_kexec_load 313 |
|||
#define __NR_getcpu 314 |
|||
#define __NR_epoll_pwait 315 |
|||
#define __NR_utimensat 316 |
|||
#define __NR_signalfd 317 |
|||
#define __NR_timerfd_create 318 |
|||
#define __NR_eventfd 319 |
|||
#define __NR_fallocate 320 |
|||
#define __NR_timerfd_settime 321 |
|||
#define __NR_timerfd_gettime 322 |
|||
#define __NR_signalfd4 323 |
|||
#define __NR_eventfd2 324 |
|||
#define __NR_epoll_create1 325 |
|||
#define __NR_dup3 326 |
|||
#define __NR_pipe2 327 |
|||
#define __NR_inotify_init1 328 |
|||
#define __NR_preadv 329 |
|||
#define __NR_pwritev 330 |
|||
#define __NR_rt_tgsigqueueinfo 331 |
|||
#define __NR_perf_event_open 332 |
|||
#define __NR_get_thread_area 333 |
|||
#define __NR_set_thread_area 334 |
|||
#define __NR_atomic_cmpxchg_32 335 |
|||
#define __NR_atomic_barrier 336 |
|||
#define __NR_fanotify_init 337 |
|||
#define __NR_fanotify_mark 338 |
|||
#define __NR_prlimit64 339 |
|||
#define __NR_name_to_handle_at 340 |
|||
#define __NR_open_by_handle_at 341 |
|||
#define __NR_clock_adjtime 342 |
|||
#define __NR_syncfs 343 |
|||
#define __NR_setns 344 |
|||
#define __NR_process_vm_readv 345 |
|||
#define __NR_process_vm_writev 346 |
|||
#define __NR_kcmp 347 |
|||
#define __NR_finit_module 348 |
|||
#define __NR_sched_setattr 349 |
|||
#define __NR_sched_getattr 350 |
|||
#define __NR_renameat2 351 |
|||
#define __NR_getrandom 352 |
|||
#define __NR_memfd_create 353 |
|||
#define __NR_bpf 354 |
|||
#define __NR_execveat 355 |
|||
#define __NR_socket 356 |
|||
#define __NR_socketpair 357 |
|||
#define __NR_bind 358 |
|||
#define __NR_connect 359 |
|||
#define __NR_listen 360 |
|||
#define __NR_accept4 361 |
|||
#define __NR_getsockopt 362 |
|||
#define __NR_setsockopt 363 |
|||
#define __NR_getsockname 364 |
|||
#define __NR_getpeername 365 |
|||
#define __NR_sendto 366 |
|||
#define __NR_sendmsg 367 |
|||
#define __NR_recvfrom 368 |
|||
#define __NR_recvmsg 369 |
|||
#define __NR_shutdown 370 |
|||
#define __NR_recvmmsg 371 |
|||
#define __NR_sendmmsg 372 |
|||
#define __NR_userfaultfd 373 |
|||
#define __NR_membarrier 374 |
|||
#define __NR_mlock2 375 |
|||
#define __NR_copy_file_range 376 |
|||
#define __NR_preadv2 377 |
|||
#define __NR_pwritev2 378 |
|||
#define __NR_statx 379 |
|||
@ -0,0 +1,14 @@ |
|||
__asm__( |
|||
".text\n" |
|||
".weak _DYNAMIC \n" |
|||
".hidden _DYNAMIC \n" |
|||
".global " START "\n" |
|||
START ":\n" |
|||
" suba.l %fp,%fp \n" |
|||
" movea.l %sp,%a0 \n" |
|||
" lea _DYNAMIC-.-8,%a1 \n" |
|||
" pea (%pc,%a1) \n" |
|||
" pea (%a0) \n" |
|||
" lea " START "_c-.-8,%a1 \n" |
|||
" jsr (%pc,%a1) \n" |
|||
); |
|||
@ -0,0 +1,13 @@ |
|||
static inline struct pthread *__pthread_self() |
|||
{ |
|||
uintptr_t tp = __syscall(SYS_get_thread_area); |
|||
return (pthread_t)(tp - 0x7000 - sizeof(struct pthread)); |
|||
} |
|||
|
|||
#define TLS_ABOVE_TP |
|||
#define GAP_ABOVE_TP 0 |
|||
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000) |
|||
|
|||
#define DTP_OFFSET 0x8000 |
|||
|
|||
#define MC_PC gregs[R_PC] |
|||
@ -0,0 +1,30 @@ |
|||
#if __HAVE_68881__ |
|||
#define FP_SUFFIX "" |
|||
#elif __mcffpu__ |
|||
#define FP_SUFFIX "-fp64" |
|||
#else |
|||
#define FP_SUFFIX "-sf" |
|||
#endif |
|||
|
|||
#define LDSO_ARCH "m68k" FP_SUFFIX |
|||
|
|||
#define TPOFF_K (-0x7000) |
|||
|
|||
#define REL_SYMBOLIC R_68K_32 |
|||
#define REL_OFFSET R_68K_PC32 |
|||
#define REL_GOT R_68K_GLOB_DAT |
|||
#define REL_PLT R_68K_JMP_SLOT |
|||
#define REL_RELATIVE R_68K_RELATIVE |
|||
#define REL_COPY R_68K_COPY |
|||
#define REL_DTPMOD R_68K_TLS_DTPMOD32 |
|||
#define REL_DTPOFF R_68K_TLS_DTPREL32 |
|||
#define REL_TPOFF R_68K_TLS_TPREL32 |
|||
|
|||
#define CRTJMP(pc,sp) __asm__ __volatile__( \ |
|||
"move.l %1,%%sp ; jmp (%0)" : : "r"(pc), "r"(sp) : "memory" ) |
|||
|
|||
#define GETFUNCSYM(fp, sym, got) __asm__ ( \ |
|||
".hidden " #sym "\n" \ |
|||
"lea " #sym "-.-8,%0 \n" \ |
|||
"lea (%%pc,%0),%0 \n" \ |
|||
: "=a"(*fp) : : "memory" ) |
|||
@ -0,0 +1,90 @@ |
|||
#define __SYSCALL_LL_E(x) \ |
|||
((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ |
|||
((union { long long ll; long l[2]; }){ .ll = x }).l[1] |
|||
#define __SYSCALL_LL_O(x) __SYSCALL_LL_E((x)) |
|||
|
|||
static __inline long __syscall0(long n) |
|||
{ |
|||
register unsigned long d0 __asm__("d0") = n; |
|||
__asm__ __volatile__ ("trap #0" : "+r"(d0) |
|||
: |
|||
: "memory"); |
|||
return d0; |
|||
} |
|||
|
|||
static inline long __syscall1(long n, long a) |
|||
{ |
|||
register unsigned long d0 __asm__("d0") = n; |
|||
register unsigned long d1 __asm__("d1") = a; |
|||
__asm__ __volatile__ ("trap #0" : "+r"(d0) |
|||
: "r"(d1) |
|||
: "memory"); |
|||
return d0; |
|||
} |
|||
|
|||
static inline long __syscall2(long n, long a, long b) |
|||
{ |
|||
register unsigned long d0 __asm__("d0") = n; |
|||
register unsigned long d1 __asm__("d1") = a; |
|||
register unsigned long d2 __asm__("d2") = b; |
|||
__asm__ __volatile__ ("trap #0" : "+r"(d0) |
|||
: "r"(d1), "r"(d2) |
|||
: "memory"); |
|||
return d0; |
|||
} |
|||
|
|||
static inline long __syscall3(long n, long a, long b, long c) |
|||
{ |
|||
register unsigned long d0 __asm__("d0") = n; |
|||
register unsigned long d1 __asm__("d1") = a; |
|||
register unsigned long d2 __asm__("d2") = b; |
|||
register unsigned long d3 __asm__("d3") = c; |
|||
__asm__ __volatile__ ("trap #0" : "+r"(d0) |
|||
: "r"(d1), "r"(d2), "r"(d3) |
|||
: "memory"); |
|||
return d0; |
|||
} |
|||
|
|||
static inline long __syscall4(long n, long a, long b, long c, long d) |
|||
{ |
|||
register unsigned long d0 __asm__("d0") = n; |
|||
register unsigned long d1 __asm__("d1") = a; |
|||
register unsigned long d2 __asm__("d2") = b; |
|||
register unsigned long d3 __asm__("d3") = c; |
|||
register unsigned long d4 __asm__("d4") = d; |
|||
__asm__ __volatile__ ("trap #0" : "+r"(d0) |
|||
: "r"(d1), "r"(d2), "r"(d3), "r"(d4) |
|||
: "memory"); |
|||
return d0; |
|||
} |
|||
|
|||
static inline long __syscall5(long n, long a, long b, long c, long d, long e) |
|||
{ |
|||
register unsigned long d0 __asm__("d0") = n; |
|||
register unsigned long d1 __asm__("d1") = a; |
|||
register unsigned long d2 __asm__("d2") = b; |
|||
register unsigned long d3 __asm__("d3") = c; |
|||
register unsigned long d4 __asm__("d4") = d; |
|||
register unsigned long d5 __asm__("d5") = e; |
|||
__asm__ __volatile__ ("trap #0" : "+r"(d0) |
|||
: "r"(d1), "r"(d2), "r"(d3), "r"(d4), "r"(d5) |
|||
: "memory"); |
|||
return d0; |
|||
} |
|||
|
|||
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) |
|||
{ |
|||
register unsigned long d0 __asm__("d0") = n; |
|||
register unsigned long d1 __asm__("d1") = a; |
|||
register unsigned long d2 __asm__("d2") = b; |
|||
register unsigned long d3 __asm__("d3") = c; |
|||
register unsigned long d4 __asm__("d4") = d; |
|||
register unsigned long d5 __asm__("d5") = e; |
|||
register unsigned long a0 __asm__("a0") = f; |
|||
__asm__ __volatile__ ("trap #0" : "+r"(d0) |
|||
: "r"(d1), "r"(d2), "r"(d3), "r"(d4), "r"(d5), "r"(a0) |
|||
: "memory"); |
|||
return d0; |
|||
} |
|||
|
|||
#define SYSCALL_USE_SOCKETCALL |
|||
@ -0,0 +1,84 @@ |
|||
#include <fenv.h> |
|||
|
|||
#if __HAVE_68881__ || __mcffpu__ |
|||
|
|||
static unsigned getsr() |
|||
{ |
|||
unsigned v; |
|||
__asm__ __volatile__ ("fmove.l %%fpsr,%0" : "=dm"(v)); |
|||
return v; |
|||
} |
|||
|
|||
static void setsr(unsigned v) |
|||
{ |
|||
__asm__ __volatile__ ("fmove.l %0,%%fpsr" : : "dm"(v)); |
|||
} |
|||
|
|||
static unsigned getcr() |
|||
{ |
|||
unsigned v; |
|||
__asm__ __volatile__ ("fmove.l %%fpcr,%0" : "=dm"(v)); |
|||
return v; |
|||
} |
|||
|
|||
static void setcr(unsigned v) |
|||
{ |
|||
__asm__ __volatile__ ("fmove.l %0,%%fpcr" : : "dm"(v)); |
|||
} |
|||
|
|||
int feclearexcept(int mask) |
|||
{ |
|||
if (mask & ~FE_ALL_EXCEPT) return -1; |
|||
setsr(getsr() & ~mask); |
|||
return 0; |
|||
} |
|||
|
|||
int feraiseexcept(int mask) |
|||
{ |
|||
if (mask & ~FE_ALL_EXCEPT) return -1; |
|||
setsr(getsr() | mask); |
|||
return 0; |
|||
} |
|||
|
|||
int fetestexcept(int mask) |
|||
{ |
|||
return getsr() & mask; |
|||
} |
|||
|
|||
int fegetround(void) |
|||
{ |
|||
return getcr() & FE_UPWARD; |
|||
} |
|||
|
|||
int __fesetround(int r) |
|||
{ |
|||
setcr((getcr() & ~FE_UPWARD) | r); |
|||
return 0; |
|||
} |
|||
|
|||
int fegetenv(fenv_t *envp) |
|||
{ |
|||
envp->__control_register = getcr(); |
|||
envp->__status_register = getsr(); |
|||
__asm__ __volatile__ ("fmove.l %%fpiar,%0" |
|||
: "=dm"(envp->__instruction_address)); |
|||
return 0; |
|||
} |
|||
|
|||
int fesetenv(const fenv_t *envp) |
|||
{ |
|||
static const fenv_t default_env = { 0 }; |
|||
if (envp == FE_DFL_ENV) |
|||
envp = &default_env; |
|||
setcr(envp->__control_register); |
|||
setsr(envp->__status_register); |
|||
__asm__ __volatile__ ("fmove.l %0,%%fpiar" |
|||
: : "dm"(envp->__instruction_address)); |
|||
return 0; |
|||
} |
|||
|
|||
#else |
|||
|
|||
#include "../fenv.c" |
|||
|
|||
#endif |
|||
@ -0,0 +1,9 @@ |
|||
.global __syscall |
|||
.hidden __syscall |
|||
.type __syscall,%function |
|||
__syscall: |
|||
movem.l %d2-%d5,-(%sp) |
|||
movem.l 20(%sp),%d0-%d5/%a0 |
|||
trap #0 |
|||
movem.l (%sp)+,%d2-%d5 |
|||
rts |
|||
@ -0,0 +1,12 @@ |
|||
.text |
|||
.global dlsym |
|||
.hidden __dlsym |
|||
.type dlsym,@function |
|||
dlsym: |
|||
move.l (%sp),-(%sp) |
|||
move.l 12(%sp),-(%sp) |
|||
move.l 12(%sp),-(%sp) |
|||
lea __dlsym-.-8,%a1 |
|||
jsr (%pc,%a1) |
|||
add.l #12,%sp |
|||
rts |
|||
@ -0,0 +1,14 @@ |
|||
.global _longjmp |
|||
.global longjmp |
|||
.type _longjmp,@function |
|||
.type longjmp,@function |
|||
_longjmp: |
|||
longjmp: |
|||
movea.l 4(%sp),%a0 |
|||
move.l 8(%sp),%d0 |
|||
bne 1f |
|||
move.l #1,%d0 |
|||
1: movem.l (%a0),%d2-%d7/%a2-%a7 |
|||
fmovem.x 52(%a0),%fp2-%fp7 |
|||
move.l 48(%a0),(%sp) |
|||
rts |
|||
@ -0,0 +1,18 @@ |
|||
.global ___setjmp |
|||
.hidden ___setjmp |
|||
.global __setjmp |
|||
.global _setjmp |
|||
.global setjmp |
|||
.type __setjmp,@function |
|||
.type _setjmp,@function |
|||
.type setjmp,@function |
|||
___setjmp: |
|||
__setjmp: |
|||
_setjmp: |
|||
setjmp: |
|||
movea.l 4(%sp),%a0 |
|||
movem.l %d2-%d7/%a2-%a7,(%a0) |
|||
move.l (%sp),48(%a0) |
|||
fmovem.x %fp2-%fp7,52(%a0) |
|||
clr.l %d0 |
|||
rts |
|||
@ -0,0 +1,29 @@ |
|||
.global sigsetjmp |
|||
.global __sigsetjmp |
|||
.type sigsetjmp,@function |
|||
.type __sigsetjmp,@function |
|||
sigsetjmp: |
|||
__sigsetjmp: |
|||
move.l 8(%sp),%d0 |
|||
beq 1f |
|||
|
|||
movea.l 4(%sp),%a1 |
|||
move.l (%sp)+,156(%a1) |
|||
move.l %a2,156+4+8(%a1) |
|||
movea.l %a1,%a2 |
|||
|
|||
.hidden ___setjmp |
|||
lea ___setjmp-.-8,%a1 |
|||
jsr (%pc,%a1) |
|||
|
|||
move.l 156(%a2),-(%sp) |
|||
move.l %a2,4(%sp) |
|||
move.l %d0,8(%sp) |
|||
movea.l 156+4+8(%a2),%a2 |
|||
|
|||
.hidden __sigsetjmp_tail |
|||
lea __sigsetjmp_tail-.-8,%a1 |
|||
jmp (%pc,%a1) |
|||
|
|||
1: lea ___setjmp-.-8,%a1 |
|||
jmp (%pc,%a1) |
|||
@ -0,0 +1,8 @@ |
|||
.text |
|||
.global __m68k_read_tp |
|||
.type __m68k_read_tp,@function |
|||
__m68k_read_tp: |
|||
move.l #333,%d0 |
|||
trap #0 |
|||
move.l %d0,%a0 |
|||
rts |
|||
@ -0,0 +1,24 @@ |
|||
.text |
|||
.global __clone |
|||
.type __clone,@function |
|||
__clone: |
|||
movem.l %d2-%d5,-(%sp) |
|||
move.l #120,%d0 |
|||
move.l 28(%sp),%d1 |
|||
move.l 24(%sp),%d2 |
|||
and.l #-16,%d2 |
|||
move.l 36(%sp),%d3 |
|||
move.l 44(%sp),%d4 |
|||
move.l 40(%sp),%d5 |
|||
move.l 20(%sp),%a0 |
|||
move.l 32(%sp),%a1 |
|||
trap #0 |
|||
tst.l %d0 |
|||
beq 1f |
|||
movem.l (%sp)+,%d2-%d5 |
|||
rts |
|||
1: move.l %a1,-(%sp) |
|||
jsr (%a0) |
|||
move.l #1,%d0 |
|||
trap #0 |
|||
clr.b 0 |
|||
@ -0,0 +1,26 @@ |
|||
.text |
|||
.global __cp_begin |
|||
.hidden __cp_begin |
|||
.global __cp_end |
|||
.hidden __cp_end |
|||
.global __cp_cancel |
|||
.hidden __cp_cancel |
|||
.hidden __cancel |
|||
.global __syscall_cp_asm |
|||
.hidden __syscall_cp_asm |
|||
.type __syscall_cp_asm,@function |
|||
__syscall_cp_asm: |
|||
movem.l %d2-%d5,-(%sp) |
|||
movea.l 20(%sp),%a0 |
|||
__cp_begin: |
|||
move.l (%a0),%d0 |
|||
bne __cp_cancel |
|||
movem.l 24(%sp),%d0-%d5/%a0 |
|||
trap #0 |
|||
__cp_end: |
|||
movem.l (%sp)+,%d2-%d5 |
|||
rts |
|||
__cp_cancel: |
|||
movem.l (%sp)+,%d2-%d5 |
|||
move.l __cancel-.-8,%a1 |
|||
jmp (%pc,%a1) |
|||
Loading…
Reference in new issue