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
nexedi
linux
Commits
7a6cf932
Commit
7a6cf932
authored
Nov 19, 2012
by
Catalin Marinas
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'execve' into upstream
* execve: arm64: get rid of fork/vfork/clone wrappers
parents
908816df
5653cde7
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
25 additions
and
52 deletions
+25
-52
arch/arm64/include/asm/syscalls.h
arch/arm64/include/asm/syscalls.h
+6
-5
arch/arm64/include/asm/unistd32.h
arch/arm64/include/asm/unistd32.h
+3
-3
arch/arm64/kernel/entry.S
arch/arm64/kernel/entry.S
+0
-5
arch/arm64/kernel/process.c
arch/arm64/kernel/process.c
+8
-2
arch/arm64/kernel/sys.c
arch/arm64/kernel/sys.c
+3
-8
arch/arm64/kernel/sys32.S
arch/arm64/kernel/sys32.S
+0
-14
arch/arm64/kernel/sys_compat.c
arch/arm64/kernel/sys_compat.c
+5
-15
No files found.
arch/arm64/include/asm/syscalls.h
View file @
7a6cf932
...
@@ -23,15 +23,16 @@
...
@@ -23,15 +23,16 @@
/*
/*
* System call wrappers implemented in kernel/entry.S.
* System call wrappers implemented in kernel/entry.S.
*/
*/
asmlinkage
long
sys_clone_wrapper
(
unsigned
long
clone_flags
,
unsigned
long
newsp
,
void
__user
*
parent_tid
,
unsigned
long
tls_val
,
void
__user
*
child_tid
);
asmlinkage
long
sys_rt_sigreturn_wrapper
(
void
);
asmlinkage
long
sys_rt_sigreturn_wrapper
(
void
);
asmlinkage
long
sys_sigaltstack_wrapper
(
const
stack_t
__user
*
uss
,
asmlinkage
long
sys_sigaltstack_wrapper
(
const
stack_t
__user
*
uss
,
stack_t
__user
*
uoss
);
stack_t
__user
*
uoss
);
/*
* AArch64 sys_clone implementation has a different prototype than the generic
* one (additional TLS value argument).
*/
#define sys_clone sys_clone
#include <asm-generic/syscalls.h>
#include <asm-generic/syscalls.h>
#endif
/* __ASM_SYSCALLS_H */
#endif
/* __ASM_SYSCALLS_H */
arch/arm64/include/asm/unistd32.h
View file @
7a6cf932
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
__SYSCALL
(
0
,
sys_restart_syscall
)
__SYSCALL
(
0
,
sys_restart_syscall
)
__SYSCALL
(
1
,
sys_exit
)
__SYSCALL
(
1
,
sys_exit
)
__SYSCALL
(
2
,
compat_sys_fork
_wrapper
)
__SYSCALL
(
2
,
compat_sys_fork
)
__SYSCALL
(
3
,
sys_read
)
__SYSCALL
(
3
,
sys_read
)
__SYSCALL
(
4
,
sys_write
)
__SYSCALL
(
4
,
sys_write
)
__SYSCALL
(
5
,
compat_sys_open
)
__SYSCALL
(
5
,
compat_sys_open
)
...
@@ -141,7 +141,7 @@ __SYSCALL(116, compat_sys_sysinfo)
...
@@ -141,7 +141,7 @@ __SYSCALL(116, compat_sys_sysinfo)
__SYSCALL
(
117
,
sys_ni_syscall
)
/* 117 was sys_ipc */
__SYSCALL
(
117
,
sys_ni_syscall
)
/* 117 was sys_ipc */
__SYSCALL
(
118
,
sys_fsync
)
__SYSCALL
(
118
,
sys_fsync
)
__SYSCALL
(
119
,
compat_sys_sigreturn_wrapper
)
__SYSCALL
(
119
,
compat_sys_sigreturn_wrapper
)
__SYSCALL
(
120
,
compat_sys_clone_wrapper
)
__SYSCALL
(
120
,
sys_clone
)
__SYSCALL
(
121
,
sys_setdomainname
)
__SYSCALL
(
121
,
sys_setdomainname
)
__SYSCALL
(
122
,
sys_newuname
)
__SYSCALL
(
122
,
sys_newuname
)
__SYSCALL
(
123
,
sys_ni_syscall
)
/* 123 was sys_modify_ldt */
__SYSCALL
(
123
,
sys_ni_syscall
)
/* 123 was sys_modify_ldt */
...
@@ -211,7 +211,7 @@ __SYSCALL(186, compat_sys_sigaltstack_wrapper)
...
@@ -211,7 +211,7 @@ __SYSCALL(186, compat_sys_sigaltstack_wrapper)
__SYSCALL
(
187
,
compat_sys_sendfile
)
__SYSCALL
(
187
,
compat_sys_sendfile
)
__SYSCALL
(
188
,
sys_ni_syscall
)
/* 188 reserved */
__SYSCALL
(
188
,
sys_ni_syscall
)
/* 188 reserved */
__SYSCALL
(
189
,
sys_ni_syscall
)
/* 189 reserved */
__SYSCALL
(
189
,
sys_ni_syscall
)
/* 189 reserved */
__SYSCALL
(
190
,
compat_sys_vfork
_wrapper
)
__SYSCALL
(
190
,
compat_sys_vfork
)
__SYSCALL
(
191
,
compat_sys_getrlimit
)
/* SuS compliant getrlimit */
__SYSCALL
(
191
,
compat_sys_getrlimit
)
/* SuS compliant getrlimit */
__SYSCALL
(
192
,
sys_mmap_pgoff
)
__SYSCALL
(
192
,
sys_mmap_pgoff
)
__SYSCALL
(
193
,
compat_sys_truncate64_wrapper
)
__SYSCALL
(
193
,
compat_sys_truncate64_wrapper
)
...
...
arch/arm64/kernel/entry.S
View file @
7a6cf932
...
@@ -676,11 +676,6 @@ __sys_trace_return:
...
@@ -676,11 +676,6 @@ __sys_trace_return:
/*
/*
*
Special
system
call
wrappers
.
*
Special
system
call
wrappers
.
*/
*/
ENTRY
(
sys_clone_wrapper
)
mov
x5
,
sp
b
sys_clone
ENDPROC
(
sys_clone_wrapper
)
ENTRY
(
sys_rt_sigreturn_wrapper
)
ENTRY
(
sys_rt_sigreturn_wrapper
)
mov
x0
,
sp
mov
x0
,
sp
b
sys_rt_sigreturn
b
sys_rt_sigreturn
...
...
arch/arm64/kernel/process.c
View file @
7a6cf932
...
@@ -246,14 +246,20 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
...
@@ -246,14 +246,20 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
*
childregs
=
*
regs
;
*
childregs
=
*
regs
;
childregs
->
regs
[
0
]
=
0
;
childregs
->
regs
[
0
]
=
0
;
if
(
is_compat_thread
(
task_thread_info
(
p
)))
{
if
(
is_compat_thread
(
task_thread_info
(
p
)))
{
childregs
->
compat_sp
=
stack_start
;
if
(
stack_start
)
childregs
->
compat_sp
=
stack_start
;
}
else
{
}
else
{
/*
/*
* Read the current TLS pointer from tpidr_el0 as it may be
* Read the current TLS pointer from tpidr_el0 as it may be
* out-of-sync with the saved value.
* out-of-sync with the saved value.
*/
*/
asm
(
"mrs %0, tpidr_el0"
:
"=r"
(
tls
));
asm
(
"mrs %0, tpidr_el0"
:
"=r"
(
tls
));
childregs
->
sp
=
stack_start
;
if
(
stack_start
)
{
/* 16-byte aligned stack mandatory on AArch64 */
if
(
stack_start
&
15
)
return
-
EINVAL
;
childregs
->
sp
=
stack_start
;
}
}
}
/*
/*
* If a TLS pointer was passed to clone (4th argument), use it
* If a TLS pointer was passed to clone (4th argument), use it
...
...
arch/arm64/kernel/sys.c
View file @
7a6cf932
...
@@ -31,14 +31,10 @@
...
@@ -31,14 +31,10 @@
*/
*/
asmlinkage
long
sys_clone
(
unsigned
long
clone_flags
,
unsigned
long
newsp
,
asmlinkage
long
sys_clone
(
unsigned
long
clone_flags
,
unsigned
long
newsp
,
int
__user
*
parent_tidptr
,
unsigned
long
tls_val
,
int
__user
*
parent_tidptr
,
unsigned
long
tls_val
,
int
__user
*
child_tidptr
,
struct
pt_regs
*
regs
)
int
__user
*
child_tidptr
)
{
{
if
(
!
newsp
)
return
do_fork
(
clone_flags
,
newsp
,
current_pt_regs
(),
0
,
newsp
=
regs
->
sp
;
parent_tidptr
,
child_tidptr
);
/* 16-byte aligned stack mandatory on AArch64 */
if
(
newsp
&
15
)
return
-
EINVAL
;
return
do_fork
(
clone_flags
,
newsp
,
regs
,
0
,
parent_tidptr
,
child_tidptr
);
}
}
asmlinkage
long
sys_mmap
(
unsigned
long
addr
,
unsigned
long
len
,
asmlinkage
long
sys_mmap
(
unsigned
long
addr
,
unsigned
long
len
,
...
@@ -54,7 +50,6 @@ asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
...
@@ -54,7 +50,6 @@ asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
/*
/*
* Wrappers to pass the pt_regs argument.
* Wrappers to pass the pt_regs argument.
*/
*/
#define sys_clone sys_clone_wrapper
#define sys_rt_sigreturn sys_rt_sigreturn_wrapper
#define sys_rt_sigreturn sys_rt_sigreturn_wrapper
#define sys_sigaltstack sys_sigaltstack_wrapper
#define sys_sigaltstack sys_sigaltstack_wrapper
...
...
arch/arm64/kernel/sys32.S
View file @
7a6cf932
...
@@ -26,20 +26,6 @@
...
@@ -26,20 +26,6 @@
/*
/*
*
System
call
wrappers
for
the
AArch32
compatibility
layer
.
*
System
call
wrappers
for
the
AArch32
compatibility
layer
.
*/
*/
compat_sys_fork_wrapper
:
mov
x0
,
sp
b
compat_sys_fork
ENDPROC
(
compat_sys_fork_wrapper
)
compat_sys_vfork_wrapper
:
mov
x0
,
sp
b
compat_sys_vfork
ENDPROC
(
compat_sys_vfork_wrapper
)
compat_sys_clone_wrapper
:
mov
x5
,
sp
b
compat_sys_clone
ENDPROC
(
compat_sys_clone_wrapper
)
compat_sys_sigreturn_wrapper
:
compat_sys_sigreturn_wrapper
:
mov
x0
,
sp
mov
x0
,
sp
...
...
arch/arm64/kernel/sys_compat.c
View file @
7a6cf932
...
@@ -28,25 +28,15 @@
...
@@ -28,25 +28,15 @@
#include <asm/cacheflush.h>
#include <asm/cacheflush.h>
#include <asm/unistd32.h>
#include <asm/unistd32.h>
asmlinkage
int
compat_sys_fork
(
struct
pt_regs
*
regs
)
asmlinkage
int
compat_sys_fork
(
void
)
{
{
return
do_fork
(
SIGCHLD
,
regs
->
compat_sp
,
regs
,
0
,
NULL
,
NULL
);
return
do_fork
(
SIGCHLD
,
0
,
current_pt_regs
()
,
0
,
NULL
,
NULL
);
}
}
asmlinkage
int
compat_sys_clone
(
unsigned
long
clone_flags
,
unsigned
long
newsp
,
asmlinkage
int
compat_sys_vfork
(
void
)
int
__user
*
parent_tidptr
,
int
tls_val
,
int
__user
*
child_tidptr
,
struct
pt_regs
*
regs
)
{
{
if
(
!
newsp
)
return
do_fork
(
CLONE_VFORK
|
CLONE_VM
|
SIGCHLD
,
0
,
newsp
=
regs
->
compat_sp
;
current_pt_regs
(),
0
,
NULL
,
NULL
);
return
do_fork
(
clone_flags
,
newsp
,
regs
,
0
,
parent_tidptr
,
child_tidptr
);
}
asmlinkage
int
compat_sys_vfork
(
struct
pt_regs
*
regs
)
{
return
do_fork
(
CLONE_VFORK
|
CLONE_VM
|
SIGCHLD
,
regs
->
compat_sp
,
regs
,
0
,
NULL
,
NULL
);
}
}
asmlinkage
int
compat_sys_sched_rr_get_interval
(
compat_pid_t
pid
,
asmlinkage
int
compat_sys_sched_rr_get_interval
(
compat_pid_t
pid
,
...
...
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