Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
65f22a90
Commit
65f22a90
authored
Sep 06, 2012
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
s390: fold execve_tail() into start_thread(), convert to generic sys_execve()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
1f02ab4a
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
5 additions
and
61 deletions
+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
No files found.
arch/s390/include/asm/processor.h
View file @
65f22a90
...
@@ -32,6 +32,7 @@ static inline void get_cpu_id(struct cpuid *ptr)
...
@@ -32,6 +32,7 @@ static inline void get_cpu_id(struct cpuid *ptr)
extern
void
s390_adjust_jiffies
(
void
);
extern
void
s390_adjust_jiffies
(
void
);
extern
const
struct
seq_operations
cpuinfo_op
;
extern
const
struct
seq_operations
cpuinfo_op
;
extern
int
sysctl_ieee_emulation_warnings
;
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.
* User space process size: 2GB for 31 bit, 4TB or 8PT for 64 bit.
...
@@ -114,6 +115,7 @@ struct stack_frame {
...
@@ -114,6 +115,7 @@ struct stack_frame {
regs->psw.mask = psw_user_bits | PSW_MASK_EA | PSW_MASK_BA; \
regs->psw.mask = psw_user_bits | PSW_MASK_EA | PSW_MASK_BA; \
regs->psw.addr = new_psw | PSW_ADDR_AMODE; \
regs->psw.addr = new_psw | PSW_ADDR_AMODE; \
regs->gprs[15] = new_stackp; \
regs->gprs[15] = new_stackp; \
execve_tail(); \
} while (0)
} while (0)
#define start_thread31(regs, new_psw, new_stackp) do { \
#define start_thread31(regs, new_psw, new_stackp) do { \
...
@@ -123,6 +125,7 @@ struct stack_frame {
...
@@ -123,6 +125,7 @@ struct stack_frame {
__tlb_flush_mm(current->mm); \
__tlb_flush_mm(current->mm); \
crst_table_downgrade(current->mm, 1UL << 31); \
crst_table_downgrade(current->mm, 1UL << 31); \
update_mm(current->mm, current); \
update_mm(current->mm, current); \
execve_tail(); \
} while (0)
} while (0)
/* Forward declaration, a strange C thing */
/* Forward declaration, a strange C thing */
...
...
arch/s390/include/asm/unistd.h
View file @
65f22a90
...
@@ -415,6 +415,7 @@
...
@@ -415,6 +415,7 @@
# define __ARCH_WANT_COMPAT_SYS_TIME
# define __ARCH_WANT_COMPAT_SYS_TIME
# define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
# define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
# endif
# endif
#define __ARCH_WANT_SYS_EXECVE
/*
/*
* "Conditional" syscalls
* "Conditional" syscalls
...
...
arch/s390/kernel/compat_linux.c
View file @
65f22a90
...
@@ -420,32 +420,6 @@ sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo)
...
@@ -420,32 +420,6 @@ sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo)
return
ret
;
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
,
asmlinkage
long
sys32_pread64
(
unsigned
int
fd
,
char
__user
*
ubuf
,
size_t
count
,
u32
poshi
,
u32
poslo
)
size_t
count
,
u32
poshi
,
u32
poslo
)
{
{
...
...
arch/s390/kernel/compat_linux.h
View file @
65f22a90
...
@@ -193,8 +193,6 @@ long sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
...
@@ -193,8 +193,6 @@ long sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
compat_sigset_t
__user
*
oset
,
size_t
sigsetsize
);
compat_sigset_t
__user
*
oset
,
size_t
sigsetsize
);
long
sys32_rt_sigpending
(
compat_sigset_t
__user
*
set
,
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_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
,
long
sys32_init_module
(
void
__user
*
umod
,
unsigned
long
len
,
const
char
__user
*
uargs
);
const
char
__user
*
uargs
);
long
sys32_delete_module
(
const
char
__user
*
name_user
,
unsigned
int
flags
);
long
sys32_delete_module
(
const
char
__user
*
name_user
,
unsigned
int
flags
);
...
...
arch/s390/kernel/compat_wrapper.S
View file @
65f22a90
...
@@ -1576,7 +1576,7 @@ ENTRY(sys32_execve_wrapper)
...
@@ -1576,7 +1576,7 @@ ENTRY(sys32_execve_wrapper)
llgtr
%
r2
,%
r2
#
char
*
llgtr
%
r2
,%
r2
#
char
*
llgtr
%
r3
,%
r3
#
compat_uptr_t
*
llgtr
%
r3
,%
r3
#
compat_uptr_t
*
llgtr
%
r4
,%
r4
#
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
)
ENTRY
(
sys_fanotify_init_wrapper
)
llgfr
%
r2
,%
r2
#
unsigned
int
llgfr
%
r2
,%
r2
#
unsigned
int
...
...
arch/s390/kernel/entry.S
View file @
65f22a90
...
@@ -368,8 +368,6 @@ ENTRY(kernel_execve)
...
@@ -368,8 +368,6 @@ ENTRY(kernel_execve)
l
%
r12
,
__LC_THREAD_INFO
l
%
r12
,
__LC_THREAD_INFO
xc
__SF_BACKCHAIN
(
4
,%
r15
),
__SF_BACKCHAIN
(%
r15
)
xc
__SF_BACKCHAIN
(
4
,%
r15
),
__SF_BACKCHAIN
(%
r15
)
ssm
__LC_SVC_NEW_PSW
#
reenable
interrupts
ssm
__LC_SVC_NEW_PSW
#
reenable
interrupts
l
%
r1
,
BASED
(
.
Lexecve_tail
)
basr
%
r14
,%
r1
#
call
execve_tail
j
sysc_return
j
sysc_return
/*
/*
...
@@ -932,7 +930,6 @@ cleanup_idle_wait:
...
@@ -932,7 +930,6 @@ cleanup_idle_wait:
.
Ldo_notify_resume
:
.
long
do_notify_resume
.
Ldo_notify_resume
:
.
long
do_notify_resume
.
Ldo_per_trap
:
.
long
do_per_trap
.
Ldo_per_trap
:
.
long
do_per_trap
.
Ldo_execve
:
.
long
do_execve
.
Ldo_execve
:
.
long
do_execve
.
Lexecve_tail
:
.
long
execve_tail
.
Ljump_table
:
.
long
pgm_check_table
.
Ljump_table
:
.
long
pgm_check_table
.
Lschedule
:
.
long
schedule
.
Lschedule
:
.
long
schedule
#ifdef CONFIG_PREEMPT
#ifdef CONFIG_PREEMPT
...
...
arch/s390/kernel/entry.h
View file @
65f22a90
...
@@ -58,9 +58,6 @@ long sys_fork(void);
...
@@ -58,9 +58,6 @@ long sys_fork(void);
long
sys_clone
(
unsigned
long
newsp
,
unsigned
long
clone_flags
,
long
sys_clone
(
unsigned
long
newsp
,
unsigned
long
clone_flags
,
int
__user
*
parent_tidptr
,
int
__user
*
child_tidptr
);
int
__user
*
parent_tidptr
,
int
__user
*
child_tidptr
);
long
sys_vfork
(
void
);
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_sigsuspend
(
int
history0
,
int
history1
,
old_sigset_t
mask
);
long
sys_sigaction
(
int
sig
,
const
struct
old_sigaction
__user
*
act
,
long
sys_sigaction
(
int
sig
,
const
struct
old_sigaction
__user
*
act
,
struct
old_sigaction
__user
*
oact
);
struct
old_sigaction
__user
*
oact
);
...
...
arch/s390/kernel/entry64.S
View file @
65f22a90
...
@@ -386,7 +386,6 @@ ENTRY(kernel_execve)
...
@@ -386,7 +386,6 @@ ENTRY(kernel_execve)
lg
%
r12
,
__LC_THREAD_INFO
lg
%
r12
,
__LC_THREAD_INFO
xc
__SF_BACKCHAIN
(
8
,%
r15
),
__SF_BACKCHAIN
(%
r15
)
xc
__SF_BACKCHAIN
(
8
,%
r15
),
__SF_BACKCHAIN
(%
r15
)
ssm
__LC_SVC_NEW_PSW
#
reenable
interrupts
ssm
__LC_SVC_NEW_PSW
#
reenable
interrupts
brasl
%
r14
,
execve_tail
j
sysc_return
j
sysc_return
/*
/*
...
...
arch/s390/kernel/process.c
View file @
65f22a90
...
@@ -249,31 +249,6 @@ asmlinkage void execve_tail(void)
...
@@ -249,31 +249,6 @@ asmlinkage void execve_tail(void)
asm
volatile
(
"sfpc %0,%0"
:
:
"d"
(
0
));
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.
* fill in the FPU structure for a core dump.
*/
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment