]> git.proxmox.com Git - mirror_qemu.git/blobdiff - linux-user/syscall_defs.h
Strace mprotect flags.
[mirror_qemu.git] / linux-user / syscall_defs.h
index de4691223dc5c3ec4cc4220be0bb8004838c3db8..46cb05ea9f7d747fe3b1f2c2e890b8c902077465 100644 (file)
 #define TARGET_IOC_NRBITS      8
 #define TARGET_IOC_TYPEBITS    8
 
+#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
+    || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
+    /* 16 bit uid wrappers emulation */
+#define USE_UID16
+#endif
+
 #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SH4) \
-    || defined(TARGET_M68K) || defined(TARGET_ALPHA) || defined(TARGET_CRIS)
+    || defined(TARGET_M68K) || defined(TARGET_CRIS)
 
 #define TARGET_IOC_SIZEBITS    14
 #define TARGET_IOC_DIRBITS     2
@@ -59,7 +65,8 @@
 #define TARGET_IOC_READ          2U
 
 #elif defined(TARGET_PPC) || defined(TARGET_ALPHA) || \
-      defined(TARGET_SPARC) || defined(TARGET_MIPS)
+      defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE) || \
+      defined(TARGET_MIPS)
 
 #define TARGET_IOC_SIZEBITS    13
 #define TARGET_IOC_DIRBITS     3
@@ -104,6 +111,28 @@ struct target_sockaddr {
     uint8_t sa_data[14];
 };
 
+struct target_in_addr {
+    uint32_t s_addr; /* big endian */
+};
+
+struct target_ip_mreq {
+    struct target_in_addr imr_multiaddr;
+    struct target_in_addr imr_address;
+};
+
+struct target_ip_mreqn {
+    struct target_in_addr imr_multiaddr;
+    struct target_in_addr imr_address;
+    abi_long imr_ifindex;
+};
+
+struct target_ip_mreq_source {
+    /* big endian */
+    uint32_t imr_multiaddr;
+    uint32_t imr_interface;
+    uint32_t imr_sourceaddr;
+};
+
 struct target_timeval {
     abi_long tv_sec;
     abi_long tv_usec;
@@ -286,7 +315,7 @@ struct target_sigaction;
 int do_sigaction(int sig, const struct target_sigaction *act,
                  struct target_sigaction *oact);
 
-#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_MIPS) || defined (TARGET_SH4) || defined(TARGET_M68K) || defined(TARGET_ALPHA) || defined(TARGET_CRIS)
+#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_MIPS) || defined (TARGET_SH4) || defined(TARGET_M68K) || defined(TARGET_ALPHA) || defined(TARGET_CRIS) || defined(TARGET_MICROBLAZE)
 
 #if defined(TARGET_SPARC)
 #define TARGET_SA_NOCLDSTOP    8u
@@ -307,6 +336,14 @@ int do_sigaction(int sig, const struct target_sigaction *act,
 #if !defined(TARGET_ABI_MIPSN32) && !defined(TARGET_ABI_MIPSN64)
 #define TARGET_SA_RESTORER     0x04000000      /* Only for O32 */
 #endif
+#elif defined(TARGET_ALPHA)
+#define TARGET_SA_ONSTACK      0x00000001
+#define TARGET_SA_RESTART      0x00000002
+#define TARGET_SA_NOCLDSTOP    0x00000004
+#define TARGET_SA_NODEFER      0x00000008
+#define TARGET_SA_RESETHAND    0x00000010
+#define TARGET_SA_NOCLDWAIT    0x00000020 /* not supported yet */
+#define TARGET_SA_SIGINFO      0x00000040
 #else
 #define TARGET_SA_NOCLDSTOP    0x00000001
 #define TARGET_SA_NOCLDWAIT    0x00000002 /* not supported yet */
@@ -443,8 +480,28 @@ int do_sigaction(int sig, const struct target_sigaction *act,
 
 #endif
 
-#if defined(TARGET_MIPS)
+#if defined(TARGET_ALPHA)
+struct target_old_sigaction {
+    abi_ulong _sa_handler;
+    abi_ulong sa_mask;
+    abi_ulong sa_flags;
+};
+
+struct target_rt_sigaction {
+    abi_ulong _sa_handler;
+    abi_ulong sa_flags;
+    target_sigset_t sa_mask;
+};
 
+/* This is the struct used inside the kernel.  The ka_restorer
+   field comes from the 5th argument to sys_rt_sigaction.  */
+struct target_sigaction {
+    abi_ulong _sa_handler;
+    abi_ulong sa_flags;
+    target_sigset_t sa_mask;
+    abi_ulong sa_restorer;
+};
+#elif defined(TARGET_MIPS)
 struct target_sigaction {
        uint32_t        sa_flags;
 #if defined(TARGET_ABI_MIPSN32)
@@ -454,7 +511,6 @@ struct target_sigaction {
 #endif
        target_sigset_t sa_mask;
 };
-
 #else
 struct target_old_sigaction {
         abi_ulong _sa_handler;
@@ -504,9 +560,15 @@ typedef struct {
 #define TARGET_SI_PAD_SIZE     ((TARGET_SI_MAX_SIZE/sizeof(int)) - 3)
 
 typedef struct target_siginfo {
+#ifdef TARGET_MIPS
+       int si_signo;
+       int si_code;
+       int si_errno;
+#else
        int si_signo;
        int si_errno;
        int si_code;
+#endif
 
        union {
                int _pad[TARGET_SI_PAD_SIZE];
@@ -615,6 +677,14 @@ struct target_rlimit {
         abi_ulong   rlim_max;
 };
 
+#if defined(TARGET_ALPHA)
+#define TARGET_RLIM_INFINITY   0x7fffffffffffffffull
+#elif defined(TARGET_MIPS) || defined(TARGET_SPARC)
+#define TARGET_RLIM_INFINITY   0x7fffffffUL
+#else
+#define TARGET_RLIM_INFINITY   ((target_ulong)~0UL)
+#endif
+
 struct target_pollfd {
     int fd;           /* file descriptor */
     short events;     /* requested events */
@@ -625,6 +695,9 @@ struct target_pollfd {
 #define TARGET_KIOCSOUND       0x4B2F  /* start sound generation (0 for off) */
 #define TARGET_KDMKTONE               0x4B30   /* generate tone */
 #define TARGET_KDGKBTYPE       0x4b33
+#define TARGET_KDSETMODE       0x4b3a
+#define TARGET_KDGKBMODE       0x4b44
+#define TARGET_KDSKBMODE       0x4b45
 #define TARGET_KDGKBENT               0x4B46   /* gets one entry in translation table */
 #define TARGET_KDGKBSENT       0x4B48  /* gets one function key string entry */
 
@@ -830,6 +903,27 @@ struct target_pollfd {
 #define TARGET_HDIO_SET_DMA           0x0326  /* change use-dma flag */
 #define TARGET_HDIO_SET_PIO_MODE      0x0327  /* reconfig interface to new speed */
 
+/* loop ioctls */
+#define TARGET_LOOP_SET_FD            0x4C00
+#define TARGET_LOOP_CLR_FD            0x4C01
+#define TARGET_LOOP_SET_STATUS        0x4C02
+#define TARGET_LOOP_GET_STATUS        0x4C03
+#define TARGET_LOOP_SET_STATUS64      0x4C04
+#define TARGET_LOOP_GET_STATUS64      0x4C05
+#define TARGET_LOOP_CHANGE_FD         0x4C06
+
+/* fb ioctls */
+#define TARGET_FBIOGET_VSCREENINFO    0x4600
+#define TARGET_FBIOPUT_VSCREENINFO    0x4601
+#define TARGET_FBIOGET_FSCREENINFO    0x4602
+
+/* vt ioctls */
+#define TARGET_VT_OPENQRY             0x5600
+#define TARGET_VT_GETSTATE            0x5603
+#define TARGET_VT_ACTIVATE            0x5606
+#define TARGET_VT_WAITACTIVE          0x5607
+#define TARGET_VT_LOCKSWITCH          0x560b
+#define TARGET_VT_UNLOCKSWITCH        0x560c
 
 /* from asm/termbits.h */
 
@@ -852,11 +946,20 @@ struct target_winsize {
 
 #include "termbits.h"
 
+#if defined(TARGET_MIPS)
+#define TARGET_PROT_SEM         0x10
+#else
+#define TARGET_PROT_SEM         0x08
+#endif
+
+/* Common */
 #define TARGET_MAP_SHARED      0x01            /* Share changes */
 #define TARGET_MAP_PRIVATE     0x02            /* Changes are private */
-#define TARGET_MAP_TYPE        0x0f            /* Mask for type of mapping */
-#define TARGET_MAP_FIXED       0x10            /* Interpret addr exactly */
+#define TARGET_MAP_TYPE                0x0f            /* Mask for type of mapping */
+
+/* Target specific */
 #if defined(TARGET_MIPS)
+#define TARGET_MAP_FIXED       0x10            /* Interpret addr exactly */
 #define TARGET_MAP_ANONYMOUS   0x0800          /* don't use a file */
 #define TARGET_MAP_GROWSDOWN   0x1000          /* stack-like segment */
 #define TARGET_MAP_DENYWRITE   0x2000          /* ETXTBSY */
@@ -865,18 +968,34 @@ struct target_winsize {
 #define TARGET_MAP_NORESERVE   0x0400          /* don't check for reservations */
 #define TARGET_MAP_POPULATE    0x10000         /* populate (prefault) pagetables */
 #define TARGET_MAP_NONBLOCK    0x20000         /* do not block on IO */
-#else
+#elif defined(TARGET_PPC)
+#define TARGET_MAP_FIXED       0x10            /* Interpret addr exactly */
 #define TARGET_MAP_ANONYMOUS   0x20            /* don't use a file */
 #define TARGET_MAP_GROWSDOWN   0x0100          /* stack-like segment */
 #define TARGET_MAP_DENYWRITE   0x0800          /* ETXTBSY */
 #define TARGET_MAP_EXECUTABLE  0x1000          /* mark it as an executable */
-#if defined(TARGET_PPC)
 #define TARGET_MAP_LOCKED      0x0080          /* pages are locked */
 #define TARGET_MAP_NORESERVE   0x0040          /* don't check for reservations */
+#define TARGET_MAP_POPULATE    0x8000          /* populate (prefault) pagetables */
+#define TARGET_MAP_NONBLOCK    0x10000         /* do not block on IO */
+#elif defined(TARGET_ALPHA)
+#define TARGET_MAP_ANONYMOUS   0x10            /* don't use a file */
+#define TARGET_MAP_FIXED       0x100           /* Interpret addr exactly */
+#define TARGET_MAP_GROWSDOWN   0x01000         /* stack-like segment */
+#define TARGET_MAP_DENYWRITE   0x02000         /* ETXTBSY */
+#define TARGET_MAP_EXECUTABLE  0x04000         /* mark it as an executable */
+#define TARGET_MAP_LOCKED      0x08000         /* lock the mapping */
+#define TARGET_MAP_NORESERVE   0x10000         /* no check for reservations */
+#define TARGET_MAP_POPULATE    0x20000         /* pop (prefault) pagetables */
+#define TARGET_MAP_NONBLOCK    0x40000         /* do not block on IO */
 #else
+#define TARGET_MAP_FIXED       0x10            /* Interpret addr exactly */
+#define TARGET_MAP_ANONYMOUS   0x20            /* don't use a file */
+#define TARGET_MAP_GROWSDOWN   0x0100          /* stack-like segment */
+#define TARGET_MAP_DENYWRITE   0x0800          /* ETXTBSY */
+#define TARGET_MAP_EXECUTABLE  0x1000          /* mark it as an executable */
 #define TARGET_MAP_LOCKED      0x2000          /* pages are locked */
 #define TARGET_MAP_NORESERVE   0x4000          /* don't check for reservations */
-#endif
 #define TARGET_MAP_POPULATE    0x8000          /* populate (prefault) pagetables */
 #define TARGET_MAP_NONBLOCK    0x10000         /* do not block on IO */
 #endif
@@ -1114,7 +1233,7 @@ struct target_stat {
 #endif
 };
 
-struct target_stat64 {
+struct __attribute__((__packed__)) target_stat64 {
        unsigned long long st_dev;
         unsigned long long st_ino;
        unsigned int st_mode;
@@ -1122,9 +1241,10 @@ struct target_stat64 {
        unsigned int st_uid;
        unsigned int st_gid;
        unsigned long long st_rdev;
-       unsigned short pad0;
+       unsigned long long __pad0;
        long long      st_size;
        int            st_blksize;
+       unsigned int   __pad1;
        long long      st_blocks;       /* Number 512-byte blocks allocated. */
        int            target_st_atime;
         unsigned int   target_st_atime_nsec;
@@ -1136,6 +1256,55 @@ struct target_stat64 {
         unsigned int   __unused5;
 };
 
+#elif defined(TARGET_MICROBLAZE)
+
+struct target_stat {
+       abi_ulong st_dev;
+       abi_ulong st_ino;
+       unsigned int st_mode;
+       unsigned short st_nlink;
+       unsigned int st_uid;
+       unsigned int st_gid;
+       abi_ulong  st_rdev;
+       abi_ulong  st_size;
+       abi_ulong  st_blksize;
+       abi_ulong  st_blocks;
+       abi_ulong  target_st_atime;
+       abi_ulong  target_st_atime_nsec;
+       abi_ulong  target_st_mtime;
+       abi_ulong  target_st_mtime_nsec;
+       abi_ulong  target_st_ctime;
+       abi_ulong  target_st_ctime_nsec;
+       abi_ulong  __unused4;
+       abi_ulong  __unused5;
+};
+
+/* FIXME: Microblaze no-mmu user-space has a difference stat64 layout...  */
+struct __attribute__((__packed__)) target_stat64 {
+       uint64_t st_dev;
+        uint64_t st_ino;
+       uint32_t st_mode;
+       uint32_t st_nlink;
+       uint32_t st_uid;
+       uint32_t st_gid;
+       uint64_t st_rdev;
+       uint64_t __pad1;
+
+       int64_t  st_size;
+       int32_t  st_blksize;
+       uint32_t __pad2;
+       int64_t st_blocks;      /* Number 512-byte blocks allocated. */
+
+       int            target_st_atime;
+        unsigned int   target_st_atime_nsec;
+       int            target_st_mtime;
+        unsigned int   target_st_mtime_nsec;
+       int            target_st_ctime;
+        unsigned int   target_st_ctime_nsec;
+        uint32_t   __unused4;
+        uint32_t   __unused5;
+};
+
 #elif defined(TARGET_M68K)
 
 struct target_stat {
@@ -1448,7 +1617,7 @@ struct target_stat {
 /* This matches struct stat64 in glibc2.1, hence the absolutely
  * insane amounts of padding around dev_t's.
  */
-struct target_stat64 {
+struct __attribute__((__packed__)) target_stat64 {
        unsigned long long      st_dev;
        unsigned char   __pad0[4];
 
@@ -1562,7 +1731,8 @@ struct target_statfs64 {
        uint32_t        f_namelen;
        uint32_t        f_spare[6];
 };
-#elif defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#elif (defined(TARGET_PPC64) || defined(TARGET_X86_64) || \
+       defined(TARGET_SPARC64)) && !defined(TARGET_ABI32)
 struct target_statfs {
        abi_long f_type;
        abi_long f_bsize;
@@ -1633,6 +1803,12 @@ struct target_statfs64 {
 #define TARGET_F_SETLKW        9
 #define TARGET_F_SETOWN        5       /*  for sockets. */
 #define TARGET_F_GETOWN        6       /*  for sockets. */
+#elif defined(TARGET_MIPS)
+#define TARGET_F_GETLK         14
+#define TARGET_F_SETLK         6
+#define TARGET_F_SETLKW        7
+#define TARGET_F_SETOWN        24       /*  for sockets. */
+#define TARGET_F_GETOWN        25       /*  for sockets. */
 #else
 #define TARGET_F_GETLK         5
 #define TARGET_F_SETLK         6
@@ -1644,9 +1820,21 @@ struct target_statfs64 {
 #define TARGET_F_SETSIG        10      /*  for sockets. */
 #define TARGET_F_GETSIG        11      /*  for sockets. */
 
+#if defined(TARGET_MIPS)
+#define TARGET_F_GETLK64       33      /*  using 'struct flock64' */
+#define TARGET_F_SETLK64       34
+#define TARGET_F_SETLKW64      35
+#else
 #define TARGET_F_GETLK64       12      /*  using 'struct flock64' */
 #define TARGET_F_SETLK64       13
 #define TARGET_F_SETLKW64      14
+#endif
+
+#define TARGET_F_LINUX_SPECIFIC_BASE 1024
+#define TARGET_F_SETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 0)
+#define TARGET_F_GETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 1)
+#define TARGET_F_DUPFD_CLOEXEC (TARGET_F_LINUX_SPECIFIC_BASE + 6)
+#define TARGET_F_NOTIFY  (TARGET_F_LINUX_SPECIFIC_BASE+2)
 
 #if defined (TARGET_ARM)
 #define TARGET_O_ACCMODE          0003
@@ -1684,6 +1872,24 @@ struct target_statfs64 {
 #define TARGET_O_NOFOLLOW      0100000 /* don't follow links */
 #define TARGET_O_LARGEFILE     0200000
 #define TARGET_O_DIRECT        0400000 /* direct disk access hint */
+#elif defined (TARGET_MICROBLAZE)
+#define TARGET_O_ACCMODE          0003
+#define TARGET_O_RDONLY             00
+#define TARGET_O_WRONLY             01
+#define TARGET_O_RDWR               02
+#define TARGET_O_CREAT            0100 /* not fcntl */
+#define TARGET_O_EXCL             0200 /* not fcntl */
+#define TARGET_O_NOCTTY           0400 /* not fcntl */
+#define TARGET_O_TRUNC           01000 /* not fcntl */
+#define TARGET_O_APPEND          02000
+#define TARGET_O_NONBLOCK        04000
+#define TARGET_O_NDELAY        TARGET_O_NONBLOCK
+#define TARGET_O_SYNC           010000
+#define TARGET_FASYNC           020000 /* fcntl, for BSD compatibility */
+#define TARGET_O_DIRECTORY      040000 /* must be a directory */
+#define TARGET_O_NOFOLLOW      0100000 /* don't follow links */
+#define TARGET_O_LARGEFILE     0200000
+#define TARGET_O_DIRECT        0400000 /* direct disk access hint */
 #elif defined (TARGET_SPARC)
 #define TARGET_O_RDONLY        0x0000
 #define TARGET_O_WRONLY        0x0001
@@ -1721,6 +1927,25 @@ struct target_statfs64 {
 #define TARGET_O_NOFOLLOW      0x20000 /* don't follow links */
 #define TARGET_O_NOATIME       0x40000
 #define TARGET_O_NDELAY        TARGET_O_NONBLOCK
+#elif defined(TARGET_ALPHA)
+#define TARGET_O_ACCMODE       0x0003
+#define TARGET_O_RDONLY        0x0000
+#define TARGET_O_WRONLY        0x0001
+#define TARGET_O_RDWR          0x0002
+#define TARGET_O_APPEND        0x0008
+#define TARGET_O_SYNC          0x4000
+#define TARGET_O_NONBLOCK      0x0004
+#define TARGET_O_CREAT         0x0200  /* not fcntl */
+#define TARGET_O_TRUNC         0x0400  /* not fcntl */
+#define TARGET_O_EXCL          0x0800  /* not fcntl */
+#define TARGET_O_NOCTTY        0x1000  /* not fcntl */
+#define TARGET_FASYNC          0x2000  /* fcntl, for BSD compatibility */
+#define TARGET_O_LARGEFILE     0x0000  /* not necessary, always 64-bit */
+#define TARGET_O_DIRECT        0x80000 /* direct disk access hint */
+#define TARGET_O_DIRECTORY     0x8000  /* must be a directory */
+#define TARGET_O_NOFOLLOW      0x10000 /* don't follow links */
+#define TARGET_O_NOATIME       0x100000
+#define TARGET_O_NDELAY        TARGET_O_NONBLOCK
 #else
 #define TARGET_O_ACCMODE          0003
 #define TARGET_O_RDONLY             00
@@ -1752,6 +1977,9 @@ struct target_flock {
 struct target_flock64 {
        short  l_type;
        short  l_whence;
+#if defined(TARGET_PPC) || defined(TARGET_X86_64) || defined(TARGET_MIPS) || defined(TARGET_SPARC) || defined(TARGET_HPPA) || defined (TARGET_MICROBLAZE)
+        int __pad;
+#endif
        unsigned long long l_start;
        unsigned long long l_len;
        int  l_pid;
@@ -1911,6 +2139,10 @@ struct target_eabi_flock64 {
 #define TARGET_VFAT_IOCTL_READDIR_BOTH    TARGET_IORU('r', 1)
 #define TARGET_VFAT_IOCTL_READDIR_SHORT   TARGET_IORU('r', 2)
 
+#define TARGET_MTIOCTOP        TARGET_IOW('m', 1, struct mtop)
+#define TARGET_MTIOCGET        TARGET_IOR('m', 2, struct mtget)
+#define TARGET_MTIOCPOS        TARGET_IOR('m', 3, struct mtpos)
+
 struct target_sysinfo {
     abi_long uptime;                /* Seconds since boot */
     abi_ulong loads[3];             /* 1, 5, and 15 minute load averages */
@@ -1928,6 +2160,45 @@ struct target_sysinfo {
     char _f[20-2*sizeof(abi_long)-sizeof(int)]; /* Padding: libc5 uses this.. */
 };
 
+struct linux_dirent {
+    long            d_ino;
+    unsigned long   d_off;
+    unsigned short  d_reclen;
+    char            d_name[256]; /* We must not include limits.h! */
+};
+
+struct linux_dirent64 {
+    uint64_t        d_ino;
+    int64_t         d_off;
+    unsigned short  d_reclen;
+    unsigned char   d_type;
+    char            d_name[256];
+};
+
+struct target_mq_attr {
+    abi_long mq_flags;
+    abi_long mq_maxmsg;
+    abi_long mq_msgsize;
+    abi_long mq_curmsgs;
+};
+
 #include "socket.h"
 
 #include "errno_defs.h"
+
+#define FUTEX_WAIT              0
+#define FUTEX_WAKE              1
+#define FUTEX_FD                2
+#define FUTEX_REQUEUE           3
+#define FUTEX_CMP_REQUEUE       4
+#define FUTEX_WAKE_OP           5
+#define FUTEX_LOCK_PI           6
+#define FUTEX_UNLOCK_PI         7
+#define FUTEX_TRYLOCK_PI        8
+#define FUTEX_WAIT_BITSET       9
+#define FUTEX_WAKE_BITSET       10
+
+#define FUTEX_PRIVATE_FLAG      128
+#define FUTEX_CLOCK_REALTIME    256
+#define FUTEX_CMD_MASK          ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
+