Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
b03c60f3
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看板
提交
b03c60f3
编写于
21年前
作者:
B
bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more syscalls
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@43
c046a42c-6fe2-441c-8c8c-71466251a162
上级
9de5e440
master
openEuler-20.03-LTS
openEuler-20.09
openEuler-RISCV
stable-0.10
stable-0.11
stable-0.12
stable-0.13
stable-0.14
stable-0.15
stable-1.0
stable-1.1
stable-1.2
stable-1.3
stable-1.4
stable-1.5
stable-1.6
stable-1.7
stable-2.0
stable-2.1
stable-2.10
stable-2.11
stable-2.12
stable-2.2
stable-2.3
stable-2.4
stable-2.5
stable-2.6
stable-2.7
stable-2.8
stable-2.9
stable-3.0
stable-3.1
stable-4.0
stable-4.1
stable-4.2
staging
v5.1.0-rc2
v5.1.0-rc1
v5.1.0-rc0
v5.0.0
v5.0.0-rc4
v5.0.0-rc3
v5.0.0-rc2
v5.0.0-rc1
v5.0.0-rc0
v4.2.1
v4.2.0
v4.2.0-rc5
v4.2.0-rc4
v4.2.0-rc3
v4.2.0-rc2
v4.2.0-rc1
v4.2.0-rc0
v4.1.1
v4.1.0
v4.1.0-rc5
v4.1.0-rc4
v4.1.0-rc3
v4.1.0-rc2
v4.1.0-rc1
v4.1.0-rc0
v4.0.1
v4.0.0
v4.0.0-rc4
v4.0.0-rc3
v4.0.0-rc2
v4.0.0-rc1
v4.0.0-rc0
v3.1.1.1
v3.1.1
v3.1.0
v3.1.0-rc5
v3.1.0-rc4
v3.1.0-rc3
v3.1.0-rc2
v3.1.0-rc1
v3.1.0-rc0
v3.0.1
v3.0.0
v3.0.0-rc4
v3.0.0-rc3
v3.0.0-rc2
v3.0.0-rc1
v3.0.0-rc0
v2.12.1
v2.12.0
v2.12.0-rc4
v2.12.0-rc3
v2.12.0-rc2
v2.12.0-rc1
v2.12.0-rc0
v2.11.2
v2.11.1
v2.11.0
v2.11.0-rc5
v2.11.0-rc4
v2.11.0-rc3
v2.11.0-rc2
v2.11.0-rc1
v2.11.0-rc0
v2.10.2
v2.10.1
v2.10.0
v2.10.0-rc4
v2.10.0-rc3
v2.10.0-rc2
v2.10.0-rc1
v2.10.0-rc0
v2.9.1
v2.9.0
v2.9.0-rc5
v2.9.0-rc4
v2.9.0-rc3
v2.9.0-rc2
v2.9.0-rc1
v2.9.0-rc0
v2.8.1.1
v2.8.1
v2.8.0
v2.8.0-rc4
v2.8.0-rc3
v2.8.0-rc2
v2.8.0-rc1
v2.8.0-rc0
v2.7.1
v2.7.0
v2.7.0-rc5
v2.7.0-rc4
v2.7.0-rc3
v2.7.0-rc2
v2.7.0-rc1
v2.7.0-rc0
v2.6.2
v2.6.1
v2.6.0
v2.6.0-rc5
v2.6.0-rc4
v2.6.0-rc3
v2.6.0-rc2
v2.6.0-rc1
v2.6.0-rc0
v2.5.1.1
v2.5.1
v2.5.0
v2.5.0-rc4
v2.5.0-rc3
v2.5.0-rc2
v2.5.0-rc1
v2.5.0-rc0
v2.4.1
v2.4.0.1
v2.4.0
v2.4.0-rc4
v2.4.0-rc3
v2.4.0-rc2
v2.4.0-rc1
v2.4.0-rc0
v2.3.1
v2.3.0
v2.3.0-rc4
v2.3.0-rc3
v2.3.0-rc2
v2.3.0-rc1
v2.3.0-rc0
v2.2.1
v2.2.0
v2.2.0-rc5
v2.2.0-rc4
v2.2.0-rc3
v2.2.0-rc2
v2.2.0-rc1
v2.2.0-rc0
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.1.0-rc5
v2.1.0-rc4
v2.1.0-rc3
v2.1.0-rc2
v2.1.0-rc1
v2.1.0-rc0
v2.0.2
v2.0.1
v2.0.0
v2.0.0-rc3
v2.0.0-rc2
v2.0.0-rc1
v2.0.0-rc0
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc2
v1.7.0-rc1
v1.7.0-rc0
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc3
v1.6.0-rc2
v1.6.0-rc1
v1.6.0-rc0
v1.5.3
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc3
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-rc0
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc2
v1.4.0-rc1
v1.4.0-rc0
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.3.0-rc0
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.2.0-rc1
v1.2.0-rc0
v1.1.2
v1.1.1
v1.1.0
v1.1.0-rc4
v1.1.0-rc3
v1.1.0-rc2
v1.1-rc2
v1.1-rc1
v1.1-rc0
v1.0.1
v1.0
v1.0-rc4
v1.0-rc3
v1.0-rc2
v1.0-rc1
v1.0-rc0
v0.15.1
v0.15.0
v0.15.0-rc2
v0.15.0-rc1
v0.15.0-rc0
v0.14.1
v0.14.0
v0.14.0-rc2
v0.14.0-rc1
v0.14.0-rc0
v0.13.0
v0.13.0-rc3
v0.13.0-rc2
v0.13.0-rc1
v0.13.0-rc0
v0.12.5
v0.12.4
v0.12.3
v0.12.2
v0.12.1
v0.12.0
v0.12.0-rc2
v0.12.0-rc1
v0.12.0-rc0
v0.11.1
v0.11.0
v0.11.0-rc2
v0.11.0-rc1
v0.11.0-rc0
v0.10.6
v0.10.5
v0.10.4
v0.10.3
v0.10.2
v0.10.1
v0.10.0
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.7.1
v0.7.0
v0.6.1
v0.6.0
v0.5.1
v0.5.0
v0.4.4
v0.4.3
v0.4.2
v0.4.1
v0.4.0
v0.3.0
v0.2.0
v0.1.6
v0.1.5
v0.1.4
v0.1.3
v0.1.1
v0.1.0
release_0_10_2
release_0_10_1
release_0_10_0
release_0_9_1
release_0_9_0
release_0_8_2
release_0_8_1
release_0_7_1
release_0_7_0
release_0_6_1
release_0_6_0
release_0_5_1
无相关合并请求
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
96 addition
and
6 deletion
+96
-6
TODO
TODO
+2
-1
linux-user/syscall.c
linux-user/syscall.c
+94
-5
未找到文件。
TODO
浏览文件 @
b03c60f3
- optimize translated cache chaining (DLL PLT-like system)
- more syscalls (in particular all 64 bit ones, IPCs, fix 64 bit issues)
- more syscalls (in particular all 64 bit ones, IPCs, fix 64 bit
issues, fix 16 bit uid issues)
- finish signal handing (fp87 state, more siginfo conversions)
- verify thread support (clone() and various locks)
- vm86 syscall support
...
...
This diff is collapsed.
Click to expand it.
linux-user/syscall.c
浏览文件 @
b03c60f3
...
...
@@ -103,6 +103,10 @@ extern int personality(int);
extern
int
flock
(
int
,
int
);
extern
int
setfsuid
(
int
);
extern
int
setfsgid
(
int
);
extern
int
setresuid
(
int
,
int
,
int
);
extern
int
getresuid
(
int
*
,
int
*
,
int
*
);
extern
int
setresgid
(
int
,
int
,
int
);
extern
int
getresgid
(
int
*
,
int
*
,
int
*
);
static
inline
long
get_errno
(
long
ret
)
{
...
...
@@ -809,6 +813,10 @@ int do_fork(CPUX86State *env, unsigned int flags, unsigned long newsp)
#endif
#define high2lowuid(x) (x)
#define high2lowgid(x) (x)
#define low2highuid(x) (x)
#define low2highgid(x) (x)
void
syscall_init
(
void
)
{
...
...
@@ -913,7 +921,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
ret
=
get_errno
(
umount
((
const
char
*
)
arg1
));
break
;
case
TARGET_NR_setuid
:
ret
=
get_errno
(
setuid
(
arg1
));
ret
=
get_errno
(
setuid
(
low2highuid
(
arg1
)
));
break
;
case
TARGET_NR_getuid
:
ret
=
get_errno
(
getuid
());
...
...
@@ -984,7 +992,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
case
TARGET_NR_prof
:
goto
unimplemented
;
case
TARGET_NR_setgid
:
ret
=
get_errno
(
setgid
(
arg1
));
ret
=
get_errno
(
setgid
(
low2highgid
(
arg1
)
));
break
;
case
TARGET_NR_getgid
:
ret
=
get_errno
(
getgid
());
...
...
@@ -1727,14 +1735,41 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
}
}
break
;
case
TARGET_NR_setresuid
:
ret
=
get_errno
(
setresuid
(
low2highuid
(
arg1
),
low2highuid
(
arg2
),
low2highuid
(
arg3
)));
break
;
case
TARGET_NR_getresuid
:
{
int
ruid
,
euid
,
suid
;
ret
=
get_errno
(
getresuid
(
&
ruid
,
&
euid
,
&
suid
));
if
(
!
is_error
(
ret
))
{
*
(
uint16_t
*
)
arg1
=
tswap16
(
high2lowuid
(
ruid
));
*
(
uint16_t
*
)
arg2
=
tswap16
(
high2lowuid
(
euid
));
*
(
uint16_t
*
)
arg3
=
tswap16
(
high2lowuid
(
suid
));
}
}
break
;
case
TARGET_NR_setresgid
:
ret
=
get_errno
(
setresgid
(
low2highgid
(
arg1
),
low2highgid
(
arg2
),
low2highgid
(
arg3
)));
break
;
case
TARGET_NR_getresgid
:
{
int
rgid
,
egid
,
sgid
;
ret
=
get_errno
(
getresgid
(
&
rgid
,
&
egid
,
&
sgid
));
if
(
!
is_error
(
ret
))
{
*
(
uint16_t
*
)
arg1
=
high2lowgid
(
tswap16
(
rgid
));
*
(
uint16_t
*
)
arg2
=
high2lowgid
(
tswap16
(
egid
));
*
(
uint16_t
*
)
arg3
=
high2lowgid
(
tswap16
(
sgid
));
}
}
break
;
case
TARGET_NR_vm86
:
case
TARGET_NR_query_module
:
case
TARGET_NR_nfsservctl
:
case
TARGET_NR_setresgid
:
case
TARGET_NR_getresgid
:
case
TARGET_NR_prctl
:
case
TARGET_NR_pread
:
case
TARGET_NR_pwrite
:
...
...
@@ -1789,26 +1824,80 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
break
;
case
TARGET_NR_lchown32
:
ret
=
get_errno
(
lchown
((
const
char
*
)
arg1
,
arg2
,
arg3
));
break
;
case
TARGET_NR_getuid32
:
ret
=
get_errno
(
getuid
());
break
;
case
TARGET_NR_getgid32
:
ret
=
get_errno
(
getgid
());
break
;
case
TARGET_NR_geteuid32
:
ret
=
get_errno
(
geteuid
());
break
;
case
TARGET_NR_getegid32
:
ret
=
get_errno
(
getegid
());
break
;
case
TARGET_NR_setreuid32
:
ret
=
get_errno
(
setreuid
(
arg1
,
arg2
));
break
;
case
TARGET_NR_setregid32
:
ret
=
get_errno
(
setregid
(
arg1
,
arg2
));
break
;
case
TARGET_NR_getgroups32
:
goto
unimplemented
;
case
TARGET_NR_setgroups32
:
goto
unimplemented
;
case
TARGET_NR_fchown32
:
ret
=
get_errno
(
fchown
(
arg1
,
arg2
,
arg3
));
break
;
case
TARGET_NR_setresuid32
:
ret
=
get_errno
(
setresuid
(
arg1
,
arg2
,
arg3
));
break
;
case
TARGET_NR_getresuid32
:
{
int
ruid
,
euid
,
suid
;
ret
=
get_errno
(
getresuid
(
&
ruid
,
&
euid
,
&
suid
));
if
(
!
is_error
(
ret
))
{
*
(
uint32_t
*
)
arg1
=
tswap32
(
ruid
);
*
(
uint32_t
*
)
arg2
=
tswap32
(
euid
);
*
(
uint32_t
*
)
arg3
=
tswap32
(
suid
);
}
}
break
;
case
TARGET_NR_setresgid32
:
ret
=
get_errno
(
setresgid
(
arg1
,
arg2
,
arg3
));
break
;
case
TARGET_NR_getresgid32
:
{
int
rgid
,
egid
,
sgid
;
ret
=
get_errno
(
getresgid
(
&
rgid
,
&
egid
,
&
sgid
));
if
(
!
is_error
(
ret
))
{
*
(
uint32_t
*
)
arg1
=
tswap32
(
rgid
);
*
(
uint32_t
*
)
arg2
=
tswap32
(
egid
);
*
(
uint32_t
*
)
arg3
=
tswap32
(
sgid
);
}
}
break
;
case
TARGET_NR_chown32
:
ret
=
get_errno
(
chown
((
const
char
*
)
arg1
,
arg2
,
arg3
));
break
;
case
TARGET_NR_setuid32
:
ret
=
get_errno
(
setuid
(
arg1
));
break
;
case
TARGET_NR_setgid32
:
ret
=
get_errno
(
setgid
(
arg1
));
break
;
case
TARGET_NR_setfsuid32
:
ret
=
get_errno
(
setfsuid
(
arg1
));
break
;
case
TARGET_NR_setfsgid32
:
ret
=
get_errno
(
setfsgid
(
arg1
));
break
;
case
TARGET_NR_pivot_root
:
goto
unimplemented
;
case
TARGET_NR_mincore
:
goto
unimplemented
;
case
TARGET_NR_madvise
:
goto
unimplemented
;
#if TARGET_LONG_BITS == 32
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部