Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging
This commit is contained in:
commit
81773a5055
129
arm-semi.c
129
arm-semi.c
@ -34,6 +34,7 @@
|
||||
#else
|
||||
#include "qemu-common.h"
|
||||
#include "gdbstub.h"
|
||||
#include "hw/arm-misc.h"
|
||||
#endif
|
||||
|
||||
#define SYS_OPEN 0x01
|
||||
@ -369,68 +370,88 @@ uint32_t do_arm_semihosting(CPUState *env)
|
||||
return syscall_err;
|
||||
#endif
|
||||
case SYS_GET_CMDLINE:
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
/* Build a commandline from the original argv. */
|
||||
{
|
||||
char *arm_cmdline_buffer;
|
||||
const char *host_cmdline_buffer;
|
||||
/* Build a command-line from the original argv.
|
||||
*
|
||||
* The inputs are:
|
||||
* * ARG(0), pointer to a buffer of at least the size
|
||||
* specified in ARG(1).
|
||||
* * ARG(1), size of the buffer pointed to by ARG(0) in
|
||||
* bytes.
|
||||
*
|
||||
* The outputs are:
|
||||
* * ARG(0), pointer to null-terminated string of the
|
||||
* command line.
|
||||
* * ARG(1), length of the string pointed to by ARG(0).
|
||||
*/
|
||||
|
||||
char *output_buffer;
|
||||
size_t input_size = ARG(1);
|
||||
size_t output_size;
|
||||
int status = 0;
|
||||
|
||||
/* Compute the size of the output string. */
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
output_size = strlen(ts->boot_info->kernel_filename)
|
||||
+ 1 /* Separating space. */
|
||||
+ strlen(ts->boot_info->kernel_cmdline)
|
||||
+ 1; /* Terminating null byte. */
|
||||
#else
|
||||
unsigned int i;
|
||||
unsigned int arm_cmdline_len = ARG(1);
|
||||
unsigned int host_cmdline_len =
|
||||
ts->info->arg_end-ts->info->arg_start;
|
||||
|
||||
if (!arm_cmdline_len || host_cmdline_len > arm_cmdline_len) {
|
||||
return -1; /* not enough space to store command line */
|
||||
}
|
||||
|
||||
if (!host_cmdline_len) {
|
||||
output_size = ts->info->arg_end - ts->info->arg_start;
|
||||
if (!output_size) {
|
||||
/* We special-case the "empty command line" case (argc==0).
|
||||
Just provide the terminating 0. */
|
||||
arm_cmdline_buffer = lock_user(VERIFY_WRITE, ARG(0), 1, 0);
|
||||
arm_cmdline_buffer[0] = 0;
|
||||
unlock_user(arm_cmdline_buffer, ARG(0), 1);
|
||||
|
||||
/* Adjust the commandline length argument. */
|
||||
SET_ARG(1, 0);
|
||||
return 0;
|
||||
output_size = 1;
|
||||
}
|
||||
|
||||
/* lock the buffers on the ARM side */
|
||||
arm_cmdline_buffer =
|
||||
lock_user(VERIFY_WRITE, ARG(0), host_cmdline_len, 0);
|
||||
host_cmdline_buffer =
|
||||
lock_user(VERIFY_READ, ts->info->arg_start,
|
||||
host_cmdline_len, 1);
|
||||
|
||||
if (arm_cmdline_buffer && host_cmdline_buffer)
|
||||
{
|
||||
/* the last argument is zero-terminated;
|
||||
no need for additional termination */
|
||||
memcpy(arm_cmdline_buffer, host_cmdline_buffer,
|
||||
host_cmdline_len);
|
||||
|
||||
/* separate arguments by white spaces */
|
||||
for (i = 0; i < host_cmdline_len-1; i++) {
|
||||
if (arm_cmdline_buffer[i] == 0) {
|
||||
arm_cmdline_buffer[i] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
/* Adjust the commandline length argument. */
|
||||
SET_ARG(1, host_cmdline_len-1);
|
||||
}
|
||||
|
||||
/* Unlock the buffers on the ARM side. */
|
||||
unlock_user(arm_cmdline_buffer, ARG(0), host_cmdline_len);
|
||||
unlock_user((void*)host_cmdline_buffer, ts->info->arg_start, 0);
|
||||
|
||||
/* Return success if we could return a commandline. */
|
||||
return (arm_cmdline_buffer && host_cmdline_buffer) ? 0 : -1;
|
||||
}
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
if (output_size > input_size) {
|
||||
/* Not enough space to store command-line arguments. */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Adjust the command-line length. */
|
||||
SET_ARG(1, output_size - 1);
|
||||
|
||||
/* Lock the buffer on the ARM side. */
|
||||
output_buffer = lock_user(VERIFY_WRITE, ARG(0), output_size, 0);
|
||||
if (!output_buffer) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Copy the command-line arguments. */
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
pstrcpy(output_buffer, output_size, ts->boot_info->kernel_filename);
|
||||
pstrcat(output_buffer, output_size, " ");
|
||||
pstrcat(output_buffer, output_size, ts->boot_info->kernel_cmdline);
|
||||
#else
|
||||
if (output_size == 1) {
|
||||
/* Empty command-line. */
|
||||
output_buffer[0] = '\0';
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (copy_from_user(output_buffer, ts->info->arg_start,
|
||||
output_size)) {
|
||||
status = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Separate arguments by white spaces. */
|
||||
for (i = 0; i < output_size - 1; i++) {
|
||||
if (output_buffer[i] == 0) {
|
||||
output_buffer[i] = ' ';
|
||||
}
|
||||
}
|
||||
out:
|
||||
#endif
|
||||
/* Unlock the buffer on the ARM side. */
|
||||
unlock_user(output_buffer, ARG(0), output_size);
|
||||
|
||||
return status;
|
||||
}
|
||||
case SYS_HEAPINFO:
|
||||
{
|
||||
uint32_t *ptr;
|
||||
|
@ -411,4 +411,25 @@
|
||||
#define TARGET_NR_signalfd 476
|
||||
#define TARGET_NR_timerfd 477
|
||||
#define TARGET_NR_eventfd 478
|
||||
|
||||
#define TARGET_NR_recvmmsg 479
|
||||
#define TARGET_NR_fallocate 480
|
||||
#define TARGET_NR_timerfd_create 481
|
||||
#define TARGET_NR_timerfd_settime 482
|
||||
#define TARGET_NR_timerfd_gettime 483
|
||||
#define TARGET_NR_signalfd4 484
|
||||
#define TARGET_NR_eventfd2 485
|
||||
#define TARGET_NR_epoll_create1 486
|
||||
#define TARGET_NR_dup3 487
|
||||
#define TARGET_NR_pipe2 488
|
||||
#define TARGET_NR_inotify_init1 489
|
||||
#define TARGET_NR_preadv 490
|
||||
#define TARGET_NR_pwritev 491
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 492
|
||||
#define TARGET_NR_perf_event_open 493
|
||||
#define TARGET_NR_fanotify_init 494
|
||||
#define TARGET_NR_fanotify_mark 495
|
||||
#define TARGET_NR_prlimit64 496
|
||||
#define TARGET_NR_name_to_handle_at 497
|
||||
#define TARGET_NR_open_by_handle_at 498
|
||||
#define TARGET_NR_clock_adjtime 499
|
||||
#define TARGET_NR_syncfs 500
|
||||
|
@ -365,3 +365,16 @@
|
||||
#define TARGET_NR_dup3 (358)
|
||||
#define TARGET_NR_pipe2 (359)
|
||||
#define TARGET_NR_inotify_init1 (360)
|
||||
#define TARGET_NR_preadv (361)
|
||||
#define TARGET_NR_pwritev (362)
|
||||
#define TARGET_NR_rt_tgsigqueueinfo (363)
|
||||
#define TARGET_NR_perf_event_open (364)
|
||||
#define TARGET_NR_recvmmsg (365)
|
||||
#define TARGET_NR_accept4 (366)
|
||||
#define TARGET_NR_fanotify_init (367)
|
||||
#define TARGET_NR_fanotify_mark (368)
|
||||
#define TARGET_NR_prlimit64 (369)
|
||||
#define TARGET_NR_name_to_handle_at (370)
|
||||
#define TARGET_NR_open_by_handle_at (371)
|
||||
#define TARGET_NR_clock_adjtime (372)
|
||||
#define TARGET_NR_syncfs (373)
|
||||
|
@ -333,3 +333,5 @@
|
||||
#define TARGET_NR_dup3 330
|
||||
#define TARGET_NR_pipe2 331
|
||||
#define TARGET_NR_inotify_init1 332
|
||||
#define TARGET_NR_preadv 333
|
||||
#define TARGET_NR_pwritev 334
|
||||
|
@ -335,3 +335,15 @@
|
||||
#define TARGET_NR_dup3 330
|
||||
#define TARGET_NR_pipe2 331
|
||||
#define TARGET_NR_inotify_init1 332
|
||||
#define TARGET_NR_preadv 333
|
||||
#define TARGET_NR_pwritev 334
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 335
|
||||
#define TARGET_NR_perf_event_open 336
|
||||
#define TARGET_NR_recvmmsg 337
|
||||
#define TARGET_NR_fanotify_init 338
|
||||
#define TARGET_NR_fanotify_mark 339
|
||||
#define TARGET_NR_prlimit64 340
|
||||
#define TARGET_NR_name_to_handle_at 341
|
||||
#define TARGET_NR_open_by_handle_at 342
|
||||
#define TARGET_NR_clock_adjtime 343
|
||||
#define TARGET_NR_syncfs 344
|
||||
|
@ -59,6 +59,10 @@
|
||||
IOCTL(KDSKBMODE, 0, TYPE_INT)
|
||||
IOCTL(KDGKBENT, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_kbentry)))
|
||||
IOCTL(KDGKBSENT, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_kbsentry)))
|
||||
IOCTL(KDGKBLED, 0, TYPE_INT)
|
||||
IOCTL(KDSKBLED, 0, TYPE_INT)
|
||||
IOCTL(KDGETLED, 0, TYPE_INT)
|
||||
IOCTL(KDSETLED, 0, TYPE_INT)
|
||||
|
||||
IOCTL(BLKROSET, IOC_W, MK_PTR(TYPE_INT))
|
||||
IOCTL(BLKROGET, IOC_R, MK_PTR(TYPE_INT))
|
||||
@ -325,6 +329,11 @@
|
||||
IOCTL(FBIOGET_FSCREENINFO, IOC_R, MK_PTR(MK_STRUCT(STRUCT_fb_fix_screeninfo)))
|
||||
IOCTL(FBIOGET_VSCREENINFO, IOC_R, MK_PTR(MK_STRUCT(STRUCT_fb_var_screeninfo)))
|
||||
IOCTL(FBIOPUT_VSCREENINFO, IOC_W, MK_PTR(MK_STRUCT(STRUCT_fb_var_screeninfo)))
|
||||
IOCTL(FBIOGETCMAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_fb_cmap)))
|
||||
IOCTL(FBIOPUTCMAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_fb_cmap)))
|
||||
IOCTL(FBIOPAN_DISPLAY, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_fb_var_screeninfo)))
|
||||
IOCTL(FBIOGET_CON2FBMAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_fb_con2fbmap)))
|
||||
IOCTL(FBIOPUT_CON2FBMAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_fb_con2fbmap)))
|
||||
|
||||
IOCTL(VT_OPENQRY, IOC_R, MK_PTR(TYPE_INT))
|
||||
IOCTL(VT_GETSTATE, IOC_R, MK_PTR(MK_STRUCT(STRUCT_vt_stat)))
|
||||
@ -332,3 +341,7 @@
|
||||
IOCTL(VT_WAITACTIVE, 0, TYPE_INT)
|
||||
IOCTL(VT_LOCKSWITCH, 0, TYPE_INT)
|
||||
IOCTL(VT_UNLOCKSWITCH, 0, TYPE_INT)
|
||||
IOCTL(VT_GETMODE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_vt_mode)))
|
||||
IOCTL(VT_SETMODE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_vt_mode)))
|
||||
IOCTL(VT_RELDISP, 0, TYPE_INT)
|
||||
IOCTL(VT_DISALLOCATE, 0, TYPE_INT)
|
||||
|
@ -328,3 +328,19 @@
|
||||
#define TARGET_NR_dup3 326
|
||||
#define TARGET_NR_pipe2 327
|
||||
#define TARGET_NR_inotify_init1 328
|
||||
#define TARGET_NR_inotify_init1 328
|
||||
#define TARGET_NR_preadv 329
|
||||
#define TARGET_NR_pwritev 330
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 331
|
||||
#define TARGET_NR_perf_event_open 332
|
||||
#define TARGET_NR_get_thread_area 333
|
||||
#define TARGET_NR_set_thread_area 334
|
||||
#define TARGET_NR_atomic_cmpxchg_32 335
|
||||
#define TARGET_NR_atomic_barrier 336
|
||||
#define TARGET_NR_fanotify_init 337
|
||||
#define TARGET_NR_fanotify_mark 338
|
||||
#define TARGET_NR_prlimit64 339
|
||||
#define TARGET_NR_name_to_handle_at 340
|
||||
#define TARGET_NR_open_by_handle_at 341
|
||||
#define TARGET_NR_clock_adjtime 342
|
||||
#define TARGET_NR_syncfs 343
|
||||
|
@ -1875,7 +1875,7 @@ static const uint8_t mips_syscall_args[] = {
|
||||
MIPS_SYS(sys_getcwd , 2)
|
||||
MIPS_SYS(sys_capget , 2)
|
||||
MIPS_SYS(sys_capset , 2) /* 4205 */
|
||||
MIPS_SYS(sys_sigaltstack , 0)
|
||||
MIPS_SYS(sys_sigaltstack , 2)
|
||||
MIPS_SYS(sys_sendfile , 4)
|
||||
MIPS_SYS(sys_ni_syscall , 0)
|
||||
MIPS_SYS(sys_ni_syscall , 0)
|
||||
@ -1985,6 +1985,33 @@ static const uint8_t mips_syscall_args[] = {
|
||||
MIPS_SYS(sys_epoll_pwait, 6)
|
||||
MIPS_SYS(sys_ioprio_set, 3)
|
||||
MIPS_SYS(sys_ioprio_get, 2)
|
||||
MIPS_SYS(sys_utimensat, 4)
|
||||
MIPS_SYS(sys_signalfd, 3)
|
||||
MIPS_SYS(sys_ni_syscall, 0) /* was timerfd */
|
||||
MIPS_SYS(sys_eventfd, 1)
|
||||
MIPS_SYS(sys_fallocate, 6) /* 4320 */
|
||||
MIPS_SYS(sys_timerfd_create, 2)
|
||||
MIPS_SYS(sys_timerfd_gettime, 2)
|
||||
MIPS_SYS(sys_timerfd_settime, 4)
|
||||
MIPS_SYS(sys_signalfd4, 4)
|
||||
MIPS_SYS(sys_eventfd2, 2) /* 4325 */
|
||||
MIPS_SYS(sys_epoll_create1, 1)
|
||||
MIPS_SYS(sys_dup3, 3)
|
||||
MIPS_SYS(sys_pipe2, 2)
|
||||
MIPS_SYS(sys_inotify_init1, 1)
|
||||
MIPS_SYS(sys_preadv, 6) /* 4330 */
|
||||
MIPS_SYS(sys_pwritev, 6)
|
||||
MIPS_SYS(sys_rt_tgsigqueueinfo, 4)
|
||||
MIPS_SYS(sys_perf_event_open, 5)
|
||||
MIPS_SYS(sys_accept4, 4)
|
||||
MIPS_SYS(sys_recvmmsg, 5) /* 4335 */
|
||||
MIPS_SYS(sys_fanotify_init, 2)
|
||||
MIPS_SYS(sys_fanotify_mark, 6)
|
||||
MIPS_SYS(sys_prlimit64, 4)
|
||||
MIPS_SYS(sys_name_to_handle_at, 5)
|
||||
MIPS_SYS(sys_open_by_handle_at, 3) /* 4340 */
|
||||
MIPS_SYS(sys_clock_adjtime, 2)
|
||||
MIPS_SYS(sys_syncfs, 1)
|
||||
};
|
||||
|
||||
#undef MIPS_SYS
|
||||
@ -2053,7 +2080,7 @@ void cpu_loop(CPUMIPSState *env)
|
||||
syscall_num = env->active_tc.gpr[2] - 4000;
|
||||
env->active_tc.PC += 4;
|
||||
if (syscall_num >= sizeof(mips_syscall_args)) {
|
||||
ret = -ENOSYS;
|
||||
ret = -TARGET_ENOSYS;
|
||||
} else {
|
||||
int nb_args;
|
||||
abi_ulong sp_reg;
|
||||
@ -2093,6 +2120,8 @@ void cpu_loop(CPUMIPSState *env)
|
||||
break;
|
||||
case EXCP_TLBL:
|
||||
case EXCP_TLBS:
|
||||
case EXCP_AdEL:
|
||||
case EXCP_AdES:
|
||||
info.si_signo = TARGET_SIGSEGV;
|
||||
info.si_errno = 0;
|
||||
/* XXX: check env->error_code */
|
||||
|
@ -364,6 +364,16 @@
|
||||
#define TARGET_NR_sendmsg 360 /* new */
|
||||
#define TARGET_NR_recvmsg 361 /* new */
|
||||
#define TARGET_NR_accept04 362 /* new */
|
||||
|
||||
#define TARGET_NR_syscalls 363
|
||||
#define TARGET_NR_preadv 363 /* new */
|
||||
#define TARGET_NR_pwritev 364 /* new */
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 365 /* new */
|
||||
#define TARGET_NR_perf_event_open 366 /* new */
|
||||
#define TARGET_NR_recvmmsg 367 /* new */
|
||||
#define TARGET_NR_fanotify_init 368
|
||||
#define TARGET_NR_fanotify_mark 369
|
||||
#define TARGET_NR_prlimit64 370
|
||||
#define TARGET_NR_name_to_handle_at 371
|
||||
#define TARGET_NR_open_by_handle_at 372
|
||||
#define TARGET_NR_clock_adjtime 373
|
||||
#define TARGET_NR_syncfs 374
|
||||
|
||||
|
@ -332,3 +332,16 @@
|
||||
#define TARGET_NR_dup3 (TARGET_NR_Linux + 327)
|
||||
#define TARGET_NR_pipe2 (TARGET_NR_Linux + 328)
|
||||
#define TARGET_NR_inotify_init1 (TARGET_NR_Linux + 329)
|
||||
#define TARGET_NR_preadv (TARGET_NR_Linux + 330)
|
||||
#define TARGET_NR_pwritev (TARGET_NR_Linux + 331)
|
||||
#define TARGET_NR_rt_tgsigqueueinfo (TARGET_NR_Linux + 332)
|
||||
#define TARGET_NR_perf_event_open (TARGET_NR_Linux + 333)
|
||||
#define TARGET_NR_accept4 (TARGET_NR_Linux + 334)
|
||||
#define TARGET_NR_recvmmsg (TARGET_NR_Linux + 335)
|
||||
#define TARGET_NR_fanotify_init (TARGET_NR_Linux + 336)
|
||||
#define TARGET_NR_fanotify_mark (TARGET_NR_Linux + 337)
|
||||
#define TARGET_NR_prlimit64 (TARGET_NR_Linux + 338)
|
||||
#define TARGET_NR_name_to_handle_at (TARGET_NR_Linux + 339)
|
||||
#define TARGET_NR_open_by_handle_at (TARGET_NR_Linux + 340)
|
||||
#define TARGET_NR_clock_adjtime (TARGET_NR_Linux + 341)
|
||||
#define TARGET_NR_syncfs (TARGET_NR_Linux + 342)
|
||||
|
@ -291,3 +291,16 @@
|
||||
#define TARGET_NR_dup3 (TARGET_NR_Linux + 286)
|
||||
#define TARGET_NR_pipe2 (TARGET_NR_Linux + 287)
|
||||
#define TARGET_NR_inotify_init1 (TARGET_NR_Linux + 288)
|
||||
#define TARGET_NR_preadv (TARGET_NR_Linux + 289)
|
||||
#define TARGET_NR_pwritev (TARGET_NR_Linux + 290)
|
||||
#define TARGET_NR_rt_tgsigqueueinfo (TARGET_NR_Linux + 291)
|
||||
#define TARGET_NR_perf_event_open (TARGET_NR_Linux + 292)
|
||||
#define TARGET_NR_accept4 (TARGET_NR_Linux + 293)
|
||||
#define TARGET_NR_recvmmsg (TARGET_NR_Linux + 294)
|
||||
#define TARGET_NR_fanotify_init (TARGET_NR_Linux + 295)
|
||||
#define TARGET_NR_fanotify_mark (TARGET_NR_Linux + 296)
|
||||
#define TARGET_NR_prlimit64 (TARGET_NR_Linux + 297)
|
||||
#define TARGET_NR_name_to_handle_at (TARGET_NR_Linux + 298)
|
||||
#define TARGET_NR_open_by_handle_at (TARGET_NR_Linux + 299)
|
||||
#define TARGET_NR_clock_adjtime (TARGET_NR_Linux + 300)
|
||||
#define TARGET_NR_syncfs (TARGET_NR_Linux + 301)
|
||||
|
@ -295,3 +295,17 @@
|
||||
#define TARGET_NR_dup3 (TARGET_NR_Linux + 290)
|
||||
#define TARGET_NR_pipe2 (TARGET_NR_Linux + 291)
|
||||
#define TARGET_NR_inotify_init1 (TARGET_NR_Linux + 292)
|
||||
#define TARGET_NR_preadv (TARGET_NR_Linux + 293)
|
||||
#define TARGET_NR_pwritev (TARGET_NR_Linux + 294)
|
||||
#define TARGET_NR_rt_tgsigqueueinfo (TARGET_NR_Linux + 295)
|
||||
#define TARGET_NR_perf_event_open (TARGET_NR_Linux + 296)
|
||||
#define TARGET_NR_accept4 (TARGET_NR_Linux + 297)
|
||||
#define TARGET_NR_recvmmsg (TARGET_NR_Linux + 298)
|
||||
#define TARGET_NR_getdents64 (TARGET_NR_Linux + 299)
|
||||
#define TARGET_NR_fanotify_init (TARGET_NR_Linux + 300)
|
||||
#define TARGET_NR_fanotify_mark (TARGET_NR_Linux + 301)
|
||||
#define TARGET_NR_prlimit64 (TARGET_NR_Linux + 302)
|
||||
#define TARGET_NR_name_to_handle_at (TARGET_NR_Linux + 303)
|
||||
#define TARGET_NR_open_by_handle_at (TARGET_NR_Linux + 304)
|
||||
#define TARGET_NR_clock_adjtime (TARGET_NR_Linux + 305)
|
||||
#define TARGET_NR_syncfs (TARGET_NR_Linux + 306)
|
||||
|
@ -332,3 +332,33 @@
|
||||
#define TARGET_NR_dup3 316
|
||||
#define TARGET_NR_pipe2 317
|
||||
#define TARGET_NR_inotify_init1 318
|
||||
#define TARGET_NR_perf_event_open 319
|
||||
#define TARGET_NR_preadv 320
|
||||
#define TARGET_NR_pwritev 321
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 322
|
||||
#define TARGET_NR_fanotify_init 323
|
||||
#define TARGET_NR_fanotify_mark 324
|
||||
#define TARGET_NR_prlimit64 325
|
||||
#define TARGET_NR_socket 326
|
||||
#define TARGET_NR_bind 327
|
||||
#define TARGET_NR_connect 328
|
||||
#define TARGET_NR_listen 329
|
||||
#define TARGET_NR_accept 330
|
||||
#define TARGET_NR_getsockname 331
|
||||
#define TARGET_NR_getpeername 332
|
||||
#define TARGET_NR_socketpair 333
|
||||
#define TARGET_NR_send 334
|
||||
#define TARGET_NR_sendto 335
|
||||
#define TARGET_NR_recv 336
|
||||
#define TARGET_NR_recvfrom 337
|
||||
#define TARGET_NR_shutdown 338
|
||||
#define TARGET_NR_setsockopt 339
|
||||
#define TARGET_NR_getsockopt 340
|
||||
#define TARGET_NR_sendmsg 341
|
||||
#define TARGET_NR_recvmsg 342
|
||||
#define TARGET_NR_recvmmsg 343
|
||||
#define TARGET_NR_accept4 344
|
||||
#define TARGET_NR_name_to_handle_at 345
|
||||
#define TARGET_NR_open_by_handle_at 346
|
||||
#define TARGET_NR_clock_adjtime 347
|
||||
#define TARGET_NR_syncfs 348
|
||||
|
@ -254,8 +254,17 @@
|
||||
#define TARGET_NR_pipe2 325
|
||||
#define TARGET_NR_dup3 326
|
||||
#define TARGET_NR_epoll_create1 327
|
||||
#undef NR_syscalls
|
||||
#define NR_syscalls 328
|
||||
#define TARGET_NR_preadv 328
|
||||
#define TARGET_NR_pwritev 329
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 330
|
||||
#define TARGET_NR_perf_event_open 331
|
||||
#define TARGET_NR_fanotify_init 332
|
||||
#define TARGET_NR_fanotify_mark 333
|
||||
#define TARGET_NR_prlimit64 334
|
||||
#define TARGET_NR_name_to_handle_at 335
|
||||
#define TARGET_NR_open_by_handle_at 336
|
||||
#define TARGET_NR_clock_adjtime 337
|
||||
#define TARGET_NR_syncfs 338
|
||||
|
||||
/*
|
||||
* There are some system calls that are not present on 64 bit, some
|
||||
|
@ -125,7 +125,7 @@
|
||||
#define TARGET_NR_clone 120
|
||||
#define TARGET_NR_setdomainname 121
|
||||
#define TARGET_NR_uname 122
|
||||
#define TARGET_NR_modify_ldt 123
|
||||
#define TARGET_NR_cacheflush 123
|
||||
#define TARGET_NR_adjtimex 124
|
||||
#define TARGET_NR_mprotect 125
|
||||
#define TARGET_NR_sigprocmask 126
|
||||
@ -334,3 +334,35 @@
|
||||
#define TARGET_NR_dup3 330
|
||||
#define TARGET_NR_pipe2 331
|
||||
#define TARGET_NR_inotify_init1 332
|
||||
#define TARGET_NR_preadv 333
|
||||
#define TARGET_NR_pwritev 334
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 335
|
||||
#define TARGET_NR_perf_event_open 336
|
||||
#define TARGET_NR_fanotify_init 337
|
||||
#define TARGET_NR_fanotify_mark 338
|
||||
#define TARGET_NR_prlimit64 339
|
||||
|
||||
/* Non-multiplexed socket family */
|
||||
#define TARGET_NR_socket 340
|
||||
#define TARGET_NR_bind 341
|
||||
#define TARGET_NR_connect 342
|
||||
#define TARGET_NR_listen 343
|
||||
#define TARGET_NR_accept 344
|
||||
#define TARGET_NR_getsockname 345
|
||||
#define TARGET_NR_getpeername 346
|
||||
#define TARGET_NR_socketpair 347
|
||||
#define TARGET_NR_send 348
|
||||
#define TARGET_NR_sendto 349
|
||||
#define TARGET_NR_recv 350
|
||||
#define TARGET_NR_recvfrom 351
|
||||
#define TARGET_NR_shutdown 352
|
||||
#define TARGET_NR_setsockopt 353
|
||||
#define TARGET_NR_getsockopt 354
|
||||
#define TARGET_NR_sendmsg 355
|
||||
#define TARGET_NR_recvmsg 356
|
||||
#define TARGET_NR_recvmmsg 357
|
||||
#define TARGET_NR_accept4 358
|
||||
#define TARGET_NR_name_to_handle_at 359
|
||||
#define TARGET_NR_open_by_handle_at 360
|
||||
#define TARGET_NR_clock_adjtime 361
|
||||
#define TARGET_NR_syncfs 362
|
||||
|
@ -3662,11 +3662,11 @@ typedef struct {
|
||||
} sigframe;
|
||||
|
||||
struct target_ucontext {
|
||||
target_ulong uc_flags;
|
||||
struct target_ucontext *uc_link;
|
||||
target_stack_t uc_stack;
|
||||
target_sigregs uc_mcontext;
|
||||
target_sigset_t uc_sigmask; /* mask last for extensibility */
|
||||
target_ulong tuc_flags;
|
||||
struct target_ucontext *tuc_link;
|
||||
target_stack_t tuc_stack;
|
||||
target_sigregs tuc_mcontext;
|
||||
target_sigset_t tuc_sigmask; /* mask last for extensibility */
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@ -3814,16 +3814,16 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka,
|
||||
}
|
||||
|
||||
/* Create the ucontext. */
|
||||
__put_user(0, &frame->uc.uc_flags);
|
||||
__put_user((abi_ulong)0, (abi_ulong *)&frame->uc.uc_link);
|
||||
__put_user(target_sigaltstack_used.ss_sp, &frame->uc.uc_stack.ss_sp);
|
||||
__put_user(0, &frame->uc.tuc_flags);
|
||||
__put_user((abi_ulong)0, (abi_ulong *)&frame->uc.tuc_link);
|
||||
__put_user(target_sigaltstack_used.ss_sp, &frame->uc.tuc_stack.ss_sp);
|
||||
__put_user(sas_ss_flags(get_sp_from_cpustate(env)),
|
||||
&frame->uc.uc_stack.ss_flags);
|
||||
__put_user(target_sigaltstack_used.ss_size, &frame->uc.uc_stack.ss_size);
|
||||
save_sigregs(env, &frame->uc.uc_mcontext);
|
||||
&frame->uc.tuc_stack.ss_flags);
|
||||
__put_user(target_sigaltstack_used.ss_size, &frame->uc.tuc_stack.ss_size);
|
||||
save_sigregs(env, &frame->uc.tuc_mcontext);
|
||||
for (i = 0; i < TARGET_NSIG_WORDS; i++) {
|
||||
__put_user((abi_ulong)set->sig[i],
|
||||
(abi_ulong *)&frame->uc.uc_sigmask.sig[i]);
|
||||
(abi_ulong *)&frame->uc.tuc_sigmask.sig[i]);
|
||||
}
|
||||
|
||||
/* Set up to return from userspace. If provided, use a stub
|
||||
@ -3928,15 +3928,15 @@ long do_rt_sigreturn(CPUState *env)
|
||||
if (!lock_user_struct(VERIFY_READ, frame, frame_addr, 1)) {
|
||||
goto badframe;
|
||||
}
|
||||
target_to_host_sigset(&set, &frame->uc.uc_sigmask);
|
||||
target_to_host_sigset(&set, &frame->uc.tuc_sigmask);
|
||||
|
||||
sigprocmask(SIG_SETMASK, &set, NULL); /* ~_BLOCKABLE? */
|
||||
|
||||
if (restore_sigregs(env, &frame->uc.uc_mcontext)) {
|
||||
if (restore_sigregs(env, &frame->uc.tuc_mcontext)) {
|
||||
goto badframe;
|
||||
}
|
||||
|
||||
if (do_sigaltstack(frame_addr + offsetof(rt_sigframe, uc.uc_stack), 0,
|
||||
if (do_sigaltstack(frame_addr + offsetof(rt_sigframe, uc.tuc_stack), 0,
|
||||
get_sp_from_cpustate(env)) == -EFAULT) {
|
||||
goto badframe;
|
||||
}
|
||||
|
@ -285,3 +285,15 @@
|
||||
#define TARGET_NR_pipe2 321
|
||||
#define TARGET_NR_inotify_init1 322
|
||||
#define TARGET_NR_accept4 323
|
||||
#define TARGET_NR_preadv 324
|
||||
#define TARGET_NR_pwritev 325
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 326
|
||||
#define TARGET_NR_perf_event_open 327
|
||||
#define TARGET_NR_recvmmsg 328
|
||||
#define TARGET_NR_fanotify_init 329
|
||||
#define TARGET_NR_fanotify_mark 330
|
||||
#define TARGET_NR_prlimit64 331
|
||||
#define TARGET_NR_name_to_handle_at 332
|
||||
#define TARGET_NR_open_by_handle_at 333
|
||||
#define TARGET_NR_clock_adjtime 334
|
||||
#define TARGET_NR_syncfs 335
|
||||
|
@ -322,3 +322,15 @@
|
||||
#define TARGET_NR_pipe2 321
|
||||
#define TARGET_NR_inotify_init1 322
|
||||
#define TARGET_NR_accept4 323
|
||||
#define TARGET_NR_preadv 324
|
||||
#define TARGET_NR_pwritev 325
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 326
|
||||
#define TARGET_NR_perf_event_open 327
|
||||
#define TARGET_NR_recvmmsg 328
|
||||
#define TARGET_NR_fanotify_init 329
|
||||
#define TARGET_NR_fanotify_mark 330
|
||||
#define TARGET_NR_prlimit64 331
|
||||
#define TARGET_NR_name_to_handle_at 332
|
||||
#define TARGET_NR_open_by_handle_at 333
|
||||
#define TARGET_NR_clock_adjtime 334
|
||||
#define TARGET_NR_syncfs 335
|
||||
|
@ -559,12 +559,38 @@ _syscall6(int, sys_pselect6, int, nfds, fd_set *, readfds, fd_set *, writefds,
|
||||
fd_set *, exceptfds, struct timespec *, timeout, void *, sig);
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_NR_prlimit64)
|
||||
#ifndef __NR_prlimit64
|
||||
# define __NR_prlimit64 -1
|
||||
#endif
|
||||
#define __NR_sys_prlimit64 __NR_prlimit64
|
||||
/* The glibc rlimit structure may not be that used by the underlying syscall */
|
||||
struct host_rlimit64 {
|
||||
uint64_t rlim_cur;
|
||||
uint64_t rlim_max;
|
||||
};
|
||||
_syscall4(int, sys_prlimit64, pid_t, pid, int, resource,
|
||||
const struct host_rlimit64 *, new_limit,
|
||||
struct host_rlimit64 *, old_limit)
|
||||
#endif
|
||||
|
||||
extern int personality(int);
|
||||
extern int flock(int, int);
|
||||
extern int setfsuid(int);
|
||||
extern int setfsgid(int);
|
||||
extern int setgroups(int, gid_t *);
|
||||
|
||||
/* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */
|
||||
#ifdef TARGET_ARM
|
||||
static inline int regpairs_aligned(void *cpu_env) {
|
||||
return ((((CPUARMState *)cpu_env)->eabi) == 1) ;
|
||||
}
|
||||
#elif defined(TARGET_MIPS)
|
||||
static inline int regpairs_aligned(void *cpu_env) { return 1; }
|
||||
#else
|
||||
static inline int regpairs_aligned(void *cpu_env) { return 0; }
|
||||
#endif
|
||||
|
||||
#define ERRNO_TABLE_SIZE 1200
|
||||
|
||||
/* target_to_host_errno_table[] is initialized from
|
||||
@ -919,18 +945,68 @@ static inline abi_long host_to_target_rusage(abi_ulong target_addr,
|
||||
|
||||
static inline rlim_t target_to_host_rlim(target_ulong target_rlim)
|
||||
{
|
||||
if (target_rlim == TARGET_RLIM_INFINITY)
|
||||
return RLIM_INFINITY;
|
||||
target_ulong target_rlim_swap;
|
||||
rlim_t result;
|
||||
|
||||
target_rlim_swap = tswapl(target_rlim);
|
||||
if (target_rlim_swap == TARGET_RLIM_INFINITY || target_rlim_swap != (rlim_t)target_rlim_swap)
|
||||
result = RLIM_INFINITY;
|
||||
else
|
||||
return tswapl(target_rlim);
|
||||
result = target_rlim_swap;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline target_ulong host_to_target_rlim(rlim_t rlim)
|
||||
{
|
||||
target_ulong target_rlim_swap;
|
||||
target_ulong result;
|
||||
|
||||
if (rlim == RLIM_INFINITY || rlim != (target_long)rlim)
|
||||
return TARGET_RLIM_INFINITY;
|
||||
target_rlim_swap = TARGET_RLIM_INFINITY;
|
||||
else
|
||||
return tswapl(rlim);
|
||||
target_rlim_swap = rlim;
|
||||
result = tswapl(target_rlim_swap);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int target_to_host_resource(int code)
|
||||
{
|
||||
switch (code) {
|
||||
case TARGET_RLIMIT_AS:
|
||||
return RLIMIT_AS;
|
||||
case TARGET_RLIMIT_CORE:
|
||||
return RLIMIT_CORE;
|
||||
case TARGET_RLIMIT_CPU:
|
||||
return RLIMIT_CPU;
|
||||
case TARGET_RLIMIT_DATA:
|
||||
return RLIMIT_DATA;
|
||||
case TARGET_RLIMIT_FSIZE:
|
||||
return RLIMIT_FSIZE;
|
||||
case TARGET_RLIMIT_LOCKS:
|
||||
return RLIMIT_LOCKS;
|
||||
case TARGET_RLIMIT_MEMLOCK:
|
||||
return RLIMIT_MEMLOCK;
|
||||
case TARGET_RLIMIT_MSGQUEUE:
|
||||
return RLIMIT_MSGQUEUE;
|
||||
case TARGET_RLIMIT_NICE:
|
||||
return RLIMIT_NICE;
|
||||
case TARGET_RLIMIT_NOFILE:
|
||||
return RLIMIT_NOFILE;
|
||||
case TARGET_RLIMIT_NPROC:
|
||||
return RLIMIT_NPROC;
|
||||
case TARGET_RLIMIT_RSS:
|
||||
return RLIMIT_RSS;
|
||||
case TARGET_RLIMIT_RTPRIO:
|
||||
return RLIMIT_RTPRIO;
|
||||
case TARGET_RLIMIT_SIGPENDING:
|
||||
return RLIMIT_SIGPENDING;
|
||||
case TARGET_RLIMIT_STACK:
|
||||
return RLIMIT_STACK;
|
||||
default:
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
static inline abi_long copy_from_user_timeval(struct timeval *tv,
|
||||
@ -4310,13 +4386,10 @@ static inline abi_long target_truncate64(void *cpu_env, const char *arg1,
|
||||
abi_long arg3,
|
||||
abi_long arg4)
|
||||
{
|
||||
#ifdef TARGET_ARM
|
||||
if (((CPUARMState *)cpu_env)->eabi)
|
||||
{
|
||||
if (regpairs_aligned(cpu_env)) {
|
||||
arg2 = arg3;
|
||||
arg3 = arg4;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return get_errno(truncate64(arg1, target_offset64(arg2, arg3)));
|
||||
}
|
||||
#endif
|
||||
@ -4327,13 +4400,10 @@ static inline abi_long target_ftruncate64(void *cpu_env, abi_long arg1,
|
||||
abi_long arg3,
|
||||
abi_long arg4)
|
||||
{
|
||||
#ifdef TARGET_ARM
|
||||
if (((CPUARMState *)cpu_env)->eabi)
|
||||
{
|
||||
if (regpairs_aligned(cpu_env)) {
|
||||
arg2 = arg3;
|
||||
arg3 = arg4;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return get_errno(ftruncate64(arg1, target_offset64(arg2, arg3)));
|
||||
}
|
||||
#endif
|
||||
@ -5543,7 +5613,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
break;
|
||||
case TARGET_NR_setrlimit:
|
||||
{
|
||||
int resource = arg1;
|
||||
int resource = target_to_host_resource(arg1);
|
||||
struct target_rlimit *target_rlim;
|
||||
struct rlimit rlim;
|
||||
if (!lock_user_struct(VERIFY_READ, target_rlim, arg2, 1))
|
||||
@ -5556,7 +5626,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
break;
|
||||
case TARGET_NR_getrlimit:
|
||||
{
|
||||
int resource = arg1;
|
||||
int resource = target_to_host_resource(arg1);
|
||||
struct target_rlimit *target_rlim;
|
||||
struct rlimit rlim;
|
||||
|
||||
@ -5684,6 +5754,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
|
||||
if (arg_sigset) {
|
||||
sig.set = &set;
|
||||
if (arg_sigsize != sizeof(*target_sigset)) {
|
||||
/* Like the kernel, we enforce correct size sigsets */
|
||||
ret = -TARGET_EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
target_sigset = lock_user(VERIFY_READ, arg_sigset,
|
||||
sizeof(*target_sigset), 1);
|
||||
if (!target_sigset) {
|
||||
@ -6787,20 +6862,16 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
#endif
|
||||
#ifdef TARGET_NR_pread
|
||||
case TARGET_NR_pread:
|
||||
#ifdef TARGET_ARM
|
||||
if (((CPUARMState *)cpu_env)->eabi)
|
||||
if (regpairs_aligned(cpu_env))
|
||||
arg4 = arg5;
|
||||
#endif
|
||||
if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0)))
|
||||
goto efault;
|
||||
ret = get_errno(pread(arg1, p, arg3, arg4));
|
||||
unlock_user(p, arg2, ret);
|
||||
break;
|
||||
case TARGET_NR_pwrite:
|
||||
#ifdef TARGET_ARM
|
||||
if (((CPUARMState *)cpu_env)->eabi)
|
||||
if (regpairs_aligned(cpu_env))
|
||||
arg4 = arg5;
|
||||
#endif
|
||||
if (!(p = lock_user(VERIFY_READ, arg2, arg3, 1)))
|
||||
goto efault;
|
||||
ret = get_errno(pwrite(arg1, p, arg3, arg4));
|
||||
@ -6860,7 +6931,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
case TARGET_NR_ugetrlimit:
|
||||
{
|
||||
struct rlimit rlim;
|
||||
ret = get_errno(getrlimit(arg1, &rlim));
|
||||
int resource = target_to_host_resource(arg1);
|
||||
ret = get_errno(getrlimit(resource, &rlim));
|
||||
if (!is_error(ret)) {
|
||||
struct target_rlimit *target_rlim;
|
||||
if (!lock_user_struct(VERIFY_WRITE, target_rlim, arg2, 0))
|
||||
@ -7550,14 +7622,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
#ifdef TARGET_NR_readahead
|
||||
case TARGET_NR_readahead:
|
||||
#if TARGET_ABI_BITS == 32
|
||||
#ifdef TARGET_ARM
|
||||
if (((CPUARMState *)cpu_env)->eabi)
|
||||
{
|
||||
if (regpairs_aligned(cpu_env)) {
|
||||
arg2 = arg3;
|
||||
arg3 = arg4;
|
||||
arg4 = arg5;
|
||||
}
|
||||
#endif
|
||||
ret = get_errno(readahead(arg1, ((off64_t)arg3 << 32) | arg2, arg4));
|
||||
#else
|
||||
ret = get_errno(readahead(arg1, arg2, arg3));
|
||||
@ -7989,6 +8058,34 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#ifdef TARGET_NR_prlimit64
|
||||
case TARGET_NR_prlimit64:
|
||||
{
|
||||
/* args: pid, resource number, ptr to new rlimit, ptr to old rlimit */
|
||||
struct target_rlimit64 *target_rnew, *target_rold;
|
||||
struct host_rlimit64 rnew, rold, *rnewp = 0;
|
||||
if (arg3) {
|
||||
if (!lock_user_struct(VERIFY_READ, target_rnew, arg3, 1)) {
|
||||
goto efault;
|
||||
}
|
||||
rnew.rlim_cur = tswap64(target_rnew->rlim_cur);
|
||||
rnew.rlim_max = tswap64(target_rnew->rlim_max);
|
||||
unlock_user_struct(target_rnew, arg3, 0);
|
||||
rnewp = &rnew;
|
||||
}
|
||||
|
||||
ret = get_errno(sys_prlimit64(arg1, arg2, rnewp, arg4 ? &rold : 0));
|
||||
if (!is_error(ret) && arg4) {
|
||||
if (!lock_user_struct(VERIFY_WRITE, target_rold, arg4, 1)) {
|
||||
goto efault;
|
||||
}
|
||||
target_rold->rlim_cur = tswap64(rold.rlim_cur);
|
||||
target_rold->rlim_max = tswap64(rold.rlim_max);
|
||||
unlock_user_struct(target_rold, arg4, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
unimplemented:
|
||||
|
@ -693,6 +693,40 @@ struct target_rlimit {
|
||||
#define TARGET_RLIM_INFINITY ((target_ulong)~0UL)
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_MIPS)
|
||||
#define TARGET_RLIMIT_CPU 0
|
||||
#define TARGET_RLIMIT_FSIZE 1
|
||||
#define TARGET_RLIMIT_DATA 2
|
||||
#define TARGET_RLIMIT_STACK 3
|
||||
#define TARGET_RLIMIT_CORE 4
|
||||
#define TARGET_RLIMIT_RSS 7
|
||||
#define TARGET_RLIMIT_NPROC 8
|
||||
#define TARGET_RLIMIT_NOFILE 5
|
||||
#define TARGET_RLIMIT_MEMLOCK 9
|
||||
#define TARGET_RLIMIT_AS 6
|
||||
#define TARGET_RLIMIT_LOCKS 10
|
||||
#define TARGET_RLIMIT_SIGPENDING 11
|
||||
#define TARGET_RLIMIT_MSGQUEUE 12
|
||||
#define TARGET_RLIMIT_NICE 13
|
||||
#define TARGET_RLIMIT_RTPRIO 14
|
||||
#else
|
||||
#define TARGET_RLIMIT_CPU 0
|
||||
#define TARGET_RLIMIT_FSIZE 1
|
||||
#define TARGET_RLIMIT_DATA 2
|
||||
#define TARGET_RLIMIT_STACK 3
|
||||
#define TARGET_RLIMIT_CORE 4
|
||||
#define TARGET_RLIMIT_RSS 5
|
||||
#define TARGET_RLIMIT_NPROC 6
|
||||
#define TARGET_RLIMIT_NOFILE 7
|
||||
#define TARGET_RLIMIT_MEMLOCK 8
|
||||
#define TARGET_RLIMIT_AS 9
|
||||
#define TARGET_RLIMIT_LOCKS 10
|
||||
#define TARGET_RLIMIT_SIGPENDING 11
|
||||
#define TARGET_RLIMIT_MSGQUEUE 12
|
||||
#define TARGET_RLIMIT_NICE 13
|
||||
#define TARGET_RLIMIT_RTPRIO 14
|
||||
#endif
|
||||
|
||||
struct target_pollfd {
|
||||
int fd; /* file descriptor */
|
||||
short events; /* requested events */
|
||||
@ -708,6 +742,10 @@ struct target_pollfd {
|
||||
#define TARGET_KDSKBMODE 0x4b45
|
||||
#define TARGET_KDGKBENT 0x4B46 /* gets one entry in translation table */
|
||||
#define TARGET_KDGKBSENT 0x4B48 /* gets one function key string entry */
|
||||
#define TARGET_KDGKBLED 0x4B64 /* get led flags (not lights) */
|
||||
#define TARGET_KDSKBLED 0x4B65 /* set led flags (not lights) */
|
||||
#define TARGET_KDGETLED 0x4B31 /* return current led state */
|
||||
#define TARGET_KDSETLED 0x4B32 /* set led state [lights, not flags] */
|
||||
|
||||
#define TARGET_SIOCATMARK 0x8905
|
||||
|
||||
@ -928,6 +966,11 @@ struct target_pollfd {
|
||||
#define TARGET_FBIOGET_VSCREENINFO 0x4600
|
||||
#define TARGET_FBIOPUT_VSCREENINFO 0x4601
|
||||
#define TARGET_FBIOGET_FSCREENINFO 0x4602
|
||||
#define TARGET_FBIOGETCMAP 0x4604
|
||||
#define TARGET_FBIOPUTCMAP 0x4605
|
||||
#define TARGET_FBIOPAN_DISPLAY 0x4606
|
||||
#define TARGET_FBIOGET_CON2FBMAP 0x460F
|
||||
#define TARGET_FBIOPUT_CON2FBMAP 0x4610
|
||||
|
||||
/* vt ioctls */
|
||||
#define TARGET_VT_OPENQRY 0x5600
|
||||
@ -936,6 +979,10 @@ struct target_pollfd {
|
||||
#define TARGET_VT_WAITACTIVE 0x5607
|
||||
#define TARGET_VT_LOCKSWITCH 0x560b
|
||||
#define TARGET_VT_UNLOCKSWITCH 0x560c
|
||||
#define TARGET_VT_GETMODE 0x5601
|
||||
#define TARGET_VT_SETMODE 0x5602
|
||||
#define TARGET_VT_RELDISP 0x5605
|
||||
#define TARGET_VT_DISALLOCATE 0x5608
|
||||
|
||||
/* from asm/termbits.h */
|
||||
|
||||
@ -2280,3 +2327,7 @@ struct target_epoll_event {
|
||||
target_epoll_data_t data;
|
||||
};
|
||||
#endif
|
||||
struct target_rlimit64 {
|
||||
uint64_t rlim_cur;
|
||||
uint64_t rlim_max;
|
||||
};
|
||||
|
@ -161,11 +161,31 @@ STRUCT(fb_var_screeninfo,
|
||||
TYPE_INT, /* rotate */
|
||||
MK_ARRAY(TYPE_INT, 5)) /* reserved */
|
||||
|
||||
STRUCT(fb_cmap,
|
||||
TYPE_INT, /* start */
|
||||
TYPE_INT, /* len */
|
||||
TYPE_PTRVOID, /* red */
|
||||
TYPE_PTRVOID, /* green */
|
||||
TYPE_PTRVOID, /* blue */
|
||||
TYPE_PTRVOID) /* transp */
|
||||
|
||||
STRUCT(fb_con2fbmap,
|
||||
TYPE_INT, /* console */
|
||||
TYPE_INT) /* framebuffer */
|
||||
|
||||
|
||||
STRUCT(vt_stat,
|
||||
TYPE_SHORT, /* v_active */
|
||||
TYPE_SHORT, /* v_signal */
|
||||
TYPE_SHORT) /* v_state */
|
||||
|
||||
STRUCT(vt_mode,
|
||||
TYPE_CHAR, /* mode */
|
||||
TYPE_CHAR, /* waitv */
|
||||
TYPE_SHORT, /* relsig */
|
||||
TYPE_SHORT, /* acqsig */
|
||||
TYPE_SHORT) /* frsig */
|
||||
|
||||
STRUCT(fiemap_extent,
|
||||
TYPE_ULONGLONG, /* fe_logical */
|
||||
TYPE_ULONGLONG, /* fe_physical */
|
||||
|
@ -293,3 +293,15 @@
|
||||
#define TARGET_NR_dup3 292
|
||||
#define TARGET_NR_pipe2 293
|
||||
#define TARGET_NR_inotify_init1 294
|
||||
#define TARGET_NR_preadv 295
|
||||
#define TARGET_NR_pwritev 296
|
||||
#define TARGET_NR_rt_tgsigqueueinfo 297
|
||||
#define TARGET_NR_perf_event_open 298
|
||||
#define TARGET_NR_recvmmsg 299
|
||||
#define TARGET_NR_fanotify_init 300
|
||||
#define TARGET_NR_fanotify_mark 301
|
||||
#define TARGET_NR_prlimit64 302
|
||||
#define TARGET_NR_name_to_handle_at 303
|
||||
#define TARGET_NR_open_by_handle_at 304
|
||||
#define TARGET_NR_clock_adjtime 305
|
||||
#define TARGET_NR_syncfs 306
|
||||
|
Loading…
Reference in New Issue
Block a user