提交 1ecfb24d 编写于 作者: P Peter Maydell

Merge remote-tracking branch 'remotes/riku/tags/pull-linux-user-20160719-2' into staging

linux-user fixes before 2.7 freeze, fix commit message

# gpg: Signature made Tue 19 Jul 2016 14:18:54 BST
# gpg:                using RSA key 0xB44890DEDE3C9BC0
# gpg: Good signature from "Riku Voipio <riku.voipio@iki.fi>"
# gpg:                 aka "Riku Voipio <riku.voipio@linaro.org>"
# Primary key fingerprint: FF82 03C8 C391 98AE 0581  41EF B448 90DE DE3C 9BC0

* remotes/riku/tags/pull-linux-user-20160719-2:
  linux-user: AArch64 has sync_file_range, not sync_file_range2
  linux-user: Fix type for SIOCATMARK ioctl
  linux-user: define missing sparc syscalls
  linux-user: Fix terminal control ioctls
  linux-user: Add some new blk ioctls
  linux-user: Handle short lengths in host_to_target_sockaddr()
  linux-user: Forget about synchronous signal once it is delivered
  linux-user: Correct type for LOOP_GET_STATUS{,64} ioctls
  linux-user: Correct type for BLKSSZGET
  linux-user: Add loop control ioctls
  linux-user: Check sigsetsize argument to syscalls
  linux-user: add nested netlink types
  linux-user: convert sockaddr_ll from host to target
  linux-user: add fd_trans helper in do_recvfrom()
  linux-user: fix netlink memory corruption
  linux-user: fd_trans_*_data() returns the length
Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
...@@ -86,8 +86,7 @@ ...@@ -86,8 +86,7 @@
#define TARGET_NR_sync 81 #define TARGET_NR_sync 81
#define TARGET_NR_fsync 82 #define TARGET_NR_fsync 82
#define TARGET_NR_fdatasync 83 #define TARGET_NR_fdatasync 83
#define TARGET_NR_sync_file_range2 84 #define TARGET_NR_sync_file_range 84
/* #define TARGET_NR_sync_file_range 84 */
#define TARGET_NR_timerfd_create 85 #define TARGET_NR_timerfd_create 85
#define TARGET_NR_timerfd_settime 86 #define TARGET_NR_timerfd_settime 86
#define TARGET_NR_timerfd_gettime 87 #define TARGET_NR_timerfd_gettime 87
......
...@@ -76,10 +76,39 @@ ...@@ -76,10 +76,39 @@
IOCTL(BLKFLSBUF, 0, TYPE_NULL) IOCTL(BLKFLSBUF, 0, TYPE_NULL)
IOCTL(BLKRASET, 0, TYPE_INT) IOCTL(BLKRASET, 0, TYPE_INT)
IOCTL(BLKRAGET, IOC_R, MK_PTR(TYPE_LONG)) IOCTL(BLKRAGET, IOC_R, MK_PTR(TYPE_LONG))
IOCTL(BLKSSZGET, IOC_R, MK_PTR(TYPE_LONG)) IOCTL(BLKSSZGET, IOC_R, MK_PTR(TYPE_INT))
IOCTL(BLKBSZGET, IOC_R, MK_PTR(TYPE_INT)) IOCTL(BLKBSZGET, IOC_R, MK_PTR(TYPE_INT))
IOCTL_SPECIAL(BLKPG, IOC_W, do_ioctl_blkpg, IOCTL_SPECIAL(BLKPG, IOC_W, do_ioctl_blkpg,
MK_PTR(MK_STRUCT(STRUCT_blkpg_ioctl_arg))) MK_PTR(MK_STRUCT(STRUCT_blkpg_ioctl_arg)))
#ifdef BLKDISCARD
IOCTL(BLKDISCARD, IOC_W, MK_PTR(MK_ARRAY(TYPE_ULONGLONG, 2)))
#endif
#ifdef BLKIOMIN
IOCTL(BLKIOMIN, IOC_R, MK_PTR(TYPE_INT))
#endif
#ifdef BLKIOOPT
IOCTL(BLKIOOPT, IOC_R, MK_PTR(TYPE_INT))
#endif
#ifdef BLKALIGNOFF
IOCTL(BLKALIGNOFF, IOC_R, MK_PTR(TYPE_INT))
#endif
#ifdef BLKPBSZGET
IOCTL(BLKPBSZGET, IOC_R, MK_PTR(TYPE_INT))
#endif
#ifdef BLKDISCARDZEROES
IOCTL(BLKDISCARDZEROES, IOC_R, MK_PTR(TYPE_INT))
#endif
#ifdef BLKSECDISCARD
IOCTL(BLKSECDISCARD, IOC_W, MK_PTR(MK_ARRAY(TYPE_ULONGLONG, 2)))
#endif
#ifdef BLKROTATIONAL
IOCTL(BLKROTATIONAL, IOC_R, MK_PTR(TYPE_SHORT))
#endif
#ifdef BLKZEROOUT
IOCTL(BLKZEROOUT, IOC_W, MK_PTR(MK_ARRAY(TYPE_ULONGLONG, 2)))
#endif
#ifdef FIBMAP #ifdef FIBMAP
IOCTL(FIBMAP, IOC_W | IOC_R, MK_PTR(TYPE_LONG)) IOCTL(FIBMAP, IOC_W | IOC_R, MK_PTR(TYPE_LONG))
#endif #endif
...@@ -91,7 +120,7 @@ ...@@ -91,7 +120,7 @@
MK_PTR(MK_STRUCT(STRUCT_fiemap))) MK_PTR(MK_STRUCT(STRUCT_fiemap)))
#endif #endif
IOCTL(SIOCATMARK, 0, TYPE_NULL) IOCTL(SIOCATMARK, IOC_R, MK_PTR(TYPE_INT))
IOCTL(SIOCGIFNAME, IOC_RW, MK_PTR(TYPE_INT)) IOCTL(SIOCGIFNAME, IOC_RW, MK_PTR(TYPE_INT))
IOCTL(SIOCGIFFLAGS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_short_ifreq))) IOCTL(SIOCGIFFLAGS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_short_ifreq)))
IOCTL(SIOCSIFFLAGS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_short_ifreq))) IOCTL(SIOCSIFFLAGS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_short_ifreq)))
...@@ -322,11 +351,15 @@ ...@@ -322,11 +351,15 @@
IOCTL(LOOP_SET_FD, 0, TYPE_INT) IOCTL(LOOP_SET_FD, 0, TYPE_INT)
IOCTL(LOOP_CLR_FD, 0, TYPE_INT) IOCTL(LOOP_CLR_FD, 0, TYPE_INT)
IOCTL(LOOP_SET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info))) IOCTL(LOOP_SET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
IOCTL(LOOP_GET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info))) IOCTL(LOOP_GET_STATUS, IOC_R, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
IOCTL(LOOP_SET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64))) IOCTL(LOOP_SET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
IOCTL(LOOP_GET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64))) IOCTL(LOOP_GET_STATUS64, IOC_R, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
IOCTL(LOOP_CHANGE_FD, 0, TYPE_INT) IOCTL(LOOP_CHANGE_FD, 0, TYPE_INT)
IOCTL(LOOP_CTL_ADD, 0, TYPE_INT)
IOCTL(LOOP_CTL_REMOVE, 0, TYPE_INT)
IOCTL(LOOP_CTL_GET_FREE, 0, TYPE_NULL)
IOCTL(MTIOCTOP, IOC_W, MK_PTR(MK_STRUCT(STRUCT_mtop))) IOCTL(MTIOCTOP, IOC_W, MK_PTR(MK_STRUCT(STRUCT_mtop)))
IOCTL(MTIOCGET, IOC_R, MK_PTR(MK_STRUCT(STRUCT_mtget))) IOCTL(MTIOCGET, IOC_R, MK_PTR(MK_STRUCT(STRUCT_mtget)))
IOCTL(MTIOCPOS, IOC_R, MK_PTR(MK_STRUCT(STRUCT_mtpos))) IOCTL(MTIOCPOS, IOC_R, MK_PTR(MK_STRUCT(STRUCT_mtpos)))
......
/* Copied from 2.6.25 kernel headers to avoid problems on older hosts. */ /* Copied from 2.6.25 kernel headers to avoid problems on older hosts,
* and subsequently updated to match newer additions to the API.
*/
#ifndef LINUX_LOOP_H #ifndef LINUX_LOOP_H
#define LINUX_LOOP_H #define LINUX_LOOP_H
...@@ -92,5 +94,12 @@ struct loop_info64 { ...@@ -92,5 +94,12 @@ struct loop_info64 {
#define LOOP_SET_STATUS64 0x4C04 #define LOOP_SET_STATUS64 0x4C04
#define LOOP_GET_STATUS64 0x4C05 #define LOOP_GET_STATUS64 0x4C05
#define LOOP_CHANGE_FD 0x4C06 #define LOOP_CHANGE_FD 0x4C06
#define LOOP_SET_CAPACITY 0x4C07
#define LOOP_SET_DIRECT_IO 0x4C08
/* /dev/loop-control interface */
#define LOOP_CTL_ADD 0x4C80
#define LOOP_CTL_REMOVE 0x4C81
#define LOOP_CTL_GET_FREE 0x4C82
#endif #endif
...@@ -5826,7 +5826,8 @@ long do_rt_sigreturn(CPUArchState *env) ...@@ -5826,7 +5826,8 @@ long do_rt_sigreturn(CPUArchState *env)
#endif #endif
static void handle_pending_signal(CPUArchState *cpu_env, int sig) static void handle_pending_signal(CPUArchState *cpu_env, int sig,
struct emulated_sigtable *k)
{ {
CPUState *cpu = ENV_GET_CPU(cpu_env); CPUState *cpu = ENV_GET_CPU(cpu_env);
abi_ulong handler; abi_ulong handler;
...@@ -5834,7 +5835,6 @@ static void handle_pending_signal(CPUArchState *cpu_env, int sig) ...@@ -5834,7 +5835,6 @@ static void handle_pending_signal(CPUArchState *cpu_env, int sig)
target_sigset_t target_old_set; target_sigset_t target_old_set;
struct target_sigaction *sa; struct target_sigaction *sa;
TaskState *ts = cpu->opaque; TaskState *ts = cpu->opaque;
struct emulated_sigtable *k = &ts->sigtab[sig - 1];
trace_user_handle_signal(cpu_env, sig); trace_user_handle_signal(cpu_env, sig);
/* dequeue signal */ /* dequeue signal */
...@@ -5937,7 +5937,7 @@ void process_pending_signals(CPUArchState *cpu_env) ...@@ -5937,7 +5937,7 @@ void process_pending_signals(CPUArchState *cpu_env)
sigact_table[sig - 1]._sa_handler = TARGET_SIG_DFL; sigact_table[sig - 1]._sa_handler = TARGET_SIG_DFL;
} }
handle_pending_signal(cpu_env, sig); handle_pending_signal(cpu_env, sig, &ts->sync_signal);
} }
for (sig = 1; sig <= TARGET_NSIG; sig++) { for (sig = 1; sig <= TARGET_NSIG; sig++) {
...@@ -5947,7 +5947,7 @@ void process_pending_signals(CPUArchState *cpu_env) ...@@ -5947,7 +5947,7 @@ void process_pending_signals(CPUArchState *cpu_env)
if (ts->sigtab[sig - 1].pending && if (ts->sigtab[sig - 1].pending &&
(!sigismember(blocked_set, (!sigismember(blocked_set,
target_to_host_signal_table[sig]))) { target_to_host_signal_table[sig]))) {
handle_pending_signal(cpu_env, sig); handle_pending_signal(cpu_env, sig, &ts->sigtab[sig - 1]);
/* Restart scan from the beginning */ /* Restart scan from the beginning */
sig = 1; sig = 1;
} }
......
...@@ -179,6 +179,9 @@ ...@@ -179,6 +179,9 @@
#define TARGET_NR_readahead 205 /* Linux Specific */ #define TARGET_NR_readahead 205 /* Linux Specific */
#define TARGET_NR_socketcall 206 /* Linux Specific */ #define TARGET_NR_socketcall 206 /* Linux Specific */
#define TARGET_NR_syslog 207 /* Linux Specific */ #define TARGET_NR_syslog 207 /* Linux Specific */
#define TARGET_NR_lookup_dcookie 208 /* Linux Specific */
#define TARGET_NR_fadvise64 209 /* Linux Specific */
#define TARGET_NR_fadvise64_64 210 /* Linux Specific */
#define TARGET_NR_tgkill 211 /* Linux Specific */ #define TARGET_NR_tgkill 211 /* Linux Specific */
#define TARGET_NR_waitpid 212 /* Linux Specific */ #define TARGET_NR_waitpid 212 /* Linux Specific */
#define TARGET_NR_swapoff 213 /* Linux Specific */ #define TARGET_NR_swapoff 213 /* Linux Specific */
......
此差异已折叠。
...@@ -985,6 +985,17 @@ struct target_pollfd { ...@@ -985,6 +985,17 @@ struct target_pollfd {
#define TARGET_BLKGETSIZE64 TARGET_IOR(0x12,114,abi_ulong) #define TARGET_BLKGETSIZE64 TARGET_IOR(0x12,114,abi_ulong)
/* return device size in bytes /* return device size in bytes
(u64 *arg) */ (u64 *arg) */
#define TARGET_BLKDISCARD TARGET_IO(0x12, 119)
#define TARGET_BLKIOMIN TARGET_IO(0x12, 120)
#define TARGET_BLKIOOPT TARGET_IO(0x12, 121)
#define TARGET_BLKALIGNOFF TARGET_IO(0x12, 122)
#define TARGET_BLKPBSZGET TARGET_IO(0x12, 123)
#define TARGET_BLKDISCARDZEROES TARGET_IO(0x12, 124)
#define TARGET_BLKSECDISCARD TARGET_IO(0x12, 125)
#define TARGET_BLKROTATIONAL TARGET_IO(0x12, 126)
#define TARGET_BLKZEROOUT TARGET_IO(0x12, 127)
#define TARGET_FIBMAP TARGET_IO(0x00,1) /* bmap access */ #define TARGET_FIBMAP TARGET_IO(0x00,1) /* bmap access */
#define TARGET_FIGETBSZ TARGET_IO(0x00,2) /* get the block size used for bmap */ #define TARGET_FIGETBSZ TARGET_IO(0x00,2) /* get the block size used for bmap */
#define TARGET_FS_IOC_FIEMAP TARGET_IOWR('f',11,struct fiemap) #define TARGET_FS_IOC_FIEMAP TARGET_IOWR('f',11,struct fiemap)
...@@ -1117,6 +1128,10 @@ struct target_pollfd { ...@@ -1117,6 +1128,10 @@ struct target_pollfd {
#define TARGET_LOOP_GET_STATUS64 0x4C05 #define TARGET_LOOP_GET_STATUS64 0x4C05
#define TARGET_LOOP_CHANGE_FD 0x4C06 #define TARGET_LOOP_CHANGE_FD 0x4C06
#define TARGET_LOOP_CTL_ADD 0x4C80
#define TARGET_LOOP_CTL_REMOVE 0x4C81
#define TARGET_LOOP_CTL_GET_FREE 0x4C82
/* fb ioctls */ /* fb ioctls */
#define TARGET_FBIOGET_VSCREENINFO 0x4600 #define TARGET_FBIOGET_VSCREENINFO 0x4600
#define TARGET_FBIOPUT_VSCREENINFO 0x4601 #define TARGET_FBIOPUT_VSCREENINFO 0x4601
......
...@@ -103,10 +103,11 @@ STRUCT(loop_info64, ...@@ -103,10 +103,11 @@ STRUCT(loop_info64,
TYPE_ULONGLONG, /* lo_inode */ TYPE_ULONGLONG, /* lo_inode */
TYPE_ULONGLONG, /* lo_rdevice */ TYPE_ULONGLONG, /* lo_rdevice */
TYPE_ULONGLONG, /* lo_offset */ TYPE_ULONGLONG, /* lo_offset */
TYPE_ULONG, /* lo_number */ TYPE_ULONGLONG, /* lo_sizelimit */
TYPE_ULONG, /* lo_encrypt_type */ TYPE_INT, /* lo_number */
TYPE_ULONG, /* lo_encrypt_key_size */ TYPE_INT, /* lo_encrypt_type */
TYPE_ULONG, /* lo_flags */ TYPE_INT, /* lo_encrypt_key_size */
TYPE_INT, /* lo_flags */
MK_ARRAY(TYPE_CHAR, 64), /* lo_name */ MK_ARRAY(TYPE_CHAR, 64), /* lo_name */
MK_ARRAY(TYPE_CHAR, 64), /* lo_crypt_name */ MK_ARRAY(TYPE_CHAR, 64), /* lo_crypt_name */
MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */ MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */
......
...@@ -209,12 +209,12 @@ struct target_termios { ...@@ -209,12 +209,12 @@ struct target_termios {
#define TARGET_TIOCSBRK 0x5427 /* BSD compatibility */ #define TARGET_TIOCSBRK 0x5427 /* BSD compatibility */
#define TARGET_TIOCCBRK 0x5428 /* BSD compatibility */ #define TARGET_TIOCCBRK 0x5428 /* BSD compatibility */
#define TARGET_TIOCGSID 0x5429 /* Return the session ID of FD */ #define TARGET_TIOCGSID 0x5429 /* Return the session ID of FD */
#define TARGET_TCGETS2 _IOR('T',0x2A, struct termios2) #define TARGET_TCGETS2 TARGET_IOR('T',0x2A, struct termios2)
#define TARGET_TCSETS2 _IOW('T',0x2B, struct termios2) #define TARGET_TCSETS2 TARGET_IOW('T',0x2B, struct termios2)
#define TARGET_TCSETSW2 _IOW('T',0x2C, struct termios2) #define TARGET_TCSETSW2 TARGET_IOW('T',0x2C, struct termios2)
#define TARGET_TCSETSF2 _IOW('T',0x2D, struct termios2) #define TARGET_TCSETSF2 TARGET_IOW('T',0x2D, struct termios2)
#define TARGET_TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ #define TARGET_TIOCGPTN TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
#define TARGET_TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ #define TARGET_TIOCSPTLCK TARGET_IOW('T',0x31, int) /* Lock/unlock Pty */
#define TARGET_FIONCLEX 0x5450 /* these numbers need to be adjusted. */ #define TARGET_FIONCLEX 0x5450 /* these numbers need to be adjusted. */
#define TARGET_FIOCLEX 0x5451 #define TARGET_FIOCLEX 0x5451
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册