Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
81773a50
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
81773a50
编写于
7月 19, 2011
作者:
A
Anthony Liguori
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging
上级
0219d732
6fea2ea4
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
549 addition
and
97 deletion
+549
-97
arm-semi.c
arm-semi.c
+67
-46
linux-user/alpha/syscall_nr.h
linux-user/alpha/syscall_nr.h
+22
-1
linux-user/arm/syscall_nr.h
linux-user/arm/syscall_nr.h
+13
-0
linux-user/cris/syscall_nr.h
linux-user/cris/syscall_nr.h
+2
-0
linux-user/i386/syscall_nr.h
linux-user/i386/syscall_nr.h
+12
-0
linux-user/ioctls.h
linux-user/ioctls.h
+13
-0
linux-user/m68k/syscall_nr.h
linux-user/m68k/syscall_nr.h
+16
-0
linux-user/main.c
linux-user/main.c
+31
-2
linux-user/microblaze/syscall_nr.h
linux-user/microblaze/syscall_nr.h
+12
-2
linux-user/mips/syscall_nr.h
linux-user/mips/syscall_nr.h
+13
-0
linux-user/mips64/syscall_nr.h
linux-user/mips64/syscall_nr.h
+13
-0
linux-user/mipsn32/syscall_nr.h
linux-user/mipsn32/syscall_nr.h
+14
-0
linux-user/ppc/syscall_nr.h
linux-user/ppc/syscall_nr.h
+30
-0
linux-user/s390x/syscall_nr.h
linux-user/s390x/syscall_nr.h
+11
-2
linux-user/sh4/syscall_nr.h
linux-user/sh4/syscall_nr.h
+33
-1
linux-user/signal.c
linux-user/signal.c
+15
-15
linux-user/sparc/syscall_nr.h
linux-user/sparc/syscall_nr.h
+12
-0
linux-user/sparc64/syscall_nr.h
linux-user/sparc64/syscall_nr.h
+12
-0
linux-user/syscall.c
linux-user/syscall.c
+125
-28
linux-user/syscall_defs.h
linux-user/syscall_defs.h
+51
-0
linux-user/syscall_types.h
linux-user/syscall_types.h
+20
-0
linux-user/x86_64/syscall_nr.h
linux-user/x86_64/syscall_nr.h
+12
-0
未找到文件。
arm-semi.c
浏览文件 @
81773a50
...
...
@@ -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).
*/
unsigned
int
i
;
unsigned
int
arm_cmdline_len
=
ARG
(
1
);
unsigned
int
host_cmdline_len
=
ts
->
info
->
arg_end
-
ts
->
info
->
arg_start
;
char
*
output_buffer
;
size_t
input_size
=
ARG
(
1
);
size_t
output_size
;
int
status
=
0
;
if
(
!
arm_cmdline_len
||
host_cmdline_len
>
arm_cmdline_len
)
{
return
-
1
;
/* not enough space to store command line */
}
/* 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
;
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
);
output_size
=
1
;
}
#endif
/* Adjust the commandline length argument. */
SET_ARG
(
1
,
0
);
return
0
;
if
(
output_size
>
input_size
)
{
/* Not enough space to store command-line arguments. */
return
-
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
);
/* Adjust the command-line length. */
SET_ARG
(
1
,
output_size
-
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
);
/* Lock the buffer on the ARM side. */
output_buffer
=
lock_user
(
VERIFY_WRITE
,
ARG
(
0
),
output_size
,
0
);
if
(
!
output_buffer
)
{
return
-
1
;
}
/* separate arguments by white spaces */
for
(
i
=
0
;
i
<
host_cmdline_len
-
1
;
i
++
)
{
if
(
arm_cmdline_buffer
[
i
]
==
0
)
{
arm_cmdline_buffer
[
i
]
=
' '
;
}
}
/* 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
;
}
/* Adjust the commandline length argument. */
SET_ARG
(
1
,
host_cmdline_len
-
1
);
if
(
copy_from_user
(
output_buffer
,
ts
->
info
->
arg_start
,
output_size
))
{
status
=
-
1
;
goto
out
;
}
/* 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
);
/* 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 success if we could return a commandline. */
return
(
arm_cmdline_buffer
&&
host_cmdline_buffer
)
?
0
:
-
1
;
return
status
;
}
#else
return
-
1
;
#endif
case
SYS_HEAPINFO
:
{
uint32_t
*
ptr
;
...
...
linux-user/alpha/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/arm/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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)
linux-user/cris/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/i386/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/ioctls.h
浏览文件 @
81773a50
...
...
@@ -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
)
linux-user/m68k/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/main.c
浏览文件 @
81773a50
...
...
@@ -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 */
...
...
linux-user/microblaze/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/mips/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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)
linux-user/mips64/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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)
linux-user/mipsn32/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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)
linux-user/ppc/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/s390x/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
...
...
linux-user/sh4/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/signal.c
浏览文件 @
81773a50
...
...
@@ -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
t
uc_flags
;
struct
target_ucontext
*
t
uc_link
;
target_stack_t
t
uc_stack
;
target_sigregs
t
uc_mcontext
;
target_sigset_t
t
uc_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
.
t
uc_flags
);
__put_user
((
abi_ulong
)
0
,
(
abi_ulong
*
)
&
frame
->
uc
.
t
uc_link
);
__put_user
(
target_sigaltstack_used
.
ss_sp
,
&
frame
->
uc
.
t
uc_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
.
t
uc_stack
.
ss_flags
);
__put_user
(
target_sigaltstack_used
.
ss_size
,
&
frame
->
uc
.
t
uc_stack
.
ss_size
);
save_sigregs
(
env
,
&
frame
->
uc
.
t
uc_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
.
t
uc_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
.
t
uc_sigmask
);
sigprocmask
(
SIG_SETMASK
,
&
set
,
NULL
);
/* ~_BLOCKABLE? */
if
(
restore_sigregs
(
env
,
&
frame
->
uc
.
uc_mcontext
))
{
if
(
restore_sigregs
(
env
,
&
frame
->
uc
.
t
uc_mcontext
))
{
goto
badframe
;
}
if
(
do_sigaltstack
(
frame_addr
+
offsetof
(
rt_sigframe
,
uc
.
uc_stack
),
0
,
if
(
do_sigaltstack
(
frame_addr
+
offsetof
(
rt_sigframe
,
uc
.
t
uc_stack
),
0
,
get_sp_from_cpustate
(
env
))
==
-
EFAULT
)
{
goto
badframe
;
}
...
...
linux-user/sparc/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/sparc64/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
linux-user/syscall.c
浏览文件 @
81773a50
...
...
@@ -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:
...
...
linux-user/syscall_defs.h
浏览文件 @
81773a50
...
...
@@ -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
;
};
linux-user/syscall_types.h
浏览文件 @
81773a50
...
...
@@ -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 */
...
...
linux-user/x86_64/syscall_nr.h
浏览文件 @
81773a50
...
...
@@ -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
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录