-----BEGIN PGP SIGNATURE-----

iQIcBAABAgAGBQJa+dImAAoJEPMMOL0/L748umMP/R9miqzm3/Pj1gssD/yA5lZE
 7rx/d14Sefo2T/L1kmg6vbbyOJyLnHf9DtTI/JCgOnC9otOQ1IKfeI4c0coJjI5R
 G0yNHswLB+VMIJ830ivF0QE4Z8f6K1UbBD9y+iQfpFk55rrT+dt9U3YJBrCY7bQ8
 Sk+2dFpk+oVh9oz3GPHRkWua/KGMDrqCjAOlkVCXyNZuJ8yp69wHWI2j81nFQv3v
 1AnXOm6bbjy9zwRuRUJ6yco2vu8uXyor/usA465C66A5XZ7xcrgKIZQge3hV31fo
 4BmnxEviMKM5dM013e2nk0Hh5YwG/Vv+t8YYgco79Mcy9QJIEO4J1JXedUYZ3FJ/
 JhV5nTcYNi1hQMkSxzXWoxyOMElwL8DaPQIZS7c++pOSXCS9oD/baBuPzC/dWBTH
 VThuCYd1EsBe8ZFkgph/oUMYZQHcS2/paGE1RuHlLXVOqd1k9v/d27yxngo1/wn7
 +zesaWkp9aQOC6pij23cgKAq8S1X8KeaOM0UK+KmMNSr1h9nQY146D3/SOqUfAfS
 2DzW7PBnUHFzi6uXE99ZiUSSWWIyIjJEgAOnqnZCrl5LbPCKnjp4/BYupxoUwAWF
 Nr9Gk34R2FhoqqJtplzYWxXfyyCFujQMXHUe/yYx5ITG18totKb+09GbeeSep8Is
 myxrDirmbaqCnj8zfd+M
 =yjsX
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-2.13-pull-request' into staging

# gpg: Signature made Mon 14 May 2018 19:15:02 BST
# gpg:                using RSA key F30C38BD3F2FBE3C
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>"
# gpg:                 aka "Laurent Vivier <laurent@vivier.eu>"
# gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>"
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C

* remotes/vivier2/tags/linux-user-for-2.13-pull-request:
  linux-user: correctly align types in thunking code
  linux-user: fix UNAME_MACHINE for sparc/sparc64
  linux-user: add sparc/sparc64 specific errno
  linux-user: fix conversion of flock/flock64 l_type field
  linux-user: update sparc/syscall_nr.h to linux header 4.16
  linux-user: fix flock/flock64 padding
  linux-user: define correct fcntl() values for sparc

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2018-05-15 10:04:22 +01:00
commit f39ddb3a08
8 changed files with 343 additions and 38 deletions

View File

@ -149,20 +149,32 @@ static inline int thunk_type_align(const argtype *type_ptr, int is_host)
case TYPE_CHAR:
return 1;
case TYPE_SHORT:
return 2;
if (is_host) {
return __alignof__(short);
} else {
return ABI_SHORT_ALIGNMENT;
}
case TYPE_INT:
return 4;
if (is_host) {
return __alignof__(int);
} else {
return ABI_INT_ALIGNMENT;
}
case TYPE_LONGLONG:
case TYPE_ULONGLONG:
return 8;
if (is_host) {
return __alignof__(long long);
} else {
return ABI_LLONG_ALIGNMENT;
}
case TYPE_LONG:
case TYPE_ULONG:
case TYPE_PTRVOID:
case TYPE_PTR:
if (is_host) {
return sizeof(void *);
return __alignof__(long);
} else {
return TARGET_ABI_BITS / 8;
return ABI_LONG_ALIGNMENT;
}
break;
case TYPE_OLDDEVT:

View File

@ -22,6 +22,7 @@
#define TARGET_NR_capset 22 /* Linux Specific */
#define TARGET_NR_setuid 23 /* Implemented via setreuid in SunOS */
#define TARGET_NR_getuid 24 /* Common */
#define TARGET_NR_vmsplice 25
#define TARGET_NR_ptrace 26 /* Common */
#define TARGET_NR_alarm 27 /* Implemented via setitimer in SunOS */
#define TARGET_NR_sigaltstack 28 /* Common */
@ -135,6 +136,7 @@
#define TARGET_NR_rmdir 137 /* Common */
#define TARGET_NR_utimes 138 /* SunOS Specific */
#define TARGET_NR_stat64 139 /* Linux sparc32 Specific */
#define TARGET_NR_sendfile64 140
#define TARGET_NR_getpeername 141 /* Common */
#define TARGET_NR_futex 142 /* gethostid under SunOS */
#define TARGET_NR_gettid 143 /* ENOSYS under SunOS */
@ -145,29 +147,51 @@
#define TARGET_NR_pciconfig_read 148 /* ENOSYS under SunOS */
#define TARGET_NR_pciconfig_write 149 /* ENOSYS under SunOS */
#define TARGET_NR_getsockname 150 /* Common */
#define TARGET_NR_inotify_init 151
#define TARGET_NR_inotify_add_watch 152
#define TARGET_NR_poll 153 /* Common */
#define TARGET_NR_getdents64 154 /* Linux specific */
#define TARGET_NR_fcntl64 155 /* Linux sparc32 Specific */
#define TARGET_NR_inotify_rm_watch 156
#define TARGET_NR_statfs 157 /* Common */
#define TARGET_NR_fstatfs 158 /* Common */
#define TARGET_NR_umount 159 /* Common */
#define TARGET_NR_sched_set_affinity 160
#define TARGET_NR_sched_get_affinity 161
#define TARGET_NR_getdomainname 162 /* SunOS Specific */
#define TARGET_NR_setdomainname 163 /* Common */
#define TARGET_NR_quotactl 165 /* Common */
#define TARGET_NR_set_tid_address 166 /* Linux specific, exportfs under SunOS */
#define TARGET_NR_mount 167 /* Common */
#define TARGET_NR_ustat 168 /* Common */
#define TARGET_NR_setxattr 169
#define TARGET_NR_lsetxattr 170
#define TARGET_NR_fsetxattr 171
#define TARGET_NR_getxattr 172
#define TARGET_NR_lgetxattr 173
#define TARGET_NR_getdents 174 /* Common */
#define TARGET_NR_setsid 175 /* Common */
#define TARGET_NR_fchdir 176 /* Common */
#define TARGET_NR_fgetxattr 177
#define TARGET_NR_listxattr 178
#define TARGET_NR_llistxattr 179
#define TARGET_NR_flistxattr 180
#define TARGET_NR_removexattr 181
#define TARGET_NR_lremovexattr 182
#define TARGET_NR_sigpending 183 /* Common */
#define TARGET_NR_query_module 184 /* Linux Specific */
#define TARGET_NR_setpgid 185 /* Common */
#define TARGET_NR_fremovexattr 186
#define TARGET_NR_tkill 187 /* SunOS: fpathconf */
#define TARGET_NR_exit_group 188 /* Linux specific, sysconf undef SunOS */
#define TARGET_NR_uname 189 /* Linux Specific */
#define TARGET_NR_init_module 190 /* Linux Specific */
#define TARGET_NR_personality 191 /* Linux Specific */
#define TARGET_NR_remap_file_pages 192
#define TARGET_NR_epoll_create 193
#define TARGET_NR_epoll_ctl 194
#define TARGET_NR_epoll_wait 195
#define TARGET_NR_ioprio_set 196
#define TARGET_NR_getppid 197 /* Linux Specific */
#define TARGET_NR_sigaction 198 /* Linux Specific */
#define TARGET_NR_sgetmask 199 /* Linux Specific */
@ -189,6 +213,7 @@
#define TARGET_NR_ipc 215 /* Linux Specific */
#define TARGET_NR_sigreturn 216 /* Linux Specific */
#define TARGET_NR_clone 217 /* Linux Specific */
#define TARGET_NR_ioprio_get 218
#define TARGET_NR_adjtimex 219 /* Linux Specific */
#define TARGET_NR_sigprocmask 220 /* Linux Specific */
#define TARGET_NR_create_module 221 /* Linux Specific */
@ -202,6 +227,7 @@
#define TARGET_NR_setfsgid 229 /* Linux Specific */
#define TARGET_NR__newselect 230 /* Linux Specific */
#define TARGET_NR_time 231 /* Linux Specific */
#define TARGET_NR_splice 232
#define TARGET_NR_stime 233 /* Linux Specific */
#define TARGET_NR_statfs64 234 /* Linux Specific */
#define TARGET_NR_fstatfs64 235 /* Linux Specific */
@ -224,7 +250,7 @@
#define TARGET_NR_getsid 252
#define TARGET_NR_fdatasync 253
#define TARGET_NR_nfsservctl 254
#define TARGET_NR_aplib 255
#define TARGET_NR_sync_file_range 255
#define TARGET_NR_clock_settime 256
#define TARGET_NR_clock_gettime 257
#define TARGET_NR_clock_getres 258
@ -326,3 +352,7 @@
#define TARGET_NR_listen 354
#define TARGET_NR_setsockopt 355
#define TARGET_NR_mlock2 356
#define TARGET_NR_copy_file_range 357
#define TARGET_NR_preadv2 358
#define TARGET_NR_pwritev2 359
#define TARGET_NR_statx 360

View File

@ -0,0 +1,207 @@
#ifndef SPARC_TARGET_ERRNO_H
#define SPARC_TARGET_ERRNO_H
/* Target errno definitions taken from asm-sparc/errno.h */
#undef TARGET_EWOULDBLOCK
#define TARGET_EWOULDBLOCK TARGET_EAGAIN /* Operation would block */
#undef TARGET_EINPROGRESS
#define TARGET_EINPROGRESS 36 /* Operation now in progress */
#undef TARGET_EALREADY
#define TARGET_EALREADY 37 /* Operation already in progress */
#undef TARGET_ENOTSOCK
#define TARGET_ENOTSOCK 38 /* Socket operation on non-socket */
#undef TARGET_EDESTADDRREQ
#define TARGET_EDESTADDRREQ 39 /* Destination address required */
#undef TARGET_EMSGSIZE
#define TARGET_EMSGSIZE 40 /* Message too long */
#undef TARGET_EPROTOTYPE
#define TARGET_EPROTOTYPE 41 /* Protocol wrong type for socket */
#undef TARGET_ENOPROTOOPT
#define TARGET_ENOPROTOOPT 42 /* Protocol not available */
#undef TARGET_EPROTONOSUPPORT
#define TARGET_EPROTONOSUPPORT 43 /* Protocol not supported */
#undef TARGET_ESOCKTNOSUPPORT
#define TARGET_ESOCKTNOSUPPORT 44 /* Socket type not supported */
#undef TARGET_EOPNOTSUPP
#define TARGET_EOPNOTSUPP 45 /* Op not supported on transport endpoint */
#undef TARGET_EPFNOSUPPORT
#define TARGET_EPFNOSUPPORT 46 /* Protocol family not supported */
#undef TARGET_EAFNOSUPPORT
#define TARGET_EAFNOSUPPORT 47 /* Address family not supported by protocol */
#undef TARGET_EADDRINUSE
#define TARGET_EADDRINUSE 48 /* Address already in use */
#undef TARGET_EADDRNOTAVAIL
#define TARGET_EADDRNOTAVAIL 49 /* Cannot assign requested address */
#undef TARGET_ENETDOWN
#define TARGET_ENETDOWN 50 /* Network is down */
#undef TARGET_ENETUNREACH
#define TARGET_ENETUNREACH 51 /* Network is unreachable */
#undef TARGET_ENETRESET
#define TARGET_ENETRESET 52 /* Net dropped connection because of reset */
#undef TARGET_ECONNABORTED
#define TARGET_ECONNABORTED 53 /* Software caused connection abort */
#undef TARGET_ECONNRESET
#define TARGET_ECONNRESET 54 /* Connection reset by peer */
#undef TARGET_ENOBUFS
#define TARGET_ENOBUFS 55 /* No buffer space available */
#undef TARGET_EISCONN
#define TARGET_EISCONN 56 /* Transport endpoint is already connected */
#undef TARGET_ENOTCONN
#define TARGET_ENOTCONN 57 /* Transport endpoint is not connected */
#undef TARGET_ESHUTDOWN
#define TARGET_ESHUTDOWN 58 /* No send after transport endpoint shutdown*/
#undef TARGET_ETOOMANYREFS
#define TARGET_ETOOMANYREFS 59 /* Too many references: cannot splice */
#undef TARGET_ETIMEDOUT
#define TARGET_ETIMEDOUT 60 /* Connection timed out */
#undef TARGET_ECONNREFUSED
#define TARGET_ECONNREFUSED 61 /* Connection refused */
#undef TARGET_ELOOP
#define TARGET_ELOOP 62 /* Too many symbolic links encountered */
#undef TARGET_ENAMETOOLONG
#define TARGET_ENAMETOOLONG 63 /* File name too long */
#undef TARGET_EHOSTDOWN
#define TARGET_EHOSTDOWN 64 /* Host is down */
#undef TARGET_EHOSTUNREACH
#define TARGET_EHOSTUNREACH 65 /* No route to host */
#undef TARGET_ENOTEMPTY
#define TARGET_ENOTEMPTY 66 /* Directory not empty */
#undef TARGET_EPROCLIM
#define TARGET_EPROCLIM 67 /* SUNOS: Too many processes */
#undef TARGET_EUSERS
#define TARGET_EUSERS 68 /* Too many users */
#undef TARGET_EDQUOT
#define TARGET_EDQUOT 69 /* Quota exceeded */
#undef TARGET_ESTALE
#define TARGET_ESTALE 70 /* Stale file handle */
#undef TARGET_EREMOTE
#define TARGET_EREMOTE 71 /* Object is remote */
#undef TARGET_ENOSTR
#define TARGET_ENOSTR 72 /* Device not a stream */
#undef TARGET_ETIME
#define TARGET_ETIME 73 /* Timer expired */
#undef TARGET_ENOSR
#define TARGET_ENOSR 74 /* Out of streams resources */
#undef TARGET_ENOMSG
#define TARGET_ENOMSG 75 /* No message of desired type */
#undef TARGET_EBADMSG
#define TARGET_EBADMSG 76 /* Not a data message */
#undef TARGET_EIDRM
#define TARGET_EIDRM 77 /* Identifier removed */
#undef TARGET_EDEADLK
#define TARGET_EDEADLK 78 /* Resource deadlock would occur */
#undef TARGET_ENOLCK
#define TARGET_ENOLCK 79 /* No record locks available */
#undef TARGET_ENONET
#define TARGET_ENONET 80 /* Machine is not on the network */
#undef TARGET_ERREMOTE
#define TARGET_ERREMOTE 81 /* SunOS: Too many lvls of remote in path */
#undef TARGET_ENOLINK
#define TARGET_ENOLINK 82 /* Link has been severed */
#undef TARGET_EADV
#define TARGET_EADV 83 /* Advertise error */
#undef TARGET_ESRMNT
#define TARGET_ESRMNT 84 /* Srmount error */
#undef TARGET_ECOMM
#define TARGET_ECOMM 85 /* Communication error on send */
#undef TARGET_EPROTO
#define TARGET_EPROTO 86 /* Protocol error */
#undef TARGET_EMULTIHOP
#define TARGET_EMULTIHOP 87 /* Multihop attempted */
#undef TARGET_EDOTDOT
#define TARGET_EDOTDOT 88 /* RFS specific error */
#undef TARGET_EREMCHG
#define TARGET_EREMCHG 89 /* Remote address changed */
#undef TARGET_ENOSYS
#define TARGET_ENOSYS 90 /* Function not implemented */
#undef TARGET_ESTRPIPE
#define TARGET_ESTRPIPE 91 /* Streams pipe error */
#undef TARGET_EOVERFLOW
#define TARGET_EOVERFLOW 92 /* Value too large for defined data type */
#undef TARGET_EBADFD
#define TARGET_EBADFD 93 /* File descriptor in bad state */
#undef TARGET_ECHRNG
#define TARGET_ECHRNG 94 /* Channel number out of range */
#undef TARGET_EL2NSYNC
#define TARGET_EL2NSYNC 95 /* Level 2 not synchronized */
#undef TARGET_EL3HLT
#define TARGET_EL3HLT 96 /* Level 3 halted */
#undef TARGET_EL3RST
#define TARGET_EL3RST 97 /* Level 3 reset */
#undef TARGET_ELNRNG
#define TARGET_ELNRNG 98 /* Link number out of range */
#undef TARGET_EUNATCH
#define TARGET_EUNATCH 99 /* Protocol driver not attached */
#undef TARGET_ENOCSI
#define TARGET_ENOCSI 100 /* No CSI structure available */
#undef TARGET_EL2HLT
#define TARGET_EL2HLT 101 /* Level 2 halted */
#undef TARGET_EBADE
#define TARGET_EBADE 102 /* Invalid exchange */
#undef TARGET_EBADR
#define TARGET_EBADR 103 /* Invalid request descriptor */
#undef TARGET_EXFULL
#define TARGET_EXFULL 104 /* Exchange full */
#undef TARGET_ENOANO
#define TARGET_ENOANO 105 /* No anode */
#undef TARGET_EBADRQC
#define TARGET_EBADRQC 106 /* Invalid request code */
#undef TARGET_EBADSLT
#define TARGET_EBADSLT 107 /* Invalid slot */
#undef TARGET_EDEADLOCK
#define TARGET_EDEADLOCK 108 /* File locking deadlock error */
#undef TARGET_EBFONT
#define TARGET_EBFONT 109 /* Bad font file format */
#undef TARGET_ELIBEXEC
#define TARGET_ELIBEXEC 110 /* Cannot exec a shared library directly */
#undef TARGET_ENODATA
#define TARGET_ENODATA 111 /* No data available */
#undef TARGET_ELIBBAD
#define TARGET_ELIBBAD 112 /* Accessing a corrupted shared library */
#undef TARGET_ENOPKG
#define TARGET_ENOPKG 113 /* Package not installed */
#undef TARGET_ELIBACC
#define TARGET_ELIBACC 114 /* Can not access a needed shared library */
#undef TARGET_ENOTUNIQ
#define TARGET_ENOTUNIQ 115 /* Name not unique on network */
#undef TARGET_ERESTART
#define TARGET_ERESTART 116 /* Interrupted syscall should be restarted */
#undef TARGET_EUCLEAN
#define TARGET_EUCLEAN 117 /* Structure needs cleaning */
#undef TARGET_ENOTNAM
#define TARGET_ENOTNAM 118 /* Not a XENIX named type file */
#undef TARGET_ENAVAIL
#define TARGET_ENAVAIL 119 /* No XENIX semaphores available */
#undef TARGET_EISNAM
#define TARGET_EISNAM 120 /* Is a named type file */
#undef TARGET_EREMOTEIO
#define TARGET_EREMOTEIO 121 /* Remote I/O error */
#undef TARGET_EILSEQ
#define TARGET_EILSEQ 122 /* Illegal byte sequence */
#undef TARGET_ELIBMAX
#define TARGET_ELIBMAX 123 /* Atmpt to link in too many shared libs */
#undef TARGET_ELIBSCN
#define TARGET_ELIBSCN 124 /* .lib section in a.out corrupted */
#undef TARGET_ENOMEDIUM
#define TARGET_ENOMEDIUM 125 /* No medium found */
#undef TARGET_EMEDIUMTYPE
#define TARGET_EMEDIUMTYPE 126 /* Wrong medium type */
#undef TARGET_ECANCELED
#define TARGET_ECANCELED 127 /* Operation Cancelled */
#undef TARGET_ENOKEY
#define TARGET_ENOKEY 128 /* Required key not available */
#undef TARGET_EKEYEXPIRED
#define TARGET_EKEYEXPIRED 129 /* Key has expired */
#undef TARGET_EKEYREVOKED
#define TARGET_EKEYREVOKED 130 /* Key has been revoked */
#undef TARGET_EKEYREJECTED
#define TARGET_EKEYREJECTED 131 /* Key was rejected by service */
#undef TARGET_EOWNERDEAD
#define TARGET_EOWNERDEAD 132 /* Owner died */
#undef TARGET_ENOTRECOVERABLE
#define TARGET_ENOTRECOVERABLE 133 /* State not recoverable */
#undef TARGET_ERFKILL
#define TARGET_ERFKILL 134 /* Operation not possible due to RF-kill */
#undef TARGET_EHWPOISON
#define TARGET_EHWPOISON 135 /* Memory page has hardware error */
#endif

View File

@ -1,6 +1,8 @@
#ifndef SPARC_TARGET_SYSCALL_H
#define SPARC_TARGET_SYSCALL_H
#include "target_errno.h"
struct target_pt_regs {
abi_ulong psr;
abi_ulong pc;
@ -9,7 +11,7 @@ struct target_pt_regs {
abi_ulong u_regs[16];
};
#define UNAME_MACHINE "sun4"
#define UNAME_MACHINE "sparc"
#define UNAME_MINIMUM_RELEASE "2.6.32"
/* SPARC kernels don't define this in their Kconfig, but they have the

View File

@ -23,7 +23,7 @@
#define TARGET_NR_capset 22 /* Linux Specific */
#define TARGET_NR_setuid 23 /* Implemented via setreuid in SunOS */
#define TARGET_NR_getuid 24 /* Common */
/* #define TARGET_NR_time alias 25 ENOSYS under SunOS */
#define TARGET_NR_vmsplice 25
#define TARGET_NR_ptrace 26 /* Common */
#define TARGET_NR_alarm 27 /* Implemented via setitimer in SunOS */
#define TARGET_NR_sigaltstack 28 /* Common */
@ -149,8 +149,8 @@
#define TARGET_NR_pciconfig_read 148 /* ENOSYS under SunOS */
#define TARGET_NR_pciconfig_write 149 /* ENOSYS under SunOS */
#define TARGET_NR_getsockname 150 /* Common */
/* #define TARGET_NR_getmsg 151 SunOS Specific */
/* #define TARGET_NR_putmsg 152 SunOS Specific */
#define TARGET_NR_inotify_init 151
#define TARGET_NR_inotify_add_watch 152
#define TARGET_NR_poll 153 /* Common */
#define TARGET_NR_getdents64 154 /* Linux specific */
#define TARGET_NR_fcntl64 155 /* Linux sparc32 Specific */
@ -194,7 +194,7 @@
#define TARGET_NR_epoll_create 193 /* Linux Specific */
#define TARGET_NR_epoll_ctl 194 /* Linux Specific */
#define TARGET_NR_epoll_wait 195 /* Linux Specific */
/* #define TARGET_NR_ulimit 196 Linux Specific */
#define TARGET_NR_ioprio_set 196
#define TARGET_NR_getppid 197 /* Linux Specific */
#define TARGET_NR_sigaction 198 /* Linux Specific */
#define TARGET_NR_sgetmask 199 /* Linux Specific */
@ -216,7 +216,7 @@
#define TARGET_NR_ipc 215 /* Linux Specific */
#define TARGET_NR_sigreturn 216 /* Linux Specific */
#define TARGET_NR_clone 217 /* Linux Specific */
/* #define TARGET_NR_modify_ldt 218 Linux Specific - i386 specific, unused */
#define TARGET_NR_ioprio_get 218
#define TARGET_NR_adjtimex 219 /* Linux Specific */
#define TARGET_NR_sigprocmask 220 /* Linux Specific */
#define TARGET_NR_create_module 221 /* Linux Specific */
@ -230,7 +230,7 @@
#define TARGET_NR_setfsgid 229 /* Linux Specific */
#define TARGET_NR__newselect 230 /* Linux Specific */
#define TARGET_NR_time 231 /* Linux sparc32 */
/* #define TARGET_NR_oldstat 232 Linux Specific */
#define TARGET_NR_splice 232
#define TARGET_NR_stime 233 /* Linux Specific */
#define TARGET_NR_statfs64 234 /* Linux Specific */
#define TARGET_NR_fstatfs64 235 /* Linux Specific */
@ -253,7 +253,7 @@
#define TARGET_NR_getsid 252
#define TARGET_NR_fdatasync 253
#define TARGET_NR_nfsservctl 254
#define TARGET_NR_aplib 255
#define TARGET_NR_sync_file_range 255
#define TARGET_NR_clock_settime 256
#define TARGET_NR_clock_gettime 257
#define TARGET_NR_clock_getres 258
@ -310,7 +310,7 @@
#define TARGET_NR_epoll_pwait 309
#define TARGET_NR_utimensat 310
#define TARGET_NR_signalfd 311
#define TARGET_NR_timerfd 312
#define TARGET_NR_timerfd_create 312
#define TARGET_NR_eventfd 313
#define TARGET_NR_fallocate 314
#define TARGET_NR_timerfd_settime 315
@ -355,3 +355,7 @@
#define TARGET_NR_listen 354
#define TARGET_NR_setsockopt 355
#define TARGET_NR_mlock2 356
#define TARGET_NR_copy_file_range 357
#define TARGET_NR_preadv2 358
#define TARGET_NR_pwritev2 359
#define TARGET_NR_statx 360

View File

@ -1,6 +1,8 @@
#ifndef SPARC64_TARGET_SYSCALL_H
#define SPARC64_TARGET_SYSCALL_H
#include "../sparc/target_errno.h"
struct target_pt_regs {
abi_ulong u_regs[16];
abi_ulong tstate;
@ -10,7 +12,7 @@ struct target_pt_regs {
abi_ulong fprs;
};
#define UNAME_MACHINE "sun4u"
#define UNAME_MACHINE "sparc64"
#define UNAME_MINIMUM_RELEASE "2.6.32"
/* SPARC kernels don't define this in their Kconfig, but they have the
@ -29,5 +31,4 @@ static inline abi_ulong target_shmlba(CPUSPARCState *env)
{
return MAX(TARGET_PAGE_SIZE, 16 * 1024);
}
#endif /* SPARC64_TARGET_SYSCALL_H */

View File

@ -6546,28 +6546,50 @@ static int target_to_host_fcntl_cmd(int cmd)
return -TARGET_EINVAL;
}
#define TRANSTBL_CONVERT(a) { -1, TARGET_##a, -1, a }
static const bitmask_transtbl flock_tbl[] = {
TRANSTBL_CONVERT(F_RDLCK),
TRANSTBL_CONVERT(F_WRLCK),
TRANSTBL_CONVERT(F_UNLCK),
TRANSTBL_CONVERT(F_EXLCK),
TRANSTBL_CONVERT(F_SHLCK),
{ 0, 0, 0, 0 }
};
#define FLOCK_TRANSTBL \
switch (type) { \
TRANSTBL_CONVERT(F_RDLCK); \
TRANSTBL_CONVERT(F_WRLCK); \
TRANSTBL_CONVERT(F_UNLCK); \
TRANSTBL_CONVERT(F_EXLCK); \
TRANSTBL_CONVERT(F_SHLCK); \
}
static int target_to_host_flock(int type)
{
#define TRANSTBL_CONVERT(a) case TARGET_##a: return a
FLOCK_TRANSTBL
#undef TRANSTBL_CONVERT
return -TARGET_EINVAL;
}
static int host_to_target_flock(int type)
{
#define TRANSTBL_CONVERT(a) case a: return TARGET_##a
FLOCK_TRANSTBL
#undef TRANSTBL_CONVERT
/* if we don't know how to convert the value coming
* from the host we copy to the target field as-is
*/
return type;
}
static inline abi_long copy_from_user_flock(struct flock64 *fl,
abi_ulong target_flock_addr)
{
struct target_flock *target_fl;
short l_type;
int l_type;
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
return -TARGET_EFAULT;
}
__get_user(l_type, &target_fl->l_type);
fl->l_type = target_to_host_bitmask(l_type, flock_tbl);
l_type = target_to_host_flock(l_type);
if (l_type < 0) {
return l_type;
}
fl->l_type = l_type;
__get_user(fl->l_whence, &target_fl->l_whence);
__get_user(fl->l_start, &target_fl->l_start);
__get_user(fl->l_len, &target_fl->l_len);
@ -6586,7 +6608,7 @@ static inline abi_long copy_to_user_flock(abi_ulong target_flock_addr,
return -TARGET_EFAULT;
}
l_type = host_to_target_bitmask(fl->l_type, flock_tbl);
l_type = host_to_target_flock(fl->l_type);
__put_user(l_type, &target_fl->l_type);
__put_user(fl->l_whence, &target_fl->l_whence);
__put_user(fl->l_start, &target_fl->l_start);
@ -6604,14 +6626,18 @@ static inline abi_long copy_from_user_oabi_flock64(struct flock64 *fl,
abi_ulong target_flock_addr)
{
struct target_oabi_flock64 *target_fl;
short l_type;
int l_type;
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
return -TARGET_EFAULT;
}
__get_user(l_type, &target_fl->l_type);
fl->l_type = target_to_host_bitmask(l_type, flock_tbl);
l_type = target_to_host_flock(l_type);
if (l_type < 0) {
return l_type;
}
fl->l_type = l_type;
__get_user(fl->l_whence, &target_fl->l_whence);
__get_user(fl->l_start, &target_fl->l_start);
__get_user(fl->l_len, &target_fl->l_len);
@ -6630,7 +6656,7 @@ static inline abi_long copy_to_user_oabi_flock64(abi_ulong target_flock_addr,
return -TARGET_EFAULT;
}
l_type = host_to_target_bitmask(fl->l_type, flock_tbl);
l_type = host_to_target_flock(fl->l_type);
__put_user(l_type, &target_fl->l_type);
__put_user(fl->l_whence, &target_fl->l_whence);
__put_user(fl->l_start, &target_fl->l_start);
@ -6645,14 +6671,18 @@ static inline abi_long copy_from_user_flock64(struct flock64 *fl,
abi_ulong target_flock_addr)
{
struct target_flock64 *target_fl;
short l_type;
int l_type;
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
return -TARGET_EFAULT;
}
__get_user(l_type, &target_fl->l_type);
fl->l_type = target_to_host_bitmask(l_type, flock_tbl);
l_type = target_to_host_flock(l_type);
if (l_type < 0) {
return l_type;
}
fl->l_type = l_type;
__get_user(fl->l_whence, &target_fl->l_whence);
__get_user(fl->l_start, &target_fl->l_start);
__get_user(fl->l_len, &target_fl->l_len);
@ -6671,7 +6701,7 @@ static inline abi_long copy_to_user_flock64(abi_ulong target_flock_addr,
return -TARGET_EFAULT;
}
l_type = host_to_target_bitmask(fl->l_type, flock_tbl);
l_type = host_to_target_flock(fl->l_type);
__put_user(l_type, &target_fl->l_type);
__put_user(fl->l_whence, &target_fl->l_whence);
__put_user(fl->l_start, &target_fl->l_start);

View File

@ -2441,6 +2441,15 @@ struct target_statfs64 {
#define TARGET_F_SETLKW 7
#define TARGET_F_GETOWN 11 /* for sockets. */
#define TARGET_F_SETOWN 12 /* for sockets. */
#elif defined(TARGET_SPARC)
#define TARGET_F_RDLCK 1
#define TARGET_F_WRLCK 2
#define TARGET_F_UNLCK 3
#define TARGET_F_GETOWN 5 /* for sockets. */
#define TARGET_F_SETOWN 6 /* for sockets. */
#define TARGET_F_GETLK 7
#define TARGET_F_SETLK 8
#define TARGET_F_SETLKW 9
#else
#define TARGET_F_GETLK 5
#define TARGET_F_SETLK 6
@ -2634,6 +2643,17 @@ struct target_statfs64 {
#define TARGET_O_SYNC (TARGET___O_SYNC | TARGET_O_DSYNC)
#endif
#if defined(TARGET_SPARC)
#define TARGET_ARCH_FLOCK_PAD abi_short __unused;
#define TARGET_ARCH_FLOCK64_PAD abi_short __unused;
#elif defined(TARGET_MIPS)
#define TARGET_ARCH_FLOCK_PAD abi_long pad[4];
#define TARGET_ARCH_FLOCK64_PAD
#else
#define TARGET_ARCH_FLOCK_PAD
#define TARGET_ARCH_FLOCK64_PAD
#endif
struct target_flock {
short l_type;
short l_whence;
@ -2643,9 +2663,7 @@ struct target_flock {
abi_long l_sysid;
#endif
int l_pid;
#if defined(TARGET_MIPS)
abi_long pad[4];
#endif
TARGET_ARCH_FLOCK_PAD
};
struct target_flock64 {
@ -2654,6 +2672,7 @@ struct target_flock64 {
abi_llong l_start;
abi_llong l_len;
abi_int l_pid;
TARGET_ARCH_FLOCK64_PAD
};
struct target_f_owner_ex {