aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux-user/aarch64/signal.c1
-rw-r--r--linux-user/aarch64/target_cpu.h4
-rw-r--r--linux-user/aarch64/target_fcntl.h16
-rw-r--r--linux-user/aarch64/target_signal.h7
-rw-r--r--linux-user/alpha/signal.c1
-rw-r--r--linux-user/alpha/target_cpu.h4
-rw-r--r--linux-user/alpha/target_fcntl.h40
-rw-r--r--linux-user/alpha/target_signal.h51
-rw-r--r--linux-user/arm/signal.c1
-rw-r--r--linux-user/arm/target_cpu.h4
-rw-r--r--linux-user/arm/target_fcntl.h17
-rw-r--r--linux-user/arm/target_signal.h7
-rw-r--r--linux-user/cris/signal.c1
-rw-r--r--linux-user/cris/target_cpu.h4
-rw-r--r--linux-user/cris/target_fcntl.h11
-rw-r--r--linux-user/cris/target_signal.h7
-rw-r--r--linux-user/generic/fcntl.h151
-rw-r--r--linux-user/generic/signal.h57
-rw-r--r--linux-user/hppa/signal.c1
-rw-r--r--linux-user/hppa/target_cpu.h8
-rw-r--r--linux-user/hppa/target_fcntl.h42
-rw-r--r--linux-user/hppa/target_signal.h50
-rw-r--r--linux-user/i386/signal.c1
-rw-r--r--linux-user/i386/target_cpu.h4
-rw-r--r--linux-user/i386/target_fcntl.h11
-rw-r--r--linux-user/i386/target_signal.h7
-rw-r--r--linux-user/m68k/signal.c1
-rw-r--r--linux-user/m68k/target_cpu.h4
-rw-r--r--linux-user/m68k/target_fcntl.h17
-rw-r--r--linux-user/m68k/target_signal.h7
-rw-r--r--linux-user/microblaze/signal.c1
-rw-r--r--linux-user/microblaze/target_cpu.h4
-rw-r--r--linux-user/microblaze/target_fcntl.h11
-rw-r--r--linux-user/microblaze/target_signal.h7
-rw-r--r--linux-user/mips/signal.c1
-rw-r--r--linux-user/mips/target_cpu.h4
-rw-r--r--linux-user/mips/target_fcntl.h38
-rw-r--r--linux-user/mips/target_signal.h55
-rw-r--r--linux-user/mips64/target_fcntl.h1
-rw-r--r--linux-user/mips64/target_signal.h53
-rw-r--r--linux-user/nios2/signal.c1
-rw-r--r--linux-user/nios2/target_cpu.h4
-rw-r--r--linux-user/nios2/target_fcntl.h11
-rw-r--r--linux-user/nios2/target_signal.h8
-rw-r--r--linux-user/openrisc/signal.c1
-rw-r--r--linux-user/openrisc/target_cpu.h4
-rw-r--r--linux-user/openrisc/target_fcntl.h11
-rw-r--r--linux-user/openrisc/target_signal.h16
-rw-r--r--linux-user/ppc/signal.c1
-rw-r--r--linux-user/ppc/target_cpu.h5
-rw-r--r--linux-user/ppc/target_fcntl.h17
-rw-r--r--linux-user/ppc/target_signal.h7
-rw-r--r--linux-user/qemu.h1
-rw-r--r--linux-user/riscv/signal.c1
-rw-r--r--linux-user/riscv/target_cpu.h4
-rw-r--r--linux-user/riscv/target_fcntl.h11
-rw-r--r--linux-user/riscv/target_signal.h8
-rw-r--r--linux-user/s390x/signal.c1
-rw-r--r--linux-user/s390x/target_cpu.h4
-rw-r--r--linux-user/s390x/target_fcntl.h11
-rw-r--r--linux-user/s390x/target_signal.h7
-rw-r--r--linux-user/sh4/signal.c1
-rw-r--r--linux-user/sh4/target_cpu.h4
-rw-r--r--linux-user/sh4/target_fcntl.h11
-rw-r--r--linux-user/sh4/target_signal.h7
-rw-r--r--linux-user/signal.c1
-rw-r--r--linux-user/sparc/signal.c1
-rw-r--r--linux-user/sparc/target_cpu.h11
-rw-r--r--linux-user/sparc/target_fcntl.h45
-rw-r--r--linux-user/sparc/target_signal.h60
-rw-r--r--linux-user/sparc64/signal.c1
-rw-r--r--linux-user/sparc64/target_fcntl.h1
-rw-r--r--linux-user/sparc64/target_signal.h38
-rw-r--r--linux-user/syscall.c3
-rw-r--r--linux-user/syscall_defs.h536
-rw-r--r--linux-user/tilegx/signal.c1
-rw-r--r--linux-user/tilegx/target_cpu.h4
-rw-r--r--linux-user/tilegx/target_fcntl.h11
-rw-r--r--linux-user/tilegx/target_signal.h8
-rw-r--r--linux-user/x86_64/target_fcntl.h11
-rw-r--r--linux-user/x86_64/target_signal.h8
-rw-r--r--linux-user/xtensa/signal.c1
-rw-r--r--linux-user/xtensa/target_cpu.h4
-rw-r--r--linux-user/xtensa/target_fcntl.h11
-rw-r--r--linux-user/xtensa/target_signal.h8
-rw-r--r--target/sparc/helper.c4
86 files changed, 914 insertions, 723 deletions
diff --git a/linux-user/aarch64/signal.c b/linux-user/aarch64/signal.c
index f95dc61dfb..07fedfc33c 100644
--- a/linux-user/aarch64/signal.c
+++ b/linux-user/aarch64/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/aarch64/target_cpu.h b/linux-user/aarch64/target_cpu.h
index 777ce29f16..a021c95fa4 100644
--- a/linux-user/aarch64/target_cpu.h
+++ b/linux-user/aarch64/target_cpu.h
@@ -35,4 +35,8 @@ static inline void cpu_set_tls(CPUARMState *env, target_ulong newtls)
env->cp15.tpidr_el[0] = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUARMState *state)
+{
+ return state->xregs[31];
+}
#endif
diff --git a/linux-user/aarch64/target_fcntl.h b/linux-user/aarch64/target_fcntl.h
new file mode 100644
index 0000000000..efdf6e5f05
--- /dev/null
+++ b/linux-user/aarch64/target_fcntl.h
@@ -0,0 +1,16 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef AARCH64_TARGET_FCNTL_H
+#define AARCH64_TARGET_FCNTL_H
+
+#define TARGET_O_DIRECTORY 040000 /* must be a directory */
+#define TARGET_O_NOFOLLOW 0100000 /* don't follow links */
+#define TARGET_O_DIRECT 0200000 /* direct disk access hint */
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/aarch64/target_signal.h b/linux-user/aarch64/target_signal.h
index 0b7ae25120..ddd73169f0 100644
--- a/linux-user/aarch64/target_signal.h
+++ b/linux-user/aarch64/target_signal.h
@@ -1,8 +1,6 @@
#ifndef AARCH64_TARGET_SIGNAL_H
#define AARCH64_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUARMState *state)
-{
- return state->xregs[31];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* AARCH64_TARGET_SIGNAL_H */
diff --git a/linux-user/alpha/signal.c b/linux-user/alpha/signal.c
index f24de02c6f..c5c27ce084 100644
--- a/linux-user/alpha/signal.c
+++ b/linux-user/alpha/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/alpha/target_cpu.h b/linux-user/alpha/target_cpu.h
index ad124da7c0..ac4d255ae7 100644
--- a/linux-user/alpha/target_cpu.h
+++ b/linux-user/alpha/target_cpu.h
@@ -33,4 +33,8 @@ static inline void cpu_set_tls(CPUAlphaState *env, target_ulong newtls)
env->unique = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUAlphaState *state)
+{
+ return state->ir[IR_SP];
+}
#endif
diff --git a/linux-user/alpha/target_fcntl.h b/linux-user/alpha/target_fcntl.h
new file mode 100644
index 0000000000..2617e73472
--- /dev/null
+++ b/linux-user/alpha/target_fcntl.h
@@ -0,0 +1,40 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef ALPHA_TARGET_FCNTL_H
+#define ALPHA_TARGET_FCNTL_H
+
+#define TARGET_O_NONBLOCK 04
+#define TARGET_O_APPEND 010
+#define TARGET_O_CREAT 01000 /* not fcntl */
+#define TARGET_O_TRUNC 02000 /* not fcntl */
+#define TARGET_O_EXCL 04000 /* not fcntl */
+#define TARGET_O_NOCTTY 010000 /* not fcntl */
+#define TARGET_O_DSYNC 040000
+#define TARGET_O_LARGEFILE 0 /* not necessary, always 64-bit */
+#define TARGET_O_DIRECTORY 0100000 /* must be a directory */
+#define TARGET_O_NOFOLLOW 0200000 /* don't follow links */
+#define TARGET_O_DIRECT 02000000 /* direct disk access hint */
+#define TARGET_O_NOATIME 04000000
+#define TARGET_O_CLOEXEC 010000000
+#define TARGET___O_SYNC 020000000
+#define TARGET_O_PATH 040000000
+
+#define TARGET_F_GETLK 7
+#define TARGET_F_SETLK 8
+#define TARGET_F_SETLKW 9
+#define TARGET_F_SETOWN 5 /* for sockets. */
+#define TARGET_F_GETOWN 6 /* for sockets. */
+
+#define TARGET_F_RDLCK 1
+#define TARGET_F_WRLCK 2
+#define TARGET_F_UNLCK 8
+#define TARGET_F_EXLCK 16
+#define TARGET_F_SHLCK 32
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/alpha/target_signal.h b/linux-user/alpha/target_signal.h
index 4e912e1cf9..cd63d59fde 100644
--- a/linux-user/alpha/target_signal.h
+++ b/linux-user/alpha/target_signal.h
@@ -1,7 +1,42 @@
#ifndef ALPHA_TARGET_SIGNAL_H
#define ALPHA_TARGET_SIGNAL_H
-#include "cpu.h"
+#define TARGET_SIGHUP 1
+#define TARGET_SIGINT 2
+#define TARGET_SIGQUIT 3
+#define TARGET_SIGILL 4
+#define TARGET_SIGTRAP 5
+#define TARGET_SIGABRT 6
+#define TARGET_SIGSTKFLT 7 /* actually SIGEMT */
+#define TARGET_SIGFPE 8
+#define TARGET_SIGKILL 9
+#define TARGET_SIGBUS 10
+#define TARGET_SIGSEGV 11
+#define TARGET_SIGSYS 12
+#define TARGET_SIGPIPE 13
+#define TARGET_SIGALRM 14
+#define TARGET_SIGTERM 15
+#define TARGET_SIGURG 16
+#define TARGET_SIGSTOP 17
+#define TARGET_SIGTSTP 18
+#define TARGET_SIGCONT 19
+#define TARGET_SIGCHLD 20
+#define TARGET_SIGTTIN 21
+#define TARGET_SIGTTOU 22
+#define TARGET_SIGIO 23
+#define TARGET_SIGXCPU 24
+#define TARGET_SIGXFSZ 25
+#define TARGET_SIGVTALRM 26
+#define TARGET_SIGPROF 27
+#define TARGET_SIGWINCH 28
+#define TARGET_SIGPWR 29 /* actually SIGINFO */
+#define TARGET_SIGUSR1 30
+#define TARGET_SIGUSR2 31
+#define TARGET_SIGRTMIN 32
+
+#define TARGET_SIG_BLOCK 1
+#define TARGET_SIG_UNBLOCK 2
+#define TARGET_SIG_SETMASK 3
/* this struct defines a stack used during syscall handling */
@@ -19,15 +54,17 @@ typedef struct target_sigaltstack {
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2
+#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
+
#define TARGET_MINSIGSTKSZ 4096
#define TARGET_SIGSTKSZ 16384
-static inline abi_ulong get_sp_from_cpustate(CPUAlphaState *state)
-{
- return state->ir[IR_SP];
-}
-
-
/* From <asm/gentrap.h>. */
#define TARGET_GEN_INTOVF -1 /* integer overflow */
#define TARGET_GEN_INTDIV -2 /* integer division by zero */
diff --git a/linux-user/arm/signal.c b/linux-user/arm/signal.c
index 59b5b65ed1..b0e753801b 100644
--- a/linux-user/arm/signal.c
+++ b/linux-user/arm/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/arm/target_cpu.h b/linux-user/arm/target_cpu.h
index c3eb4b243d..8a3764919a 100644
--- a/linux-user/arm/target_cpu.h
+++ b/linux-user/arm/target_cpu.h
@@ -49,4 +49,8 @@ static inline target_ulong cpu_get_tls(CPUARMState *env)
}
}
+static inline abi_ulong get_sp_from_cpustate(CPUARMState *state)
+{
+ return state->regs[13];
+}
#endif
diff --git a/linux-user/arm/target_fcntl.h b/linux-user/arm/target_fcntl.h
new file mode 100644
index 0000000000..c8ff6b2505
--- /dev/null
+++ b/linux-user/arm/target_fcntl.h
@@ -0,0 +1,17 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef ARM_TARGET_FCNTL_H
+#define ARM_TARGET_FCNTL_H
+
+#define TARGET_O_DIRECTORY 040000 /* must be a directory */
+#define TARGET_O_NOFOLLOW 0100000 /* don't follow links */
+#define TARGET_O_DIRECT 0200000 /* direct disk access hint */
+#define TARGET_O_LARGEFILE 0400000
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/arm/target_signal.h b/linux-user/arm/target_signal.h
index d6a03ec87d..ea123c40f3 100644
--- a/linux-user/arm/target_signal.h
+++ b/linux-user/arm/target_signal.h
@@ -1,8 +1,6 @@
#ifndef ARM_TARGET_SIGNAL_H
#define ARM_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUARMState *state)
-{
- return state->regs[13];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* ARM_TARGET_SIGNAL_H */
diff --git a/linux-user/cris/signal.c b/linux-user/cris/signal.c
index 322d9db1a7..0b405247cf 100644
--- a/linux-user/cris/signal.c
+++ b/linux-user/cris/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/cris/target_cpu.h b/linux-user/cris/target_cpu.h
index c43aac62f9..2309343979 100644
--- a/linux-user/cris/target_cpu.h
+++ b/linux-user/cris/target_cpu.h
@@ -33,4 +33,8 @@ static inline void cpu_set_tls(CPUCRISState *env, target_ulong newtls)
env->pregs[PR_PID] = (env->pregs[PR_PID] & 0xff) | newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUCRISState *state)
+{
+ return state->regs[14];
+}
#endif
diff --git a/linux-user/cris/target_fcntl.h b/linux-user/cris/target_fcntl.h
new file mode 100644
index 0000000000..df0aceea34
--- /dev/null
+++ b/linux-user/cris/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef CRIS_TARGET_FCNTL_H
+#define CRIS_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/cris/target_signal.h b/linux-user/cris/target_signal.h
index 74ff2f3382..1cb5548f85 100644
--- a/linux-user/cris/target_signal.h
+++ b/linux-user/cris/target_signal.h
@@ -1,8 +1,6 @@
#ifndef CRIS_TARGET_SIGNAL_H
#define CRIS_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUCRISState *state)
-{
- return state->regs[14];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* CRIS_TARGET_SIGNAL_H */
diff --git a/linux-user/generic/fcntl.h b/linux-user/generic/fcntl.h
new file mode 100644
index 0000000000..a775a491e9
--- /dev/null
+++ b/linux-user/generic/fcntl.h
@@ -0,0 +1,151 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef GENERIC_FCNTL_H
+#define GENERIC_FCNTL_H
+
+/* <asm-generic/fcntl.h> values follow. */
+#define TARGET_O_ACCMODE 0003
+#define TARGET_O_RDONLY 00
+#define TARGET_O_WRONLY 01
+#define TARGET_O_RDWR 02
+#ifndef TARGET_O_CREAT
+#define TARGET_O_CREAT 0100 /* not fcntl */
+#endif
+#ifndef TARGET_O_EXCL
+#define TARGET_O_EXCL 0200 /* not fcntl */
+#endif
+#ifndef TARGET_O_NOCTTY
+#define TARGET_O_NOCTTY 0400 /* not fcntl */
+#endif
+#ifndef TARGET_O_TRUNC
+#define TARGET_O_TRUNC 01000 /* not fcntl */
+#endif
+#ifndef TARGET_O_APPEND
+#define TARGET_O_APPEND 02000
+#endif
+#ifndef TARGET_O_NONBLOCK
+#define TARGET_O_NONBLOCK 04000
+#endif
+#ifndef TARGET_O_DSYNC
+#define TARGET_O_DSYNC 010000
+#endif
+#ifndef TARGET_FASYNC
+#define TARGET_FASYNC 020000 /* fcntl, for BSD compatibility */
+#endif
+#ifndef TARGET_O_DIRECT
+#define TARGET_O_DIRECT 040000 /* direct disk access hint */
+#endif
+#ifndef TARGET_O_LARGEFILE
+#define TARGET_O_LARGEFILE 0100000
+#endif
+#ifndef TARGET_O_DIRECTORY
+#define TARGET_O_DIRECTORY 0200000 /* must be a directory */
+#endif
+#ifndef TARGET_O_NOFOLLOW
+#define TARGET_O_NOFOLLOW 0400000 /* don't follow links */
+#endif
+#ifndef TARGET_O_NOATIME
+#define TARGET_O_NOATIME 01000000
+#endif
+#ifndef TARGET_O_CLOEXEC
+#define TARGET_O_CLOEXEC 02000000
+#endif
+#ifndef TARGET___O_SYNC
+#define TARGET___O_SYNC 04000000
+#endif
+#ifndef TARGET_O_PATH
+#define TARGET_O_PATH 010000000
+#endif
+#ifndef TARGET___O_TMPFILE
+#define TARGET___O_TMPFILE 020000000
+#endif
+#ifndef TARGET_O_TMPFILE
+#define TARGET_O_TMPFILE (TARGET___O_TMPFILE | TARGET_O_DIRECTORY)
+#endif
+#ifndef TARGET_O_NDELAY
+#define TARGET_O_NDELAY TARGET_O_NONBLOCK
+#endif
+#ifndef TARGET_O_SYNC
+#define TARGET_O_SYNC (TARGET___O_SYNC | TARGET_O_DSYNC)
+#endif
+
+#define TARGET_F_DUPFD 0 /* dup */
+#define TARGET_F_GETFD 1 /* get close_on_exec */
+#define TARGET_F_SETFD 2 /* set/clear close_on_exec */
+#define TARGET_F_GETFL 3 /* get file->f_flags */
+#define TARGET_F_SETFL 4 /* set file->f_flags */
+#ifndef TARGET_F_GETLK
+#define TARGET_F_GETLK 5
+#define TARGET_F_SETLK 6
+#define TARGET_F_SETLKW 7
+#endif
+#ifndef TARGET_F_SETOWN
+#define TARGET_F_SETOWN 8 /* for sockets. */
+#define TARGET_F_GETOWN 9 /* for sockets. */
+#endif
+#ifndef TARGET_F_SETSIG
+#define TARGET_F_SETSIG 10 /* for sockets. */
+#define TARGET_F_GETSIG 11 /* for sockets. */
+#endif
+
+#ifndef TARGET_F_GETLK64
+#define TARGET_F_GETLK64 12 /* using 'struct flock64' */
+#define TARGET_F_SETLK64 13
+#define TARGET_F_SETLKW64 14
+#endif
+
+#ifndef TARGET_F_SETOWN_EX
+#define TARGET_F_SETOWN_EX 15
+#define TARGET_F_GETOWN_EX 16
+#endif
+
+struct target_f_owner_ex {
+ int type; /* Owner type of ID. */
+ int pid; /* ID of owner. */
+};
+
+#ifndef TARGET_F_RDLCK
+#define TARGET_F_RDLCK 0
+#define TARGET_F_WRLCK 1
+#define TARGET_F_UNLCK 2
+#endif
+
+#ifndef TARGET_F_EXLCK
+#define TARGET_F_EXLCK 4
+#define TARGET_F_SHLCK 8
+#endif
+
+#ifndef TARGET_ARCH_FLOCK_PAD
+#define TARGET_ARCH_FLOCK_PAD
+#endif
+
+struct target_flock {
+ short l_type;
+ short l_whence;
+ abi_long l_start;
+ abi_long l_len;
+#if defined(TARGET_MIPS)
+ abi_long l_sysid;
+#endif
+ int l_pid;
+ TARGET_ARCH_FLOCK_PAD
+};
+
+#ifndef TARGET_ARCH_FLOCK64_PAD
+#define TARGET_ARCH_FLOCK64_PAD
+#endif
+
+struct target_flock64 {
+ abi_short l_type;
+ abi_short l_whence;
+ abi_llong l_start;
+ abi_llong l_len;
+ abi_int l_pid;
+ TARGET_ARCH_FLOCK64_PAD
+};
+#endif
diff --git a/linux-user/generic/signal.h b/linux-user/generic/signal.h
new file mode 100644
index 0000000000..e1083f8fba
--- /dev/null
+++ b/linux-user/generic/signal.h
@@ -0,0 +1,57 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef GENERIC_SIGNAL_H
+#define GENERIC_SIGNAL_H
+
+#define TARGET_SA_NOCLDSTOP 0x00000001
+#define TARGET_SA_NOCLDWAIT 0x00000002 /* not supported yet */
+#define TARGET_SA_SIGINFO 0x00000004
+#define TARGET_SA_ONSTACK 0x08000000
+#define TARGET_SA_RESTART 0x10000000
+#define TARGET_SA_NODEFER 0x40000000
+#define TARGET_SA_RESETHAND 0x80000000
+#define TARGET_SA_RESTORER 0x04000000
+
+#define TARGET_SIGHUP 1
+#define TARGET_SIGINT 2
+#define TARGET_SIGQUIT 3
+#define TARGET_SIGILL 4
+#define TARGET_SIGTRAP 5
+#define TARGET_SIGABRT 6
+#define TARGET_SIGIOT 6
+#define TARGET_SIGBUS 7
+#define TARGET_SIGFPE 8
+#define TARGET_SIGKILL 9
+#define TARGET_SIGUSR1 10
+#define TARGET_SIGSEGV 11
+#define TARGET_SIGUSR2 12
+#define TARGET_SIGPIPE 13
+#define TARGET_SIGALRM 14
+#define TARGET_SIGTERM 15
+#define TARGET_SIGSTKFLT 16
+#define TARGET_SIGCHLD 17
+#define TARGET_SIGCONT 18
+#define TARGET_SIGSTOP 19
+#define TARGET_SIGTSTP 20
+#define TARGET_SIGTTIN 21
+#define TARGET_SIGTTOU 22
+#define TARGET_SIGURG 23
+#define TARGET_SIGXCPU 24
+#define TARGET_SIGXFSZ 25
+#define TARGET_SIGVTALRM 26
+#define TARGET_SIGPROF 27
+#define TARGET_SIGWINCH 28
+#define TARGET_SIGIO 29
+#define TARGET_SIGPWR 30
+#define TARGET_SIGSYS 31
+#define TARGET_SIGRTMIN 32
+
+#define TARGET_SIG_BLOCK 0 /* for blocking signals */
+#define TARGET_SIG_UNBLOCK 1 /* for unblocking signals */
+#define TARGET_SIG_SETMASK 2 /* for setting the signal mask */
+#endif
diff --git a/linux-user/hppa/signal.c b/linux-user/hppa/signal.c
index 6e7a295aee..b6927ee673 100644
--- a/linux-user/hppa/signal.c
+++ b/linux-user/hppa/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/hppa/target_cpu.h b/linux-user/hppa/target_cpu.h
index 7b78bbea80..1c539bdbd6 100644
--- a/linux-user/hppa/target_cpu.h
+++ b/linux-user/hppa/target_cpu.h
@@ -16,8 +16,8 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef ALPHA_TARGET_CPU_H
-#define ALPHA_TARGET_CPU_H
+#ifndef HPPA_TARGET_CPU_H
+#define HPPA_TARGET_CPU_H
static inline void cpu_clone_regs(CPUHPPAState *env, target_ulong newsp)
{
@@ -36,4 +36,8 @@ static inline void cpu_set_tls(CPUHPPAState *env, target_ulong newtls)
env->cr[27] = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUHPPAState *state)
+{
+ return state->gr[30];
+}
#endif
diff --git a/linux-user/hppa/target_fcntl.h b/linux-user/hppa/target_fcntl.h
new file mode 100644
index 0000000000..bd966a59b8
--- /dev/null
+++ b/linux-user/hppa/target_fcntl.h
@@ -0,0 +1,42 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef HPPA_TARGET_FCNTL_H
+#define HPPA_TARGET_FCNTL_H
+
+#define TARGET_O_NONBLOCK 000200004 /* HPUX has separate NDELAY & NONBLOCK */
+#define TARGET_O_APPEND 000000010
+#define TARGET_O_CREAT 000000400 /* not fcntl */
+#define TARGET_O_EXCL 000002000 /* not fcntl */
+#define TARGET_O_NOCTTY 000400000 /* not fcntl */
+#define TARGET_O_DSYNC 001000000
+#define TARGET_O_LARGEFILE 000004000
+#define TARGET_O_DIRECTORY 000010000 /* must be a directory */
+#define TARGET_O_NOFOLLOW 000000200 /* don't follow links */
+#define TARGET_O_NOATIME 004000000
+#define TARGET_O_CLOEXEC 010000000
+#define TARGET___O_SYNC 000100000
+#define TARGET_O_PATH 020000000
+
+#define TARGET_F_RDLCK 1
+#define TARGET_F_WRLCK 2
+#define TARGET_F_UNLCK 3
+
+#define TARGET_F_GETLK64 8 /* using 'struct flock64' */
+#define TARGET_F_SETLK64 9
+#define TARGET_F_SETLKW64 10
+
+#define TARGET_F_GETLK 5
+#define TARGET_F_SETLK 6
+#define TARGET_F_SETLKW 7
+#define TARGET_F_GETOWN 11 /* for sockets. */
+#define TARGET_F_SETOWN 12 /* for sockets. */
+#define TARGET_F_SETSIG 13 /* for sockets. */
+#define TARGET_F_GETSIG 14 /* for sockets. */
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/hppa/target_signal.h b/linux-user/hppa/target_signal.h
index f28b4bf6e8..ba159ff8d0 100644
--- a/linux-user/hppa/target_signal.h
+++ b/linux-user/hppa/target_signal.h
@@ -1,7 +1,43 @@
#ifndef HPPA_TARGET_SIGNAL_H
#define HPPA_TARGET_SIGNAL_H
-#include "cpu.h"
+#define TARGET_SIGHUP 1
+#define TARGET_SIGINT 2
+#define TARGET_SIGQUIT 3
+#define TARGET_SIGILL 4
+#define TARGET_SIGTRAP 5
+#define TARGET_SIGABRT 6
+#define TARGET_SIGIOT 6
+#define TARGET_SIGSTKFLT 7
+#define TARGET_SIGFPE 8
+#define TARGET_SIGKILL 9
+#define TARGET_SIGBUS 10
+#define TARGET_SIGSEGV 11
+#define TARGET_SIGXCPU 12
+#define TARGET_SIGPIPE 13
+#define TARGET_SIGALRM 14
+#define TARGET_SIGTERM 15
+#define TARGET_SIGUSR1 16
+#define TARGET_SIGUSR2 17
+#define TARGET_SIGCHLD 18
+#define TARGET_SIGPWR 19
+#define TARGET_SIGVTALRM 20
+#define TARGET_SIGPROF 21
+#define TARGET_SIGIO 22
+#define TARGET_SIGPOLL TARGET_SIGIO
+#define TARGET_SIGWINCH 23
+#define TARGET_SIGSTOP 24
+#define TARGET_SIGTSTP 25
+#define TARGET_SIGCONT 26
+#define TARGET_SIGTTIN 27
+#define TARGET_SIGTTOU 28
+#define TARGET_SIGURG 29
+#define TARGET_SIGXFSZ 30
+#define TARGET_SIGSYS 31
+
+#define TARGET_SIG_BLOCK 0
+#define TARGET_SIG_UNBLOCK 1
+#define TARGET_SIG_SETMASK 2
/* this struct defines a stack used during syscall handling */
@@ -18,11 +54,15 @@ typedef struct target_sigaltstack {
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2
+#define TARGET_SA_ONSTACK 0x00000001
+#define TARGET_SA_RESETHAND 0x00000004
+#define TARGET_SA_NOCLDSTOP 0x00000008
+#define TARGET_SA_SIGINFO 0x00000010
+#define TARGET_SA_NODEFER 0x00000020
+#define TARGET_SA_RESTART 0x00000040
+#define TARGET_SA_NOCLDWAIT 0x00000080
+
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUHPPAState *state)
-{
- return state->gr[30];
-}
#endif /* HPPA_TARGET_SIGNAL_H */
diff --git a/linux-user/i386/signal.c b/linux-user/i386/signal.c
index e9a23a2dec..fecb4c99c3 100644
--- a/linux-user/i386/signal.c
+++ b/linux-user/i386/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/i386/target_cpu.h b/linux-user/i386/target_cpu.h
index 7fbcf9bb57..ece04d0966 100644
--- a/linux-user/i386/target_cpu.h
+++ b/linux-user/i386/target_cpu.h
@@ -45,4 +45,8 @@ static inline void cpu_set_tls(CPUX86State *env, target_ulong newtls)
}
#endif /* defined(TARGET_ABI32) */
+static inline abi_ulong get_sp_from_cpustate(CPUX86State *state)
+{
+ return state->regs[R_ESP];
+}
#endif /* I386_TARGET_CPU_H */
diff --git a/linux-user/i386/target_fcntl.h b/linux-user/i386/target_fcntl.h
new file mode 100644
index 0000000000..4819743dae
--- /dev/null
+++ b/linux-user/i386/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef I386_TARGET_FCNTL_H
+#define I386_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/i386/target_signal.h b/linux-user/i386/target_signal.h
index 6ad4089482..f55e78fd33 100644
--- a/linux-user/i386/target_signal.h
+++ b/linux-user/i386/target_signal.h
@@ -1,8 +1,6 @@
#ifndef I386_TARGET_SIGNAL_H
#define I386_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUX86State *state)
-{
- return state->regs[R_ESP];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* I386_TARGET_SIGNAL_H */
diff --git a/linux-user/m68k/signal.c b/linux-user/m68k/signal.c
index 5dd8bb5f99..38bd77ec16 100644
--- a/linux-user/m68k/signal.c
+++ b/linux-user/m68k/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/m68k/target_cpu.h b/linux-user/m68k/target_cpu.h
index cc0bfc298e..611df065ca 100644
--- a/linux-user/m68k/target_cpu.h
+++ b/linux-user/m68k/target_cpu.h
@@ -37,4 +37,8 @@ static inline void cpu_set_tls(CPUM68KState *env, target_ulong newtls)
ts->tp_value = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUM68KState *state)
+{
+ return state->aregs[7];
+}
#endif
diff --git a/linux-user/m68k/target_fcntl.h b/linux-user/m68k/target_fcntl.h
new file mode 100644
index 0000000000..068bc3243e
--- /dev/null
+++ b/linux-user/m68k/target_fcntl.h
@@ -0,0 +1,17 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef M68K_TARGET_FCNTL_H
+#define M68K_TARGET_FCNTL_H
+
+#define TARGET_O_DIRECTORY 040000 /* must be a directory */
+#define TARGET_O_NOFOLLOW 0100000 /* don't follow links */
+#define TARGET_O_DIRECT 0200000 /* direct disk access hint */
+#define TARGET_O_LARGEFILE 0400000
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/m68k/target_signal.h b/linux-user/m68k/target_signal.h
index ff303f2b3c..314e808844 100644
--- a/linux-user/m68k/target_signal.h
+++ b/linux-user/m68k/target_signal.h
@@ -1,8 +1,6 @@
#ifndef M68K_TARGET_SIGNAL_H
#define M68K_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUM68KState *state)
-{
- return state->aregs[7];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* M68K_TARGET_SIGNAL_H */
diff --git a/linux-user/microblaze/signal.c b/linux-user/microblaze/signal.c
index fada0f1495..712ee522b2 100644
--- a/linux-user/microblaze/signal.c
+++ b/linux-user/microblaze/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/microblaze/target_cpu.h b/linux-user/microblaze/target_cpu.h
index 7dd979f960..73e139938c 100644
--- a/linux-user/microblaze/target_cpu.h
+++ b/linux-user/microblaze/target_cpu.h
@@ -32,4 +32,8 @@ static inline void cpu_set_tls(CPUMBState *env, target_ulong newtls)
env->regs[21] = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUMBState *state)
+{
+ return state->regs[1];
+}
#endif
diff --git a/linux-user/microblaze/target_fcntl.h b/linux-user/microblaze/target_fcntl.h
new file mode 100644
index 0000000000..45402275ff
--- /dev/null
+++ b/linux-user/microblaze/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef MICROBLAZE_TARGET_FCNTL_H
+#define MICROBLAZE_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/microblaze/target_signal.h b/linux-user/microblaze/target_signal.h
index 9fe4048292..35efd5e928 100644
--- a/linux-user/microblaze/target_signal.h
+++ b/linux-user/microblaze/target_signal.h
@@ -1,8 +1,6 @@
#ifndef MICROBLAZE_TARGET_SIGNAL_H
#define MICROBLAZE_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUMBState *state)
-{
- return state->regs[1];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* MICROBLAZE_TARGET_SIGNAL_H */
diff --git a/linux-user/mips/signal.c b/linux-user/mips/signal.c
index ed9849c7f6..6aa303ec9c 100644
--- a/linux-user/mips/signal.c
+++ b/linux-user/mips/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/mips/target_cpu.h b/linux-user/mips/target_cpu.h
index 2002920312..02cf5eeff7 100644
--- a/linux-user/mips/target_cpu.h
+++ b/linux-user/mips/target_cpu.h
@@ -33,4 +33,8 @@ static inline void cpu_set_tls(CPUMIPSState *env, target_ulong newtls)
env->active_tc.CP0_UserLocal = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUMIPSState *state)
+{
+ return state->active_tc.gpr[29];
+}
#endif
diff --git a/linux-user/mips/target_fcntl.h b/linux-user/mips/target_fcntl.h
new file mode 100644
index 0000000000..000527cc95
--- /dev/null
+++ b/linux-user/mips/target_fcntl.h
@@ -0,0 +1,38 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef MIPS_TARGET_FCNTL_H
+#define MIPS_TARGET_FCNTL_H
+
+#define TARGET_O_APPEND 0x0008
+#define TARGET_O_DSYNC 0x0010
+#define TARGET_O_NONBLOCK 0x0080
+#define TARGET_O_CREAT 0x0100 /* not fcntl */
+#define TARGET_O_TRUNC 0x0200 /* not fcntl */
+#define TARGET_O_EXCL 0x0400 /* not fcntl */
+#define TARGET_O_NOCTTY 0x0800 /* not fcntl */
+#define TARGET_FASYNC 0x1000 /* fcntl, for BSD compatibility */
+#define TARGET_O_LARGEFILE 0x2000 /* allow large file opens */
+#define TARGET___O_SYNC 0x4000
+#define TARGET_O_DIRECT 0x8000 /* direct disk access hint */
+
+#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 23 /* for sockets. */
+
+#define TARGET_ARCH_FLOCK_PAD abi_long pad[4];
+#define TARGET_ARCH_FLOCK64_PAD
+
+#define TARGET_F_GETLK64 33 /* using 'struct flock64' */
+#define TARGET_F_SETLK64 34
+#define TARGET_F_SETLKW64 35
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/mips/target_signal.h b/linux-user/mips/target_signal.h
index d36f5da0a0..66e1ad44a6 100644
--- a/linux-user/mips/target_signal.h
+++ b/linux-user/mips/target_signal.h
@@ -1,7 +1,46 @@
#ifndef MIPS_TARGET_SIGNAL_H
#define MIPS_TARGET_SIGNAL_H
-#include "cpu.h"
+#define TARGET_SIGHUP 1 /* Hangup (POSIX). */
+#define TARGET_SIGINT 2 /* Interrupt (ANSI). */
+#define TARGET_SIGQUIT 3 /* Quit (POSIX). */
+#define TARGET_SIGILL 4 /* Illegal instruction (ANSI). */
+#define TARGET_SIGTRAP 5 /* Trace trap (POSIX). */
+#define TARGET_SIGIOT 6 /* IOT trap (4.2 BSD). */
+#define TARGET_SIGABRT TARGET_SIGIOT /* Abort (ANSI). */
+#define TARGET_SIGEMT 7
+#define TARGET_SIGSTKFLT 7 /* XXX: incorrect */
+#define TARGET_SIGFPE 8 /* Floating-point exception (ANSI). */
+#define TARGET_SIGKILL 9 /* Kill, unblockable (POSIX). */
+#define TARGET_SIGBUS 10 /* BUS error (4.2 BSD). */
+#define TARGET_SIGSEGV 11 /* Segmentation violation (ANSI). */
+#define TARGET_SIGSYS 12
+#define TARGET_SIGPIPE 13 /* Broken pipe (POSIX). */
+#define TARGET_SIGALRM 14 /* Alarm clock (POSIX). */
+#define TARGET_SIGTERM 15 /* Termination (ANSI). */
+#define TARGET_SIGUSR1 16 /* User-defined signal 1 (POSIX). */
+#define TARGET_SIGUSR2 17 /* User-defined signal 2 (POSIX). */
+#define TARGET_SIGCHLD 18 /* Child status has changed (POSIX). */
+#define TARGET_SIGCLD TARGET_SIGCHLD /* Same as TARGET_SIGCHLD (System V). */
+#define TARGET_SIGPWR 19 /* Power failure restart (System V). */
+#define TARGET_SIGWINCH 20 /* Window size change (4.3 BSD, Sun). */
+#define TARGET_SIGURG 21 /* Urgent condition on socket (4.2 BSD). */
+#define TARGET_SIGIO 22 /* I/O now possible (4.2 BSD). */
+#define TARGET_SIGPOLL TARGET_SIGIO /* Pollable event occurred (System V). */
+#define TARGET_SIGSTOP 23 /* Stop, unblockable (POSIX). */
+#define TARGET_SIGTSTP 24 /* Keyboard stop (POSIX). */
+#define TARGET_SIGCONT 25 /* Continue (POSIX). */
+#define TARGET_SIGTTIN 26 /* Background read from tty (POSIX). */
+#define TARGET_SIGTTOU 27 /* Background write to tty (POSIX). */
+#define TARGET_SIGVTALRM 28 /* Virtual alarm clock (4.2 BSD). */
+#define TARGET_SIGPROF 29 /* Profiling alarm clock (4.2 BSD). */
+#define TARGET_SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */
+#define TARGET_SIGXFSZ 31 /* File size limit exceeded (4.2 BSD). */
+#define TARGET_SIGRTMIN 32
+
+#define TARGET_SIG_BLOCK 1 /* for blocking signals */
+#define TARGET_SIG_UNBLOCK 2 /* for unblocking signals */
+#define TARGET_SIG_SETMASK 3 /* for setting the signal mask */
/* this struct defines a stack used during syscall handling */
@@ -18,14 +57,18 @@ typedef struct target_sigaltstack {
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2
+#define TARGET_SA_NOCLDSTOP 0x00000001
+#define TARGET_SA_NOCLDWAIT 0x00010000
+#define TARGET_SA_SIGINFO 0x00000008
+#define TARGET_SA_ONSTACK 0x08000000
+#define TARGET_SA_NODEFER 0x40000000
+#define TARGET_SA_RESTART 0x10000000
+#define TARGET_SA_RESETHAND 0x80000000
+#define TARGET_SA_RESTORER 0x04000000 /* Only for O32 */
+
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUMIPSState *state)
-{
- return state->active_tc.gpr[29];
-}
-
#if defined(TARGET_ABI_MIPSO32)
/* compare linux/arch/mips/kernel/signal.c:setup_frame() */
#define TARGET_ARCH_HAS_SETUP_FRAME
diff --git a/linux-user/mips64/target_fcntl.h b/linux-user/mips64/target_fcntl.h
new file mode 100644
index 0000000000..a511bc0e6c
--- /dev/null
+++ b/linux-user/mips64/target_fcntl.h
@@ -0,0 +1 @@
+#include "../mips/target_fcntl.h"
diff --git a/linux-user/mips64/target_signal.h b/linux-user/mips64/target_signal.h
index c074e1592f..753e91fbd6 100644
--- a/linux-user/mips64/target_signal.h
+++ b/linux-user/mips64/target_signal.h
@@ -1,7 +1,46 @@
#ifndef MIPS64_TARGET_SIGNAL_H
#define MIPS64_TARGET_SIGNAL_H
-#include "cpu.h"
+#define TARGET_SIGHUP 1 /* Hangup (POSIX). */
+#define TARGET_SIGINT 2 /* Interrupt (ANSI). */
+#define TARGET_SIGQUIT 3 /* Quit (POSIX). */
+#define TARGET_SIGILL 4 /* Illegal instruction (ANSI). */
+#define TARGET_SIGTRAP 5 /* Trace trap (POSIX). */
+#define TARGET_SIGIOT 6 /* IOT trap (4.2 BSD). */
+#define TARGET_SIGABRT TARGET_SIGIOT /* Abort (ANSI). */
+#define TARGET_SIGEMT 7
+#define TARGET_SIGSTKFLT 7 /* XXX: incorrect */
+#define TARGET_SIGFPE 8 /* Floating-point exception (ANSI). */
+#define TARGET_SIGKILL 9 /* Kill, unblockable (POSIX). */
+#define TARGET_SIGBUS 10 /* BUS error (4.2 BSD). */
+#define TARGET_SIGSEGV 11 /* Segmentation violation (ANSI). */
+#define TARGET_SIGSYS 12
+#define TARGET_SIGPIPE 13 /* Broken pipe (POSIX). */
+#define TARGET_SIGALRM 14 /* Alarm clock (POSIX). */
+#define TARGET_SIGTERM 15 /* Termination (ANSI). */
+#define TARGET_SIGUSR1 16 /* User-defined signal 1 (POSIX). */
+#define TARGET_SIGUSR2 17 /* User-defined signal 2 (POSIX). */
+#define TARGET_SIGCHLD 18 /* Child status has changed (POSIX). */
+#define TARGET_SIGCLD TARGET_SIGCHLD /* Same as TARGET_SIGCHLD (System V). */
+#define TARGET_SIGPWR 19 /* Power failure restart (System V). */
+#define TARGET_SIGWINCH 20 /* Window size change (4.3 BSD, Sun). */
+#define TARGET_SIGURG 21 /* Urgent condition on socket (4.2 BSD). */
+#define TARGET_SIGIO 22 /* I/O now possible (4.2 BSD). */
+#define TARGET_SIGPOLL TARGET_SIGIO /* Pollable event occurred (System V). */
+#define TARGET_SIGSTOP 23 /* Stop, unblockable (POSIX). */
+#define TARGET_SIGTSTP 24 /* Keyboard stop (POSIX). */
+#define TARGET_SIGCONT 25 /* Continue (POSIX). */
+#define TARGET_SIGTTIN 26 /* Background read from tty (POSIX). */
+#define TARGET_SIGTTOU 27 /* Background write to tty (POSIX). */
+#define TARGET_SIGVTALRM 28 /* Virtual alarm clock (4.2 BSD). */
+#define TARGET_SIGPROF 29 /* Profiling alarm clock (4.2 BSD). */
+#define TARGET_SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */
+#define TARGET_SIGXFSZ 31 /* File size limit exceeded (4.2 BSD). */
+#define TARGET_SIGRTMIN 32
+
+#define TARGET_SIG_BLOCK 1 /* for blocking signals */
+#define TARGET_SIG_UNBLOCK 2 /* for unblocking signals */
+#define TARGET_SIG_SETMASK 3 /* for setting the signal mask */
/* this struct defines a stack used during syscall handling */
@@ -18,11 +57,15 @@ typedef struct target_sigaltstack {
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2
+#define TARGET_SA_NOCLDSTOP 0x00000001
+#define TARGET_SA_NOCLDWAIT 0x00010000
+#define TARGET_SA_SIGINFO 0x00000008
+#define TARGET_SA_ONSTACK 0x08000000
+#define TARGET_SA_NODEFER 0x40000000
+#define TARGET_SA_RESTART 0x10000000
+#define TARGET_SA_RESETHAND 0x80000000
+
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUMIPSState *state)
-{
- return state->active_tc.gpr[29];
-}
#endif /* MIPS64_TARGET_SIGNAL_H */
diff --git a/linux-user/nios2/signal.c b/linux-user/nios2/signal.c
index 9a0b36e5ad..4985dc2212 100644
--- a/linux-user/nios2/signal.c
+++ b/linux-user/nios2/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/nios2/target_cpu.h b/linux-user/nios2/target_cpu.h
index 20ab4790a9..14f63338fa 100644
--- a/linux-user/nios2/target_cpu.h
+++ b/linux-user/nios2/target_cpu.h
@@ -36,4 +36,8 @@ static inline void cpu_set_tls(CPUNios2State *env, target_ulong newtls)
*/
}
+static inline abi_ulong get_sp_from_cpustate(CPUNios2State *state)
+{
+ return state->regs[R_SP];
+}
#endif
diff --git a/linux-user/nios2/target_fcntl.h b/linux-user/nios2/target_fcntl.h
new file mode 100644
index 0000000000..714583215d
--- /dev/null
+++ b/linux-user/nios2/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef NIOS2_TARGET_FCNTL_H
+#define NIOS2_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/nios2/target_signal.h b/linux-user/nios2/target_signal.h
index f4db4d6d62..7776bcdbfd 100644
--- a/linux-user/nios2/target_signal.h
+++ b/linux-user/nios2/target_signal.h
@@ -1,8 +1,6 @@
#ifndef TARGET_SIGNAL_H
#define TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -18,8 +16,6 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUNios2State *state)
-{
- return state->regs[R_SP];
-}
+#include "../generic/signal.h"
+
#endif /* TARGET_SIGNAL_H */
diff --git a/linux-user/openrisc/signal.c b/linux-user/openrisc/signal.c
index ecf2897ccd..8be0b74001 100644
--- a/linux-user/openrisc/signal.c
+++ b/linux-user/openrisc/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/openrisc/target_cpu.h b/linux-user/openrisc/target_cpu.h
index 606ad6f695..d1ea4506e2 100644
--- a/linux-user/openrisc/target_cpu.h
+++ b/linux-user/openrisc/target_cpu.h
@@ -33,4 +33,8 @@ static inline void cpu_set_tls(CPUOpenRISCState *env, target_ulong newtls)
cpu_set_gpr(env, 10, newtls);
}
+static inline abi_ulong get_sp_from_cpustate(CPUOpenRISCState *state)
+{
+ return cpu_get_gpr(state, 1);
+}
#endif
diff --git a/linux-user/openrisc/target_fcntl.h b/linux-user/openrisc/target_fcntl.h
new file mode 100644
index 0000000000..ea31bf8b70
--- /dev/null
+++ b/linux-user/openrisc/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef OPENRISC_TARGET_FCNTL_H
+#define OPENRISC_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/openrisc/target_signal.h b/linux-user/openrisc/target_signal.h
index 2a4e00b035..c352a8b333 100644
--- a/linux-user/openrisc/target_signal.h
+++ b/linux-user/openrisc/target_signal.h
@@ -1,8 +1,6 @@
#ifndef OPENRISC_TARGET_SIGNAL_H
#define OPENRISC_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -15,11 +13,17 @@ typedef struct target_sigaltstack {
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2
+#define TARGET_SA_NOCLDSTOP 0x00000001
+#define TARGET_SA_NOCLDWAIT 0x00000002
+#define TARGET_SA_SIGINFO 0x00000004
+#define TARGET_SA_ONSTACK 0x08000000
+#define TARGET_SA_RESTART 0x10000000
+#define TARGET_SA_NODEFER 0x40000000
+#define TARGET_SA_RESETHAND 0x80000000
+
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUOpenRISCState *state)
-{
- return cpu_get_gpr(state, 1);
-}
+#include "../generic/signal.h"
+
#endif /* OPENRISC_TARGET_SIGNAL_H */
diff --git a/linux-user/ppc/signal.c b/linux-user/ppc/signal.c
index cacc9afb5a..ef4c518f11 100644
--- a/linux-user/ppc/signal.c
+++ b/linux-user/ppc/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/ppc/target_cpu.h b/linux-user/ppc/target_cpu.h
index 3aab3d185d..c4641834e7 100644
--- a/linux-user/ppc/target_cpu.h
+++ b/linux-user/ppc/target_cpu.h
@@ -47,5 +47,8 @@ static inline uint32_t get_ppc64_abi(struct image_info *infop)
return infop->elf_flags & EF_PPC64_ABI;
}
-
+static inline abi_ulong get_sp_from_cpustate(CPUPPCState *state)
+{
+ return state->gpr[1];
+}
#endif
diff --git a/linux-user/ppc/target_fcntl.h b/linux-user/ppc/target_fcntl.h
new file mode 100644
index 0000000000..d74ab710cf
--- /dev/null
+++ b/linux-user/ppc/target_fcntl.h
@@ -0,0 +1,17 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef PPC_TARGET_FCNTL_H
+#define PPC_TARGET_FCNTL_H
+
+#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 */
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/ppc/target_signal.h b/linux-user/ppc/target_signal.h
index e3bf1d2856..4453e2e7ef 100644
--- a/linux-user/ppc/target_signal.h
+++ b/linux-user/ppc/target_signal.h
@@ -1,8 +1,6 @@
#ifndef PPC_TARGET_SIGNAL_H
#define PPC_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUPPCState *state)
-{
- return state->gpr[1];
-}
+#include "../generic/signal.h"
#if !defined(TARGET_PPC64)
#define TARGET_ARCH_HAS_SETUP_FRAME
diff --git a/linux-user/qemu.h b/linux-user/qemu.h
index c55c8e294b..6fa1e968db 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -623,7 +623,6 @@ static inline void *lock_user_string(abi_ulong guest_addr)
* above, so include them last.
*/
#include "target_cpu.h"
-#include "target_signal.h"
#include "target_structs.h"
#endif /* QEMU_H */
diff --git a/linux-user/riscv/signal.c b/linux-user/riscv/signal.c
index ef599e319a..f598d41891 100644
--- a/linux-user/riscv/signal.c
+++ b/linux-user/riscv/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/riscv/target_cpu.h b/linux-user/riscv/target_cpu.h
index c5549b1120..7e090f376a 100644
--- a/linux-user/riscv/target_cpu.h
+++ b/linux-user/riscv/target_cpu.h
@@ -15,4 +15,8 @@ static inline void cpu_set_tls(CPURISCVState *env, target_ulong newtls)
env->gpr[xTP] = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPURISCVState *state)
+{
+ return state->gpr[xSP];
+}
#endif
diff --git a/linux-user/riscv/target_fcntl.h b/linux-user/riscv/target_fcntl.h
new file mode 100644
index 0000000000..9c3d0fbe2b
--- /dev/null
+++ b/linux-user/riscv/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef RISCV_TARGET_FCNTL_H
+#define RISCV_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/riscv/target_signal.h b/linux-user/riscv/target_signal.h
index 9dac002c0d..c8b1455800 100644
--- a/linux-user/riscv/target_signal.h
+++ b/linux-user/riscv/target_signal.h
@@ -1,8 +1,6 @@
#ifndef TARGET_SIGNAL_H
#define TARGET_SIGNAL_H
-#include "cpu.h"
-
typedef struct target_sigaltstack {
abi_ulong ss_sp;
abi_int ss_flags;
@@ -15,8 +13,6 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPURISCVState *state)
-{
- return state->gpr[xSP];
-}
+#include "../generic/signal.h"
+
#endif /* TARGET_SIGNAL_H */
diff --git a/linux-user/s390x/signal.c b/linux-user/s390x/signal.c
index e35cbe6870..3d3cb67bbe 100644
--- a/linux-user/s390x/signal.c
+++ b/linux-user/s390x/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/s390x/target_cpu.h b/linux-user/s390x/target_cpu.h
index 87ea4d2d9b..66ef8aa8c2 100644
--- a/linux-user/s390x/target_cpu.h
+++ b/linux-user/s390x/target_cpu.h
@@ -36,4 +36,8 @@ static inline void cpu_set_tls(CPUS390XState *env, target_ulong newtls)
env->aregs[1] = newtls & 0xffffffffULL;
}
+static inline abi_ulong get_sp_from_cpustate(CPUS390XState *state)
+{
+ return state->regs[15];
+}
#endif
diff --git a/linux-user/s390x/target_fcntl.h b/linux-user/s390x/target_fcntl.h
new file mode 100644
index 0000000000..36dc50fba0
--- /dev/null
+++ b/linux-user/s390x/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef S390X_TARGET_FCNTL_H
+#define S390X_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/s390x/target_signal.h b/linux-user/s390x/target_signal.h
index 4e99f8fadd..b58bc7c20f 100644
--- a/linux-user/s390x/target_signal.h
+++ b/linux-user/s390x/target_signal.h
@@ -1,8 +1,6 @@
#ifndef S390X_TARGET_SIGNAL_H
#define S390X_TARGET_SIGNAL_H
-#include "cpu.h"
-
typedef struct target_sigaltstack {
abi_ulong ss_sp;
int ss_flags;
@@ -18,10 +16,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUS390XState *state)
-{
- return state->regs[15];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* S390X_TARGET_SIGNAL_H */
diff --git a/linux-user/sh4/signal.c b/linux-user/sh4/signal.c
index 2a5378e16e..c6752baa7e 100644
--- a/linux-user/sh4/signal.c
+++ b/linux-user/sh4/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/sh4/target_cpu.h b/linux-user/sh4/target_cpu.h
index 9d305d2833..1a647ddb98 100644
--- a/linux-user/sh4/target_cpu.h
+++ b/linux-user/sh4/target_cpu.h
@@ -32,4 +32,8 @@ static inline void cpu_set_tls(CPUSH4State *env, target_ulong newtls)
env->gbr = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUSH4State *state)
+{
+ return state->gregs[15];
+}
#endif
diff --git a/linux-user/sh4/target_fcntl.h b/linux-user/sh4/target_fcntl.h
new file mode 100644
index 0000000000..2622d95539
--- /dev/null
+++ b/linux-user/sh4/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef SH4_TARGET_FCNTL_H
+#define SH4_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/sh4/target_signal.h b/linux-user/sh4/target_signal.h
index e7b18a6db4..434970a990 100644
--- a/linux-user/sh4/target_signal.h
+++ b/linux-user/sh4/target_signal.h
@@ -1,8 +1,6 @@
#ifndef SH4_TARGET_SIGNAL_H
#define SH4_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,10 +19,7 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUSH4State *state)
-{
- return state->gregs[15];
-}
+#include "../generic/signal.h"
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* SH4_TARGET_SIGNAL_H */
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 01de433e3a..be2815b45d 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -23,7 +23,6 @@
#include "qemu.h"
#include "qemu-common.h"
-#include "target_signal.h"
#include "trace.h"
#include "signal-common.h"
diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c
index 45e922f328..55e9d6f9b2 100644
--- a/linux-user/sparc/signal.c
+++ b/linux-user/sparc/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/sparc/target_cpu.h b/linux-user/sparc/target_cpu.h
index f2fe526204..1ffc0ae9f2 100644
--- a/linux-user/sparc/target_cpu.h
+++ b/linux-user/sparc/target_cpu.h
@@ -41,4 +41,15 @@ static inline void cpu_set_tls(CPUSPARCState *env, target_ulong newtls)
env->gregs[7] = newtls;
}
+#ifndef UREG_I6
+#define UREG_I6 6
+#endif
+#ifndef UREG_FP
+#define UREG_FP UREG_I6
+#endif
+
+static inline abi_ulong get_sp_from_cpustate(CPUSPARCState *state)
+{
+ return state->regwptr[UREG_FP];
+}
#endif
diff --git a/linux-user/sparc/target_fcntl.h b/linux-user/sparc/target_fcntl.h
new file mode 100644
index 0000000000..c2532989e5
--- /dev/null
+++ b/linux-user/sparc/target_fcntl.h
@@ -0,0 +1,45 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef SPARC_TARGET_FCNTL_H
+#define SPARC_TARGET_FCNTL_H
+
+#define TARGET_O_APPEND 0x0008
+#define TARGET_FASYNC 0x0040 /* fcntl, for BSD compatibility */
+#define TARGET_O_CREAT 0x0200 /* not fcntl */
+#define TARGET_O_TRUNC 0x0400 /* not fcntl */
+#define TARGET_O_EXCL 0x0800 /* not fcntl */
+#define TARGET_O_DSYNC 0x2000
+#define TARGET_O_NONBLOCK 0x4000
+# ifdef TARGET_SPARC64
+# define TARGET_O_NDELAY 0x0004
+# else
+# define TARGET_O_NDELAY (0x0004 | TARGET_O_NONBLOCK)
+# endif
+#define TARGET_O_NOCTTY 0x8000 /* not fcntl */
+#define TARGET_O_LARGEFILE 0x40000
+#define TARGET_O_DIRECT 0x100000 /* direct disk access hint */
+#define TARGET_O_NOATIME 0x200000
+#define TARGET_O_CLOEXEC 0x400000
+#define TARGET___O_SYNC 0x800000
+#define TARGET_O_PATH 0x1000000
+#define TARGET___O_TMPFILE 0x2000000
+
+#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
+
+#define TARGET_ARCH_FLOCK_PAD abi_short __unused;
+#define TARGET_ARCH_FLOCK64_PAD abi_short __unused;
+
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/sparc/target_signal.h b/linux-user/sparc/target_signal.h
index 467abea49e..5cc40327d2 100644
--- a/linux-user/sparc/target_signal.h
+++ b/linux-user/sparc/target_signal.h
@@ -1,7 +1,43 @@
#ifndef SPARC_TARGET_SIGNAL_H
#define SPARC_TARGET_SIGNAL_H
-#include "cpu.h"
+#define TARGET_SIGHUP 1
+#define TARGET_SIGINT 2
+#define TARGET_SIGQUIT 3
+#define TARGET_SIGILL 4
+#define TARGET_SIGTRAP 5
+#define TARGET_SIGABRT 6
+#define TARGET_SIGIOT 6
+#define TARGET_SIGSTKFLT 7 /* actually EMT */
+#define TARGET_SIGFPE 8
+#define TARGET_SIGKILL 9
+#define TARGET_SIGBUS 10
+#define TARGET_SIGSEGV 11
+#define TARGET_SIGSYS 12
+#define TARGET_SIGPIPE 13
+#define TARGET_SIGALRM 14
+#define TARGET_SIGTERM 15
+#define TARGET_SIGURG 16
+#define TARGET_SIGSTOP 17
+#define TARGET_SIGTSTP 18
+#define TARGET_SIGCONT 19
+#define TARGET_SIGCHLD 20
+#define TARGET_SIGTTIN 21
+#define TARGET_SIGTTOU 22
+#define TARGET_SIGIO 23
+#define TARGET_SIGXCPU 24
+#define TARGET_SIGXFSZ 25
+#define TARGET_SIGVTALRM 26
+#define TARGET_SIGPROF 27
+#define TARGET_SIGWINCH 28
+#define TARGET_SIGPWR 29
+#define TARGET_SIGUSR1 30
+#define TARGET_SIGUSR2 31
+#define TARGET_SIGRTMIN 32
+
+#define TARGET_SIG_BLOCK 0x01 /* for blocking signals */
+#define TARGET_SIG_UNBLOCK 0x02 /* for unblocking signals */
+#define TARGET_SIG_SETMASK 0x04 /* for setting the signal mask */
/* this struct defines a stack used during syscall handling */
@@ -18,20 +54,18 @@ typedef struct target_sigaltstack {
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2
+#define TARGET_SA_NOCLDSTOP 8u
+#define TARGET_SA_NOCLDWAIT 0x100u
+#define TARGET_SA_SIGINFO 0x200u
+#define TARGET_SA_ONSTACK 1u
+#define TARGET_SA_RESTART 2u
+#define TARGET_SA_NODEFER 0x20u
+#define TARGET_SA_RESETHAND 4u
+#define TARGET_ARCH_HAS_SA_RESTORER 1
+#define TARGET_ARCH_HAS_KA_RESTORER 1
+
#define TARGET_MINSIGSTKSZ 4096
#define TARGET_SIGSTKSZ 16384
-#ifndef UREG_I6
-#define UREG_I6 6
-#endif
-#ifndef UREG_FP
-#define UREG_FP UREG_I6
-#endif
-
-static inline abi_ulong get_sp_from_cpustate(CPUSPARCState *state)
-{
- return state->regwptr[UREG_FP];
-}
-
#define TARGET_ARCH_HAS_SETUP_FRAME
#endif /* SPARC_TARGET_SIGNAL_H */
diff --git a/linux-user/sparc64/signal.c b/linux-user/sparc64/signal.c
index c263eb0f08..170ebac232 100644
--- a/linux-user/sparc64/signal.c
+++ b/linux-user/sparc64/signal.c
@@ -16,5 +16,4 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
-#define SPARC_TARGET_SIGNAL_H /* to only include sparc64/target_signal.h */
#include "../sparc/signal.c"
diff --git a/linux-user/sparc64/target_fcntl.h b/linux-user/sparc64/target_fcntl.h
new file mode 100644
index 0000000000..053c774257
--- /dev/null
+++ b/linux-user/sparc64/target_fcntl.h
@@ -0,0 +1 @@
+#include "../sparc/target_fcntl.h"
diff --git a/linux-user/sparc64/target_signal.h b/linux-user/sparc64/target_signal.h
index 14b01d9632..6a7d57d024 100644
--- a/linux-user/sparc64/target_signal.h
+++ b/linux-user/sparc64/target_signal.h
@@ -1,37 +1 @@
-#ifndef SPARC64_TARGET_SIGNAL_H
-#define SPARC64_TARGET_SIGNAL_H
-
-#include "cpu.h"
-
-/* this struct defines a stack used during syscall handling */
-
-typedef struct target_sigaltstack {
- abi_ulong ss_sp;
- abi_long ss_flags;
- abi_ulong ss_size;
-} target_stack_t;
-
-
-/*
- * sigaltstack controls
- */
-#define TARGET_SS_ONSTACK 1
-#define TARGET_SS_DISABLE 2
-
-#define TARGET_MINSIGSTKSZ 4096
-#define TARGET_SIGSTKSZ 16384
-
-#ifndef UREG_I6
-#define UREG_I6 6
-#endif
-#ifndef UREG_FP
-#define UREG_FP UREG_I6
-#endif
-
-static inline abi_ulong get_sp_from_cpustate(CPUSPARCState *state)
-{
- return state->regwptr[UREG_FP];
-}
-
-#define TARGET_ARCH_HAS_SETUP_FRAME
-#endif /* SPARC64_TARGET_SIGNAL_H */
+#include "../sparc/target_signal.h"
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index d02c16bbc6..7b9ac3b408 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -10156,7 +10156,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
if (!is_error(ret)) {
/* Overwrite the native machine name with whatever is being
emulated. */
- strcpy (buf->machine, cpu_to_uname_machine(cpu_env));
+ g_strlcpy(buf->machine, cpu_to_uname_machine(cpu_env),
+ sizeof(buf->machine));
/* Allow the user to override the reported release. */
if (qemu_uname_release && *qemu_uname_release) {
g_strlcpy(buf->release, qemu_uname_release,
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index e4cd87cc00..40bb60ef4c 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -418,280 +418,13 @@ 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) \
- || defined(TARGET_MICROBLAZE) \
- || defined(TARGET_S390X) || defined(TARGET_OPENRISC) \
- || defined(TARGET_TILEGX) || defined(TARGET_HPPA) || defined(TARGET_NIOS2) \
- || defined(TARGET_RISCV) || defined(TARGET_XTENSA)
-
-#if defined(TARGET_SPARC)
-#define TARGET_SA_NOCLDSTOP 8u
-#define TARGET_SA_NOCLDWAIT 0x100u
-#define TARGET_SA_SIGINFO 0x200u
-#define TARGET_SA_ONSTACK 1u
-#define TARGET_SA_RESTART 2u
-#define TARGET_SA_NODEFER 0x20u
-#define TARGET_SA_RESETHAND 4u
-#define TARGET_ARCH_HAS_SA_RESTORER 1
-#define TARGET_ARCH_HAS_KA_RESTORER 1
-#elif defined(TARGET_MIPS)
-#define TARGET_SA_NOCLDSTOP 0x00000001
-#define TARGET_SA_NOCLDWAIT 0x00010000
-#define TARGET_SA_SIGINFO 0x00000008
-#define TARGET_SA_ONSTACK 0x08000000
-#define TARGET_SA_NODEFER 0x40000000
-#define TARGET_SA_RESTART 0x10000000
-#define TARGET_SA_RESETHAND 0x80000000
-#if !defined(TARGET_ABI_MIPSN32) && !defined(TARGET_ABI_MIPSN64)
-#define TARGET_SA_RESTORER 0x04000000 /* Only for O32 */
-#endif
-#elif defined(TARGET_OPENRISC)
-#define TARGET_SA_NOCLDSTOP 0x00000001
-#define TARGET_SA_NOCLDWAIT 0x00000002
-#define TARGET_SA_SIGINFO 0x00000004
-#define TARGET_SA_ONSTACK 0x08000000
-#define TARGET_SA_RESTART 0x10000000
-#define TARGET_SA_NODEFER 0x40000000
-#define TARGET_SA_RESETHAND 0x80000000
-#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
-#elif defined(TARGET_HPPA)
-#define TARGET_SA_ONSTACK 0x00000001
-#define TARGET_SA_RESETHAND 0x00000004
-#define TARGET_SA_NOCLDSTOP 0x00000008
-#define TARGET_SA_SIGINFO 0x00000010
-#define TARGET_SA_NODEFER 0x00000020
-#define TARGET_SA_RESTART 0x00000040
-#define TARGET_SA_NOCLDWAIT 0x00000080
-#else
-#define TARGET_SA_NOCLDSTOP 0x00000001
-#define TARGET_SA_NOCLDWAIT 0x00000002 /* not supported yet */
-#define TARGET_SA_SIGINFO 0x00000004
-#define TARGET_SA_ONSTACK 0x08000000
-#define TARGET_SA_RESTART 0x10000000
-#define TARGET_SA_NODEFER 0x40000000
-#define TARGET_SA_RESETHAND 0x80000000
-#define TARGET_SA_RESTORER 0x04000000
-#endif
+#include "target_signal.h"
#ifdef TARGET_SA_RESTORER
#define TARGET_ARCH_HAS_SA_RESTORER 1
#endif
#if defined(TARGET_ALPHA)
-
-#define TARGET_SIGHUP 1
-#define TARGET_SIGINT 2
-#define TARGET_SIGQUIT 3
-#define TARGET_SIGILL 4
-#define TARGET_SIGTRAP 5
-#define TARGET_SIGABRT 6
-#define TARGET_SIGSTKFLT 7 /* actually SIGEMT */
-#define TARGET_SIGFPE 8
-#define TARGET_SIGKILL 9
-#define TARGET_SIGBUS 10
-#define TARGET_SIGSEGV 11
-#define TARGET_SIGSYS 12
-#define TARGET_SIGPIPE 13
-#define TARGET_SIGALRM 14
-#define TARGET_SIGTERM 15
-#define TARGET_SIGURG 16
-#define TARGET_SIGSTOP 17
-#define TARGET_SIGTSTP 18
-#define TARGET_SIGCONT 19
-#define TARGET_SIGCHLD 20
-#define TARGET_SIGTTIN 21
-#define TARGET_SIGTTOU 22
-#define TARGET_SIGIO 23
-#define TARGET_SIGXCPU 24
-#define TARGET_SIGXFSZ 25
-#define TARGET_SIGVTALRM 26
-#define TARGET_SIGPROF 27
-#define TARGET_SIGWINCH 28
-#define TARGET_SIGPWR 29 /* actually SIGINFO */
-#define TARGET_SIGUSR1 30
-#define TARGET_SIGUSR2 31
-#define TARGET_SIGRTMIN 32
-
-#define TARGET_SIG_BLOCK 1
-#define TARGET_SIG_UNBLOCK 2
-#define TARGET_SIG_SETMASK 3
-
-#elif defined(TARGET_SPARC)
-
-#define TARGET_SIGHUP 1
-#define TARGET_SIGINT 2
-#define TARGET_SIGQUIT 3
-#define TARGET_SIGILL 4
-#define TARGET_SIGTRAP 5
-#define TARGET_SIGABRT 6
-#define TARGET_SIGIOT 6
-#define TARGET_SIGSTKFLT 7 /* actually EMT */
-#define TARGET_SIGFPE 8
-#define TARGET_SIGKILL 9
-#define TARGET_SIGBUS 10
-#define TARGET_SIGSEGV 11
-#define TARGET_SIGSYS 12
-#define TARGET_SIGPIPE 13
-#define TARGET_SIGALRM 14
-#define TARGET_SIGTERM 15
-#define TARGET_SIGURG 16
-#define TARGET_SIGSTOP 17
-#define TARGET_SIGTSTP 18
-#define TARGET_SIGCONT 19
-#define TARGET_SIGCHLD 20
-#define TARGET_SIGTTIN 21
-#define TARGET_SIGTTOU 22
-#define TARGET_SIGIO 23
-#define TARGET_SIGXCPU 24
-#define TARGET_SIGXFSZ 25
-#define TARGET_SIGVTALRM 26
-#define TARGET_SIGPROF 27
-#define TARGET_SIGWINCH 28
-#define TARGET_SIGPWR 29
-#define TARGET_SIGUSR1 30
-#define TARGET_SIGUSR2 31
-#define TARGET_SIGRTMIN 32
-
-#define TARGET_SIG_BLOCK 0x01 /* for blocking signals */
-#define TARGET_SIG_UNBLOCK 0x02 /* for unblocking signals */
-#define TARGET_SIG_SETMASK 0x04 /* for setting the signal mask */
-
-#elif defined(TARGET_MIPS)
-
-#define TARGET_SIGHUP 1 /* Hangup (POSIX). */
-#define TARGET_SIGINT 2 /* Interrupt (ANSI). */
-#define TARGET_SIGQUIT 3 /* Quit (POSIX). */
-#define TARGET_SIGILL 4 /* Illegal instruction (ANSI). */
-#define TARGET_SIGTRAP 5 /* Trace trap (POSIX). */
-#define TARGET_SIGIOT 6 /* IOT trap (4.2 BSD). */
-#define TARGET_SIGABRT TARGET_SIGIOT /* Abort (ANSI). */
-#define TARGET_SIGEMT 7
-#define TARGET_SIGSTKFLT 7 /* XXX: incorrect */
-#define TARGET_SIGFPE 8 /* Floating-point exception (ANSI). */
-#define TARGET_SIGKILL 9 /* Kill, unblockable (POSIX). */
-#define TARGET_SIGBUS 10 /* BUS error (4.2 BSD). */
-#define TARGET_SIGSEGV 11 /* Segmentation violation (ANSI). */
-#define TARGET_SIGSYS 12
-#define TARGET_SIGPIPE 13 /* Broken pipe (POSIX). */
-#define TARGET_SIGALRM 14 /* Alarm clock (POSIX). */
-#define TARGET_SIGTERM 15 /* Termination (ANSI). */
-#define TARGET_SIGUSR1 16 /* User-defined signal 1 (POSIX). */
-#define TARGET_SIGUSR2 17 /* User-defined signal 2 (POSIX). */
-#define TARGET_SIGCHLD 18 /* Child status has changed (POSIX). */
-#define TARGET_SIGCLD TARGET_SIGCHLD /* Same as TARGET_SIGCHLD (System V). */
-#define TARGET_SIGPWR 19 /* Power failure restart (System V). */
-#define TARGET_SIGWINCH 20 /* Window size change (4.3 BSD, Sun). */
-#define TARGET_SIGURG 21 /* Urgent condition on socket (4.2 BSD). */
-#define TARGET_SIGIO 22 /* I/O now possible (4.2 BSD). */
-#define TARGET_SIGPOLL TARGET_SIGIO /* Pollable event occurred (System V). */
-#define TARGET_SIGSTOP 23 /* Stop, unblockable (POSIX). */
-#define TARGET_SIGTSTP 24 /* Keyboard stop (POSIX). */
-#define TARGET_SIGCONT 25 /* Continue (POSIX). */
-#define TARGET_SIGTTIN 26 /* Background read from tty (POSIX). */
-#define TARGET_SIGTTOU 27 /* Background write to tty (POSIX). */
-#define TARGET_SIGVTALRM 28 /* Virtual alarm clock (4.2 BSD). */
-#define TARGET_SIGPROF 29 /* Profiling alarm clock (4.2 BSD). */
-#define TARGET_SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */
-#define TARGET_SIGXFSZ 31 /* File size limit exceeded (4.2 BSD). */
-#define TARGET_SIGRTMIN 32
-
-#define TARGET_SIG_BLOCK 1 /* for blocking signals */
-#define TARGET_SIG_UNBLOCK 2 /* for unblocking signals */
-#define TARGET_SIG_SETMASK 3 /* for setting the signal mask */
-
-#elif defined(TARGET_HPPA)
-
-#define TARGET_SIGHUP 1
-#define TARGET_SIGINT 2
-#define TARGET_SIGQUIT 3
-#define TARGET_SIGILL 4
-#define TARGET_SIGTRAP 5
-#define TARGET_SIGABRT 6
-#define TARGET_SIGIOT 6
-#define TARGET_SIGSTKFLT 7
-#define TARGET_SIGFPE 8
-#define TARGET_SIGKILL 9
-#define TARGET_SIGBUS 10
-#define TARGET_SIGSEGV 11
-#define TARGET_SIGXCPU 12
-#define TARGET_SIGPIPE 13
-#define TARGET_SIGALRM 14
-#define TARGET_SIGTERM 15
-#define TARGET_SIGUSR1 16
-#define TARGET_SIGUSR2 17
-#define TARGET_SIGCHLD 18
-#define TARGET_SIGPWR 19
-#define TARGET_SIGVTALRM 20
-#define TARGET_SIGPROF 21
-#define TARGET_SIGIO 22
-#define TARGET_SIGPOLL TARGET_SIGIO
-#define TARGET_SIGWINCH 23
-#define TARGET_SIGSTOP 24
-#define TARGET_SIGTSTP 25
-#define TARGET_SIGCONT 26
-#define TARGET_SIGTTIN 27
-#define TARGET_SIGTTOU 28
-#define TARGET_SIGURG 29
-#define TARGET_SIGXFSZ 30
-#define TARGET_SIGSYS 31
-
-#define TARGET_SIG_BLOCK 0
-#define TARGET_SIG_UNBLOCK 1
-#define TARGET_SIG_SETMASK 2
-
-#else
-
-/* OpenRISC Using the general signals */
-#define TARGET_SIGHUP 1
-#define TARGET_SIGINT 2
-#define TARGET_SIGQUIT 3
-#define TARGET_SIGILL 4
-#define TARGET_SIGTRAP 5
-#define TARGET_SIGABRT 6
-#define TARGET_SIGIOT 6
-#define TARGET_SIGBUS 7
-#define TARGET_SIGFPE 8
-#define TARGET_SIGKILL 9
-#define TARGET_SIGUSR1 10
-#define TARGET_SIGSEGV 11
-#define TARGET_SIGUSR2 12
-#define TARGET_SIGPIPE 13
-#define TARGET_SIGALRM 14
-#define TARGET_SIGTERM 15
-#define TARGET_SIGSTKFLT 16
-#define TARGET_SIGCHLD 17
-#define TARGET_SIGCONT 18
-#define TARGET_SIGSTOP 19
-#define TARGET_SIGTSTP 20
-#define TARGET_SIGTTIN 21
-#define TARGET_SIGTTOU 22
-#define TARGET_SIGURG 23
-#define TARGET_SIGXCPU 24
-#define TARGET_SIGXFSZ 25
-#define TARGET_SIGVTALRM 26
-#define TARGET_SIGPROF 27
-#define TARGET_SIGWINCH 28
-#define TARGET_SIGIO 29
-#define TARGET_SIGPWR 30
-#define TARGET_SIGSYS 31
-#define TARGET_SIGRTMIN 32
-
-#define TARGET_SIG_BLOCK 0 /* for blocking signals */
-#define TARGET_SIG_UNBLOCK 1 /* for unblocking signals */
-#define TARGET_SIG_SETMASK 2 /* for setting the signal mask */
-
-#endif
-
-#if defined(TARGET_ALPHA)
struct target_old_sigaction {
abi_ulong _sa_handler;
abi_ulong sa_mask;
@@ -925,8 +658,6 @@ typedef struct target_siginfo {
#define TARGET_TRAP_BRANCH (3) /* process taken branch trap */
#define TARGET_TRAP_HWBKPT (4) /* hardware breakpoint/watchpoint */
-#endif /* defined(TARGET_I386) || defined(TARGET_ARM) */
-
struct target_rlimit {
abi_ulong rlim_cur;
abi_ulong rlim_max;
@@ -2407,93 +2138,6 @@ struct target_statfs64 {
};
#endif
-
-#define TARGET_F_DUPFD 0 /* dup */
-#define TARGET_F_GETFD 1 /* get close_on_exec */
-#define TARGET_F_SETFD 2 /* set/clear close_on_exec */
-#define TARGET_F_GETFL 3 /* get file->f_flags */
-#define TARGET_F_SETFL 4 /* set file->f_flags */
-
-#if defined(TARGET_ALPHA)
-#define TARGET_F_GETLK 7
-#define TARGET_F_SETLK 8
-#define TARGET_F_SETLKW 9
-#define TARGET_F_SETOWN 5 /* for sockets. */
-#define TARGET_F_GETOWN 6 /* for sockets. */
-
-#define TARGET_F_RDLCK 1
-#define TARGET_F_WRLCK 2
-#define TARGET_F_UNLCK 8
-#define TARGET_F_EXLCK 16
-#define TARGET_F_SHLCK 32
-#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 23 /* for sockets. */
-#elif defined(TARGET_HPPA)
-#define TARGET_F_RDLCK 1
-#define TARGET_F_WRLCK 2
-#define TARGET_F_UNLCK 3
-#define TARGET_F_GETLK 5
-#define TARGET_F_SETLK 6
-#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
-#define TARGET_F_SETLKW 7
-#define TARGET_F_SETOWN 8 /* for sockets. */
-#define TARGET_F_GETOWN 9 /* for sockets. */
-#endif
-#define TARGET_F_SETOWN_EX 15
-#define TARGET_F_GETOWN_EX 16
-
-#ifndef TARGET_F_RDLCK
-#define TARGET_F_RDLCK 0
-#define TARGET_F_WRLCK 1
-#define TARGET_F_UNLCK 2
-#endif
-
-#ifndef TARGET_F_EXLCK
-#define TARGET_F_EXLCK 4
-#define TARGET_F_SHLCK 8
-#endif
-
-
-#if defined(TARGET_HPPA)
-#define TARGET_F_SETSIG 13 /* for sockets. */
-#define TARGET_F_GETSIG 14 /* for sockets. */
-#else
-#define TARGET_F_SETSIG 10 /* for sockets. */
-#define TARGET_F_GETSIG 11 /* for sockets. */
-#endif
-
-#if defined(TARGET_MIPS)
-#define TARGET_F_GETLK64 33 /* using 'struct flock64' */
-#define TARGET_F_SETLK64 34
-#define TARGET_F_SETLKW64 35
-#elif defined(TARGET_HPPA)
-#define TARGET_F_GETLK64 8 /* using 'struct flock64' */
-#define TARGET_F_SETLK64 9
-#define TARGET_F_SETLKW64 10
-#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)
@@ -2502,183 +2146,7 @@ struct target_statfs64 {
#define TARGET_F_GETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 8)
#define TARGET_F_NOTIFY (TARGET_F_LINUX_SPECIFIC_BASE+2)
-#if defined(TARGET_ALPHA)
-#define TARGET_O_NONBLOCK 04
-#define TARGET_O_APPEND 010
-#define TARGET_O_CREAT 01000 /* not fcntl */
-#define TARGET_O_TRUNC 02000 /* not fcntl */
-#define TARGET_O_EXCL 04000 /* not fcntl */
-#define TARGET_O_NOCTTY 010000 /* not fcntl */
-#define TARGET_O_DSYNC 040000
-#define TARGET_O_LARGEFILE 0 /* not necessary, always 64-bit */
-#define TARGET_O_DIRECTORY 0100000 /* must be a directory */
-#define TARGET_O_NOFOLLOW 0200000 /* don't follow links */
-#define TARGET_O_DIRECT 02000000 /* direct disk access hint */
-#define TARGET_O_NOATIME 04000000
-#define TARGET_O_CLOEXEC 010000000
-#define TARGET___O_SYNC 020000000
-#define TARGET_O_PATH 040000000
-#elif defined(TARGET_HPPA)
-#define TARGET_O_NONBLOCK 000200004 /* HPUX has separate NDELAY & NONBLOCK */
-#define TARGET_O_APPEND 000000010
-#define TARGET_O_CREAT 000000400 /* not fcntl */
-#define TARGET_O_EXCL 000002000 /* not fcntl */
-#define TARGET_O_NOCTTY 000400000 /* not fcntl */
-#define TARGET_O_DSYNC 001000000
-#define TARGET_O_LARGEFILE 000004000
-#define TARGET_O_DIRECTORY 000010000 /* must be a directory */
-#define TARGET_O_NOFOLLOW 000000200 /* don't follow links */
-#define TARGET_O_NOATIME 004000000
-#define TARGET_O_CLOEXEC 010000000
-#define TARGET___O_SYNC 000100000
-#define TARGET_O_PATH 020000000
-#elif defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_AARCH64)
-#define TARGET_O_DIRECTORY 040000 /* must be a directory */
-#define TARGET_O_NOFOLLOW 0100000 /* don't follow links */
-#define TARGET_O_DIRECT 0200000 /* direct disk access hint */
-#define TARGET_O_LARGEFILE 0400000
-#elif defined(TARGET_MIPS)
-#define TARGET_O_APPEND 0x0008
-#define TARGET_O_DSYNC 0x0010
-#define TARGET_O_NONBLOCK 0x0080
-#define TARGET_O_CREAT 0x0100 /* not fcntl */
-#define TARGET_O_TRUNC 0x0200 /* not fcntl */
-#define TARGET_O_EXCL 0x0400 /* not fcntl */
-#define TARGET_O_NOCTTY 0x0800 /* not fcntl */
-#define TARGET_FASYNC 0x1000 /* fcntl, for BSD compatibility */
-#define TARGET_O_LARGEFILE 0x2000 /* allow large file opens */
-#define TARGET___O_SYNC 0x4000
-#define TARGET_O_DIRECT 0x8000 /* direct disk access hint */
-#elif defined (TARGET_PPC)
-#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_APPEND 0x0008
-#define TARGET_FASYNC 0x0040 /* fcntl, for BSD compatibility */
-#define TARGET_O_CREAT 0x0200 /* not fcntl */
-#define TARGET_O_TRUNC 0x0400 /* not fcntl */
-#define TARGET_O_EXCL 0x0800 /* not fcntl */
-#define TARGET_O_DSYNC 0x2000
-#define TARGET_O_NONBLOCK 0x4000
-# ifdef TARGET_SPARC64
-# define TARGET_O_NDELAY 0x0004
-# else
-# define TARGET_O_NDELAY (0x0004 | TARGET_O_NONBLOCK)
-# endif
-#define TARGET_O_NOCTTY 0x8000 /* not fcntl */
-#define TARGET_O_LARGEFILE 0x40000
-#define TARGET_O_DIRECT 0x100000 /* direct disk access hint */
-#define TARGET_O_NOATIME 0x200000
-#define TARGET_O_CLOEXEC 0x400000
-#define TARGET___O_SYNC 0x800000
-#define TARGET_O_PATH 0x1000000
-#define TARGET___O_TMPFILE 0x2000000
-#endif
-
-/* <asm-generic/fcntl.h> values follow. */
-#define TARGET_O_ACCMODE 0003
-#define TARGET_O_RDONLY 00
-#define TARGET_O_WRONLY 01
-#define TARGET_O_RDWR 02
-#ifndef TARGET_O_CREAT
-#define TARGET_O_CREAT 0100 /* not fcntl */
-#endif
-#ifndef TARGET_O_EXCL
-#define TARGET_O_EXCL 0200 /* not fcntl */
-#endif
-#ifndef TARGET_O_NOCTTY
-#define TARGET_O_NOCTTY 0400 /* not fcntl */
-#endif
-#ifndef TARGET_O_TRUNC
-#define TARGET_O_TRUNC 01000 /* not fcntl */
-#endif
-#ifndef TARGET_O_APPEND
-#define TARGET_O_APPEND 02000
-#endif
-#ifndef TARGET_O_NONBLOCK
-#define TARGET_O_NONBLOCK 04000
-#endif
-#ifndef TARGET_O_DSYNC
-#define TARGET_O_DSYNC 010000
-#endif
-#ifndef TARGET_FASYNC
-#define TARGET_FASYNC 020000 /* fcntl, for BSD compatibility */
-#endif
-#ifndef TARGET_O_DIRECT
-#define TARGET_O_DIRECT 040000 /* direct disk access hint */
-#endif
-#ifndef TARGET_O_LARGEFILE
-#define TARGET_O_LARGEFILE 0100000
-#endif
-#ifndef TARGET_O_DIRECTORY
-#define TARGET_O_DIRECTORY 0200000 /* must be a directory */
-#endif
-#ifndef TARGET_O_NOFOLLOW
-#define TARGET_O_NOFOLLOW 0400000 /* don't follow links */
-#endif
-#ifndef TARGET_O_NOATIME
-#define TARGET_O_NOATIME 01000000
-#endif
-#ifndef TARGET_O_CLOEXEC
-#define TARGET_O_CLOEXEC 02000000
-#endif
-#ifndef TARGET___O_SYNC
-#define TARGET___O_SYNC 04000000
-#endif
-#ifndef TARGET_O_PATH
-#define TARGET_O_PATH 010000000
-#endif
-#ifndef TARGET___O_TMPFILE
-#define TARGET___O_TMPFILE 020000000
-#endif
-#ifndef TARGET_O_TMPFILE
-#define TARGET_O_TMPFILE (TARGET___O_TMPFILE | TARGET_O_DIRECTORY)
-#endif
-#ifndef TARGET_O_NDELAY
-#define TARGET_O_NDELAY TARGET_O_NONBLOCK
-#endif
-#ifndef TARGET_O_SYNC
-#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;
- abi_long l_start;
- abi_long l_len;
-#if defined(TARGET_MIPS)
- abi_long l_sysid;
-#endif
- int l_pid;
- TARGET_ARCH_FLOCK_PAD
-};
-
-struct target_flock64 {
- abi_short l_type;
- abi_short l_whence;
- abi_llong l_start;
- abi_llong l_len;
- abi_int l_pid;
- TARGET_ARCH_FLOCK64_PAD
-};
-
-struct target_f_owner_ex {
- int type; /* Owner type of ID. */
- int pid; /* ID of owner. */
-};
+#include "target_fcntl.h"
/* soundcard defines */
/* XXX: convert them all to arch independent entries */
diff --git a/linux-user/tilegx/signal.c b/linux-user/tilegx/signal.c
index d0ed3de569..c5a1c7161d 100644
--- a/linux-user/tilegx/signal.c
+++ b/linux-user/tilegx/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/tilegx/target_cpu.h b/linux-user/tilegx/target_cpu.h
index 4878e01b03..d1aa5824f2 100644
--- a/linux-user/tilegx/target_cpu.h
+++ b/linux-user/tilegx/target_cpu.h
@@ -32,4 +32,8 @@ static inline void cpu_set_tls(CPUTLGState *env, target_ulong newtls)
env->regs[TILEGX_R_TP] = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUTLGState *state)
+{
+ return state->regs[TILEGX_R_SP];
+}
#endif
diff --git a/linux-user/tilegx/target_fcntl.h b/linux-user/tilegx/target_fcntl.h
new file mode 100644
index 0000000000..5ed7438459
--- /dev/null
+++ b/linux-user/tilegx/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef TILEGX_TARGET_FCNTL_H
+#define TILEGX_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/tilegx/target_signal.h b/linux-user/tilegx/target_signal.h
index a74fa37aac..655be13009 100644
--- a/linux-user/tilegx/target_signal.h
+++ b/linux-user/tilegx/target_signal.h
@@ -1,8 +1,6 @@
#ifndef TILEGX_TARGET_SIGNAL_H
#define TILEGX_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -20,8 +18,6 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUTLGState *state)
-{
- return state->regs[TILEGX_R_SP];
-}
+#include "../generic/signal.h"
+
#endif /* TILEGX_TARGET_SIGNAL_H */
diff --git a/linux-user/x86_64/target_fcntl.h b/linux-user/x86_64/target_fcntl.h
new file mode 100644
index 0000000000..3c7238e56b
--- /dev/null
+++ b/linux-user/x86_64/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef X86_64_TARGET_FCNTL_H
+#define X86_64_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/x86_64/target_signal.h b/linux-user/x86_64/target_signal.h
index 6b01b5acb7..4c4380f7b9 100644
--- a/linux-user/x86_64/target_signal.h
+++ b/linux-user/x86_64/target_signal.h
@@ -1,8 +1,6 @@
#ifndef X86_64_TARGET_SIGNAL_H
#define X86_64_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -21,8 +19,6 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUX86State *state)
-{
- return state->regs[R_ESP];
-}
+#include "../generic/signal.h"
+
#endif /* X86_64_TARGET_SIGNAL_H */
diff --git a/linux-user/xtensa/signal.c b/linux-user/xtensa/signal.c
index 3e483efc61..8d54ef3ae3 100644
--- a/linux-user/xtensa/signal.c
+++ b/linux-user/xtensa/signal.c
@@ -18,7 +18,6 @@
*/
#include "qemu/osdep.h"
#include "qemu.h"
-#include "target_signal.h"
#include "signal-common.h"
#include "linux-user/trace.h"
diff --git a/linux-user/xtensa/target_cpu.h b/linux-user/xtensa/target_cpu.h
index 747d828614..e31efe3ea0 100644
--- a/linux-user/xtensa/target_cpu.h
+++ b/linux-user/xtensa/target_cpu.h
@@ -19,4 +19,8 @@ static inline void cpu_set_tls(CPUXtensaState *env, target_ulong newtls)
env->uregs[THREADPTR] = newtls;
}
+static inline abi_ulong get_sp_from_cpustate(CPUXtensaState *state)
+{
+ return state->regs[1];
+}
#endif
diff --git a/linux-user/xtensa/target_fcntl.h b/linux-user/xtensa/target_fcntl.h
new file mode 100644
index 0000000000..dc1ca7eaa5
--- /dev/null
+++ b/linux-user/xtensa/target_fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef XTENSA_TARGET_FCNTL_H
+#define XTENSA_TARGET_FCNTL_H
+#include "../generic/fcntl.h"
+#endif
diff --git a/linux-user/xtensa/target_signal.h b/linux-user/xtensa/target_signal.h
index 4376b2e538..c60bf656f6 100644
--- a/linux-user/xtensa/target_signal.h
+++ b/linux-user/xtensa/target_signal.h
@@ -1,8 +1,6 @@
#ifndef XTENSA_TARGET_SIGNAL_H
#define XTENSA_TARGET_SIGNAL_H
-#include "cpu.h"
-
/* this struct defines a stack used during syscall handling */
typedef struct target_sigaltstack {
@@ -20,8 +18,6 @@ typedef struct target_sigaltstack {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_SIGSTKSZ 8192
-static inline abi_ulong get_sp_from_cpustate(CPUXtensaState *state)
-{
- return state->regs[1];
-}
+#include "../generic/signal.h"
+
#endif
diff --git a/target/sparc/helper.c b/target/sparc/helper.c
index 1d854890b4..46232788c8 100644
--- a/target/sparc/helper.c
+++ b/target/sparc/helper.c
@@ -67,7 +67,9 @@ uint64_t helper_tick_get_count(CPUSPARCState *env, void *opaque, int mem_idx)
return cpu_tick_get_count(timer);
#else
- return 0;
+ /* In user-mode, QEMU_CLOCK_VIRTUAL doesn't exist.
+ Just pass through the host cpu clock ticks. */
+ return cpu_get_host_ticks();
#endif
}