Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
583d632f
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
583d632f
编写于
8月 02, 2012
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
arm: introduce ret_from_kernel_execve(), switch to generic kernel_execve()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
9e14f828
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
13 addition
and
42 deletion
+13
-42
arch/arm/include/asm/unistd.h
arch/arm/include/asm/unistd.h
+1
-0
arch/arm/kernel/entry-common.S
arch/arm/kernel/entry-common.S
+12
-0
arch/arm/kernel/sys_arm.c
arch/arm/kernel/sys_arm.c
+0
-42
未找到文件。
arch/arm/include/asm/unistd.h
浏览文件 @
583d632f
...
...
@@ -469,6 +469,7 @@
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_SYS_SOCKETCALL
#endif
#define __ARCH_WANT_KERNEL_EXECVE
/*
* "Conditional" syscalls
...
...
arch/arm/kernel/entry-common.S
浏览文件 @
583d632f
...
...
@@ -103,6 +103,18 @@ ENTRY(ret_from_kernel_thread)
UNWIND
(.
fnend
)
ENDPROC
(
ret_from_kernel_thread
)
/*
*
turn
a
kernel
thread
into
userland
process
*
use
:
ret_from_kernel_execve
(
struct
pt_regs
*
normal
)
*/
ENTRY
(
ret_from_kernel_execve
)
mov
why
,
#
0
@
not
a
syscall
str
why
,
[
r0
,
#
S_R0
]
@
...
and
we
want
0
in
->
ARM_r0
as
well
get_thread_info
tsk
@
thread
structure
mov
sp
,
r0
@
stack
pointer
just
under
pt_regs
b
ret_slow_syscall
ENDPROC
(
ret_from_kernel_execve
)
.
equ
NR_syscalls
,
0
#define CALL(x) .equ NR_syscalls,NR_syscalls+1
#include "calls.S"
...
...
arch/arm/kernel/sys_arm.c
浏览文件 @
583d632f
...
...
@@ -79,48 +79,6 @@ asmlinkage int sys_execve(const char __user *filenamei,
return
error
;
}
int
kernel_execve
(
const
char
*
filename
,
const
char
*
const
argv
[],
const
char
*
const
envp
[])
{
struct
pt_regs
regs
;
int
ret
;
memset
(
&
regs
,
0
,
sizeof
(
struct
pt_regs
));
ret
=
do_execve
(
filename
,
(
const
char
__user
*
const
__user
*
)
argv
,
(
const
char
__user
*
const
__user
*
)
envp
,
&
regs
);
if
(
ret
<
0
)
goto
out
;
/*
* Save argc to the register structure for userspace.
*/
regs
.
ARM_r0
=
ret
;
/*
* We were successful. We won't be returning to our caller, but
* instead to user space by manipulating the kernel stack.
*/
asm
(
"add r0, %0, %1
\n\t
"
"mov r1, %2
\n\t
"
"mov r2, %3
\n\t
"
"bl memmove
\n\t
"
/* copy regs to top of stack */
"mov r8, #0
\n\t
"
/* not a syscall */
"mov r9, %0
\n\t
"
/* thread structure */
"mov sp, r0
\n\t
"
/* reposition stack pointer */
"b ret_to_user"
:
:
"r"
(
current_thread_info
()),
"Ir"
(
THREAD_START_SP
-
sizeof
(
regs
)),
"r"
(
&
regs
),
"Ir"
(
sizeof
(
regs
))
:
"r0"
,
"r1"
,
"r2"
,
"r3"
,
"r8"
,
"r9"
,
"ip"
,
"lr"
,
"memory"
);
out:
return
ret
;
}
/*
* Since loff_t is a 64 bit type we avoid a lot of ABI hassle
* with a different argument ordering.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录