mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
02e5d7d78e
This patch implements strace argument printing functionality for following syscalls: * mlock, munlock, mlockall, munlockall - lock and unlock memory int mlock(const void *addr, size_t len) int munlock(const void *addr, size_t len) int mlockall(int flags) int munlockall(void) man page: https://man7.org/linux/man-pages/man2/mlock.2.html Implementation notes: Syscall mlockall() takes an argument that is composed of predefined values which represent flags that determine the type of locking operation that is to be performed. For that reason, a printing function "print_mlockall" was stated in file "strace.list". This printing function uses an already existing function "print_flags()" to print the "flags" argument. These flags are stated inside an array "mlockall_flags" that contains values of type "struct flags". These values are instantiated using an existing macro "FLAG_TARGET()" that crates aproppriate target flag values based on those defined in files '/target_syscall.h'. These target flag values were changed from "TARGET_MLOCKALL_MCL*" to "TARGET_MCL_*" so that they can be aproppriately set and recognised in "strace.c" with "FLAG_TARGET()". Value for "MCL_ONFAULT" was added in this patch. This value was also added in "syscall.c" in function "target_to_host_mlockall_arg()". Because this flag value was added in kernel version 4.4, it is enwrapped in an #ifdef directive (both in "syscall.c" and in "strace.c") as to support older kernel versions. The other syscalls have only primitive argument types, so the rest of the implementation was handled by stating an appropriate printing format in file "strace.list". Syscall mlock2() is not implemented in "syscall.c" and thus it's argument printing is not implemented in this patch. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20200811164553.27713-4-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
255 lines
10 KiB
C
255 lines
10 KiB
C
#ifndef MIPS_TARGET_SYSCALL_H
|
|
#define MIPS_TARGET_SYSCALL_H
|
|
|
|
/* this struct defines the way the registers are stored on the
|
|
stack during a system call. */
|
|
|
|
struct target_pt_regs {
|
|
/* Pad bytes for argument save space on the stack. */
|
|
abi_ulong pad0[6];
|
|
|
|
/* Saved main processor registers. */
|
|
abi_ulong regs[32];
|
|
|
|
/* Saved special registers. */
|
|
abi_ulong cp0_status;
|
|
abi_ulong lo;
|
|
abi_ulong hi;
|
|
abi_ulong cp0_badvaddr;
|
|
abi_ulong cp0_cause;
|
|
abi_ulong cp0_epc;
|
|
};
|
|
|
|
/* Target errno definitions taken from asm-mips/errno.h */
|
|
#undef TARGET_ENOMSG
|
|
#define TARGET_ENOMSG 35 /* Identifier removed */
|
|
#undef TARGET_EIDRM
|
|
#define TARGET_EIDRM 36 /* Identifier removed */
|
|
#undef TARGET_ECHRNG
|
|
#define TARGET_ECHRNG 37 /* Channel number out of range */
|
|
#undef TARGET_EL2NSYNC
|
|
#define TARGET_EL2NSYNC 38 /* Level 2 not synchronized */
|
|
#undef TARGET_EL3HLT
|
|
#define TARGET_EL3HLT 39 /* Level 3 halted */
|
|
#undef TARGET_EL3RST
|
|
#define TARGET_EL3RST 40 /* Level 3 reset */
|
|
#undef TARGET_ELNRNG
|
|
#define TARGET_ELNRNG 41 /* Link number out of range */
|
|
#undef TARGET_EUNATCH
|
|
#define TARGET_EUNATCH 42 /* Protocol driver not attached */
|
|
#undef TARGET_ENOCSI
|
|
#define TARGET_ENOCSI 43 /* No CSI structure available */
|
|
#undef TARGET_EL2HLT
|
|
#define TARGET_EL2HLT 44 /* Level 2 halted */
|
|
#undef TARGET_EDEADLK
|
|
#define TARGET_EDEADLK 45 /* Resource deadlock would occur */
|
|
#undef TARGET_ENOLCK
|
|
#define TARGET_ENOLCK 46 /* No record locks available */
|
|
#undef TARGET_EBADE
|
|
#define TARGET_EBADE 50 /* Invalid exchange */
|
|
#undef TARGET_EBADR
|
|
#define TARGET_EBADR 51 /* Invalid request descriptor */
|
|
#undef TARGET_EXFULL
|
|
#define TARGET_EXFULL 52 /* TARGET_Exchange full */
|
|
#undef TARGET_ENOANO
|
|
#define TARGET_ENOANO 53 /* No anode */
|
|
#undef TARGET_EBADRQC
|
|
#define TARGET_EBADRQC 54 /* Invalid request code */
|
|
#undef TARGET_EBADSLT
|
|
#define TARGET_EBADSLT 55 /* Invalid slot */
|
|
#undef TARGET_EDEADLOCK
|
|
#define TARGET_EDEADLOCK 56 /* File locking deadlock error */
|
|
#undef TARGET_EBFONT
|
|
#define TARGET_EBFONT 59 /* Bad font file format */
|
|
#undef TARGET_ENOSTR
|
|
#define TARGET_ENOSTR 60 /* Device not a stream */
|
|
#undef TARGET_ENODATA
|
|
#define TARGET_ENODATA 61 /* No data available */
|
|
#undef TARGET_ETIME
|
|
#define TARGET_ETIME 62 /* Timer expired */
|
|
#undef TARGET_ENOSR
|
|
#define TARGET_ENOSR 63 /* Out of streams resources */
|
|
#undef TARGET_ENONET
|
|
#define TARGET_ENONET 64 /* Machine is not on the network */
|
|
#undef TARGET_ENOPKG
|
|
#define TARGET_ENOPKG 65 /* Package not installed */
|
|
#undef TARGET_EREMOTE
|
|
#define TARGET_EREMOTE 66 /* Object is remote */
|
|
#undef TARGET_ENOLINK
|
|
#define TARGET_ENOLINK 67 /* Link has been severed */
|
|
#undef TARGET_EADV
|
|
#define TARGET_EADV 68 /* Advertise error */
|
|
#undef TARGET_ESRMNT
|
|
#define TARGET_ESRMNT 69 /* Srmount error */
|
|
#undef TARGET_ECOMM
|
|
#define TARGET_ECOMM 70 /* Communication error on send */
|
|
#undef TARGET_EPROTO
|
|
#define TARGET_EPROTO 71 /* Protocol error */
|
|
#undef TARGET_EDOTDOT
|
|
#define TARGET_EDOTDOT 73 /* RFS specific error */
|
|
#undef TARGET_EMULTIHOP
|
|
#define TARGET_EMULTIHOP 74 /* Multihop attempted */
|
|
#undef TARGET_EBADMSG
|
|
#define TARGET_EBADMSG 77 /* Not a data message */
|
|
#undef TARGET_ENAMETOOLONG
|
|
#define TARGET_ENAMETOOLONG 78 /* File name too long */
|
|
#undef TARGET_EOVERFLOW
|
|
#define TARGET_EOVERFLOW 79 /* Value too large for defined data type */
|
|
#undef TARGET_ENOTUNIQ
|
|
#define TARGET_ENOTUNIQ 80 /* Name not unique on network */
|
|
#undef TARGET_EBADFD
|
|
#define TARGET_EBADFD 81 /* File descriptor in bad state */
|
|
#undef TARGET_EREMCHG
|
|
#define TARGET_EREMCHG 82 /* Remote address changed */
|
|
#undef TARGET_ELIBACC
|
|
#define TARGET_ELIBACC 83 /* Can not access a needed shared library */
|
|
#undef TARGET_ELIBBAD
|
|
#define TARGET_ELIBBAD 84 /* Accessing a corrupted shared library */
|
|
#undef TARGET_ELIBSCN
|
|
#define TARGET_ELIBSCN 85 /* .lib section in a.out corrupted */
|
|
#undef TARGET_ELIBMAX
|
|
#define TARGET_ELIBMAX 86 /* Attempting to link in too many shared libraries */
|
|
#undef TARGET_ELIBEXEC
|
|
#define TARGET_ELIBEXEC 87 /* Cannot exec a shared library directly */
|
|
#undef TARGET_EILSEQ
|
|
#define TARGET_EILSEQ 88 /* Illegal byte sequence */
|
|
#undef TARGET_ENOSYS
|
|
#define TARGET_ENOSYS 89 /* Function not implemented */
|
|
#undef TARGET_ELOOP
|
|
#define TARGET_ELOOP 90 /* Too many symbolic links encountered */
|
|
#undef TARGET_ERESTART
|
|
#define TARGET_ERESTART 91 /* Interrupted system call should be restarted */
|
|
#undef TARGET_ESTRPIPE
|
|
#define TARGET_ESTRPIPE 92 /* Streams pipe error */
|
|
#undef TARGET_ENOTEMPTY
|
|
#define TARGET_ENOTEMPTY 93 /* Directory not empty */
|
|
#undef TARGET_EUSERS
|
|
#define TARGET_EUSERS 94 /* Too many users */
|
|
#undef TARGET_ENOTSOCK
|
|
#define TARGET_ENOTSOCK 95 /* Socket operation on non-socket */
|
|
#undef TARGET_EDESTADDRREQ
|
|
#define TARGET_EDESTADDRREQ 96 /* Destination address required */
|
|
#undef TARGET_EMSGSIZE
|
|
#define TARGET_EMSGSIZE 97 /* Message too long */
|
|
#undef TARGET_EPROTOTYPE
|
|
#define TARGET_EPROTOTYPE 98 /* Protocol wrong type for socket */
|
|
#undef TARGET_ENOPROTOOPT
|
|
#define TARGET_ENOPROTOOPT 99 /* Protocol not available */
|
|
#undef TARGET_EPROTONOSUPPORT
|
|
#define TARGET_EPROTONOSUPPORT 120 /* Protocol not supported */
|
|
#undef TARGET_ESOCKTNOSUPPORT
|
|
#define TARGET_ESOCKTNOSUPPORT 121 /* Socket type not supported */
|
|
#undef TARGET_EOPNOTSUPP
|
|
#define TARGET_EOPNOTSUPP 122 /* Operation not supported on transport endpoint */
|
|
#undef TARGET_EPFNOSUPPORT
|
|
#define TARGET_EPFNOSUPPORT 123 /* Protocol family not supported */
|
|
#undef TARGET_EAFNOSUPPORT
|
|
#define TARGET_EAFNOSUPPORT 124 /* Address family not supported by protocol */
|
|
#undef TARGET_EADDRINUSE
|
|
#define TARGET_EADDRINUSE 125 /* Address already in use */
|
|
#undef TARGET_EADDRNOTAVAIL
|
|
#define TARGET_EADDRNOTAVAIL 126 /* Cannot assign requested address */
|
|
#undef TARGET_ENETDOWN
|
|
#define TARGET_ENETDOWN 127 /* Network is down */
|
|
#undef TARGET_ENETUNREACH
|
|
#define TARGET_ENETUNREACH 128 /* Network is unreachable */
|
|
#undef TARGET_ENETRESET
|
|
#define TARGET_ENETRESET 129 /* Network dropped connection because of reset */
|
|
#undef TARGET_ECONNABORTED
|
|
#define TARGET_ECONNABORTED 130 /* Software caused connection abort */
|
|
#undef TARGET_ECONNRESET
|
|
#define TARGET_ECONNRESET 131 /* Connection reset by peer */
|
|
#undef TARGET_ENOBUFS
|
|
#define TARGET_ENOBUFS 132 /* No buffer space available */
|
|
#undef TARGET_EISCONN
|
|
#define TARGET_EISCONN 133 /* Transport endpoint is already connected */
|
|
#undef TARGET_ENOTCONN
|
|
#define TARGET_ENOTCONN 134 /* Transport endpoint is not connected */
|
|
#undef TARGET_EUCLEAN
|
|
#define TARGET_EUCLEAN 135 /* Structure needs cleaning */
|
|
#undef TARGET_ENOTNAM
|
|
#define TARGET_ENOTNAM 137 /* Not a XENIX named type file */
|
|
#undef TARGET_ENAVAIL
|
|
#define TARGET_ENAVAIL 138 /* No XENIX semaphores available */
|
|
#undef TARGET_EISNAM
|
|
#define TARGET_EISNAM 139 /* Is a named type file */
|
|
#undef TARGET_EREMOTEIO
|
|
#define TARGET_EREMOTEIO 140 /* Remote I/O error */
|
|
#undef TARGET_EINIT
|
|
#define TARGET_EINIT 141 /* Reserved */
|
|
#undef TARGET_EREMDEV
|
|
#define TARGET_EREMDEV 142 /* TARGET_Error 142 */
|
|
#undef TARGET_ESHUTDOWN
|
|
#define TARGET_ESHUTDOWN 143 /* Cannot send after transport endpoint shutdown */
|
|
#undef TARGET_ETOOMANYREFS
|
|
#define TARGET_ETOOMANYREFS 144 /* Too many references: cannot splice */
|
|
#undef TARGET_ETIMEDOUT
|
|
#define TARGET_ETIMEDOUT 145 /* Connection timed out */
|
|
#undef TARGET_ECONNREFUSED
|
|
#define TARGET_ECONNREFUSED 146 /* Connection refused */
|
|
#undef TARGET_EHOSTDOWN
|
|
#define TARGET_EHOSTDOWN 147 /* Host is down */
|
|
#undef TARGET_EHOSTUNREACH
|
|
#define TARGET_EHOSTUNREACH 148 /* No route to host */
|
|
#undef TARGET_EALREADY
|
|
#define TARGET_EALREADY 149 /* Operation already in progress */
|
|
#undef TARGET_EINPROGRESS
|
|
#define TARGET_EINPROGRESS 150 /* Operation now in progress */
|
|
#undef TARGET_ESTALE
|
|
#define TARGET_ESTALE 151 /* Stale NFS file handle */
|
|
#undef TARGET_ECANCELED
|
|
#define TARGET_ECANCELED 158 /* AIO operation canceled */
|
|
/*
|
|
* These error are Linux extensions.
|
|
*/
|
|
#undef TARGET_ENOMEDIUM
|
|
#define TARGET_ENOMEDIUM 159 /* No medium found */
|
|
#undef TARGET_EMEDIUMTYPE
|
|
#define TARGET_EMEDIUMTYPE 160 /* Wrong medium type */
|
|
#undef TARGET_ENOKEY
|
|
#define TARGET_ENOKEY 161 /* Required key not available */
|
|
#undef TARGET_EKEYEXPIRED
|
|
#define TARGET_EKEYEXPIRED 162 /* Key has expired */
|
|
#undef TARGET_EKEYREVOKED
|
|
#define TARGET_EKEYREVOKED 163 /* Key has been revoked */
|
|
#undef TARGET_EKEYREJECTED
|
|
#define TARGET_EKEYREJECTED 164 /* Key was rejected by service */
|
|
|
|
/* for robust mutexes */
|
|
#undef TARGET_EOWNERDEAD
|
|
#define TARGET_EOWNERDEAD 165 /* Owner died */
|
|
#undef TARGET_ENOTRECOVERABLE
|
|
#define TARGET_ENOTRECOVERABLE 166 /* State not recoverable */
|
|
|
|
#undef TARGET_ERFKILL
|
|
#define TARGET_ERFKILL 167
|
|
#undef TARGET_EHWPOISON
|
|
#define TARGET_EHWPOISON 168
|
|
|
|
#undef TARGET_EDQUOT
|
|
#define TARGET_EDQUOT 1133 /* Quota exceeded */
|
|
|
|
#define UNAME_MACHINE "mips"
|
|
#define UNAME_MINIMUM_RELEASE "2.6.32"
|
|
|
|
#define TARGET_CLONE_BACKWARDS
|
|
#define TARGET_MINSIGSTKSZ 2048
|
|
#define TARGET_MCL_CURRENT 1
|
|
#define TARGET_MCL_FUTURE 2
|
|
#define TARGET_MCL_ONFAULT 4
|
|
|
|
#define TARGET_FORCE_SHMLBA
|
|
|
|
static inline abi_ulong target_shmlba(CPUMIPSState *env)
|
|
{
|
|
return 0x40000;
|
|
}
|
|
|
|
/* MIPS-specific prctl() options */
|
|
#define TARGET_PR_SET_FP_MODE 45
|
|
#define TARGET_PR_GET_FP_MODE 46
|
|
#define TARGET_PR_FP_MODE_FR (1 << 0)
|
|
#define TARGET_PR_FP_MODE_FRE (1 << 1)
|
|
|
|
#endif /* MIPS_TARGET_SYSCALL_H */
|