Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
65f22a90
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
65f22a90
编写于
9月 06, 2012
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
s390: fold execve_tail() into start_thread(), convert to generic sys_execve()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
1f02ab4a
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
5 addition
and
61 deletion
+5
-61
arch/s390/include/asm/processor.h
arch/s390/include/asm/processor.h
+3
-0
arch/s390/include/asm/unistd.h
arch/s390/include/asm/unistd.h
+1
-0
arch/s390/kernel/compat_linux.c
arch/s390/kernel/compat_linux.c
+0
-26
arch/s390/kernel/compat_linux.h
arch/s390/kernel/compat_linux.h
+0
-2
arch/s390/kernel/compat_wrapper.S
arch/s390/kernel/compat_wrapper.S
+1
-1
arch/s390/kernel/entry.S
arch/s390/kernel/entry.S
+0
-3
arch/s390/kernel/entry.h
arch/s390/kernel/entry.h
+0
-3
arch/s390/kernel/entry64.S
arch/s390/kernel/entry64.S
+0
-1
arch/s390/kernel/process.c
arch/s390/kernel/process.c
+0
-25
未找到文件。
arch/s390/include/asm/processor.h
浏览文件 @
65f22a90
...
...
@@ -32,6 +32,7 @@ static inline void get_cpu_id(struct cpuid *ptr)
extern
void
s390_adjust_jiffies
(
void
);
extern
const
struct
seq_operations
cpuinfo_op
;
extern
int
sysctl_ieee_emulation_warnings
;
extern
void
execve_tail
(
void
);
/*
* User space process size: 2GB for 31 bit, 4TB or 8PT for 64 bit.
...
...
@@ -114,6 +115,7 @@ struct stack_frame {
regs->psw.mask = psw_user_bits | PSW_MASK_EA | PSW_MASK_BA; \
regs->psw.addr = new_psw | PSW_ADDR_AMODE; \
regs->gprs[15] = new_stackp; \
execve_tail(); \
} while (0)
#define start_thread31(regs, new_psw, new_stackp) do { \
...
...
@@ -123,6 +125,7 @@ struct stack_frame {
__tlb_flush_mm(current->mm); \
crst_table_downgrade(current->mm, 1UL << 31); \
update_mm(current->mm, current); \
execve_tail(); \
} while (0)
/* Forward declaration, a strange C thing */
...
...
arch/s390/include/asm/unistd.h
浏览文件 @
65f22a90
...
...
@@ -415,6 +415,7 @@
# define __ARCH_WANT_COMPAT_SYS_TIME
# define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
# endif
#define __ARCH_WANT_SYS_EXECVE
/*
* "Conditional" syscalls
...
...
arch/s390/kernel/compat_linux.c
浏览文件 @
65f22a90
...
...
@@ -420,32 +420,6 @@ sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo)
return
ret
;
}
/*
* sys32_execve() executes a new program after the asm stub has set
* things up for us. This should basically do what I want it to.
*/
asmlinkage
long
sys32_execve
(
const
char
__user
*
name
,
compat_uptr_t
__user
*
argv
,
compat_uptr_t
__user
*
envp
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
char
*
filename
;
long
rc
;
filename
=
getname
(
name
);
rc
=
PTR_ERR
(
filename
);
if
(
IS_ERR
(
filename
))
return
rc
;
rc
=
compat_do_execve
(
filename
,
argv
,
envp
,
regs
);
if
(
rc
)
goto
out
;
current
->
thread
.
fp_regs
.
fpc
=
0
;
asm
volatile
(
"sfpc %0,0"
:
:
"d"
(
0
));
rc
=
regs
->
gprs
[
2
];
out:
putname
(
filename
);
return
rc
;
}
asmlinkage
long
sys32_pread64
(
unsigned
int
fd
,
char
__user
*
ubuf
,
size_t
count
,
u32
poshi
,
u32
poslo
)
{
...
...
arch/s390/kernel/compat_linux.h
浏览文件 @
65f22a90
...
...
@@ -193,8 +193,6 @@ long sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
compat_sigset_t
__user
*
oset
,
size_t
sigsetsize
);
long
sys32_rt_sigpending
(
compat_sigset_t
__user
*
set
,
size_t
sigsetsize
);
long
sys32_rt_sigqueueinfo
(
int
pid
,
int
sig
,
compat_siginfo_t
__user
*
uinfo
);
long
sys32_execve
(
const
char
__user
*
name
,
compat_uptr_t
__user
*
argv
,
compat_uptr_t
__user
*
envp
);
long
sys32_init_module
(
void
__user
*
umod
,
unsigned
long
len
,
const
char
__user
*
uargs
);
long
sys32_delete_module
(
const
char
__user
*
name_user
,
unsigned
int
flags
);
...
...
arch/s390/kernel/compat_wrapper.S
浏览文件 @
65f22a90
...
...
@@ -1576,7 +1576,7 @@ ENTRY(sys32_execve_wrapper)
llgtr
%
r2
,%
r2
#
char
*
llgtr
%
r3
,%
r3
#
compat_uptr_t
*
llgtr
%
r4
,%
r4
#
compat_uptr_t
*
jg
sys32_execve
#
branch
to
system
call
jg
compat_sys_execve
#
branch
to
system
call
ENTRY
(
sys_fanotify_init_wrapper
)
llgfr
%
r2
,%
r2
#
unsigned
int
...
...
arch/s390/kernel/entry.S
浏览文件 @
65f22a90
...
...
@@ -368,8 +368,6 @@ ENTRY(kernel_execve)
l
%
r12
,
__LC_THREAD_INFO
xc
__SF_BACKCHAIN
(
4
,%
r15
),
__SF_BACKCHAIN
(%
r15
)
ssm
__LC_SVC_NEW_PSW
#
reenable
interrupts
l
%
r1
,
BASED
(
.
Lexecve_tail
)
basr
%
r14
,%
r1
#
call
execve_tail
j
sysc_return
/*
...
...
@@ -932,7 +930,6 @@ cleanup_idle_wait:
.
Ldo_notify_resume
:
.
long
do_notify_resume
.
Ldo_per_trap
:
.
long
do_per_trap
.
Ldo_execve
:
.
long
do_execve
.
Lexecve_tail
:
.
long
execve_tail
.
Ljump_table
:
.
long
pgm_check_table
.
Lschedule
:
.
long
schedule
#ifdef CONFIG_PREEMPT
...
...
arch/s390/kernel/entry.h
浏览文件 @
65f22a90
...
...
@@ -58,9 +58,6 @@ long sys_fork(void);
long
sys_clone
(
unsigned
long
newsp
,
unsigned
long
clone_flags
,
int
__user
*
parent_tidptr
,
int
__user
*
child_tidptr
);
long
sys_vfork
(
void
);
void
execve_tail
(
void
);
long
sys_execve
(
const
char
__user
*
name
,
const
char
__user
*
const
__user
*
argv
,
const
char
__user
*
const
__user
*
envp
);
long
sys_sigsuspend
(
int
history0
,
int
history1
,
old_sigset_t
mask
);
long
sys_sigaction
(
int
sig
,
const
struct
old_sigaction
__user
*
act
,
struct
old_sigaction
__user
*
oact
);
...
...
arch/s390/kernel/entry64.S
浏览文件 @
65f22a90
...
...
@@ -386,7 +386,6 @@ ENTRY(kernel_execve)
lg
%
r12
,
__LC_THREAD_INFO
xc
__SF_BACKCHAIN
(
8
,%
r15
),
__SF_BACKCHAIN
(%
r15
)
ssm
__LC_SVC_NEW_PSW
#
reenable
interrupts
brasl
%
r14
,
execve_tail
j
sysc_return
/*
...
...
arch/s390/kernel/process.c
浏览文件 @
65f22a90
...
...
@@ -249,31 +249,6 @@ asmlinkage void execve_tail(void)
asm
volatile
(
"sfpc %0,%0"
:
:
"d"
(
0
));
}
/*
* sys_execve() executes a new program.
*/
SYSCALL_DEFINE3
(
execve
,
const
char
__user
*
,
name
,
const
char
__user
*
const
__user
*
,
argv
,
const
char
__user
*
const
__user
*
,
envp
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
char
*
filename
;
long
rc
;
filename
=
getname
(
name
);
rc
=
PTR_ERR
(
filename
);
if
(
IS_ERR
(
filename
))
return
rc
;
rc
=
do_execve
(
filename
,
argv
,
envp
,
regs
);
if
(
rc
)
goto
out
;
execve_tail
();
rc
=
regs
->
gprs
[
2
];
out:
putname
(
filename
);
return
rc
;
}
/*
* fill in the FPU structure for a core dump.
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录