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
5653cde7
Commit
5653cde7
authored
Nov 19, 2012
by
Catalin Marinas
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'viro/arch-arm64' into execve
* viro/arch-arm64: arm64: get rid of fork/vfork/clone wrappers
parents
6097a074
69290397
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 @
5653cde7
...
...
@@ -23,15 +23,16 @@
/*
* 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_sigaltstack_wrapper
(
const
stack_t
__user
*
uss
,
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>
#endif
/* __ASM_SYSCALLS_H */
arch/arm64/include/asm/unistd32.h
View file @
5653cde7
...
...
@@ -23,7 +23,7 @@
__SYSCALL
(
0
,
sys_restart_syscall
)
__SYSCALL
(
1
,
sys_exit
)
__SYSCALL
(
2
,
compat_sys_fork
_wrapper
)
__SYSCALL
(
2
,
compat_sys_fork
)
__SYSCALL
(
3
,
sys_read
)
__SYSCALL
(
4
,
sys_write
)
__SYSCALL
(
5
,
compat_sys_open
)
...
...
@@ -141,7 +141,7 @@ __SYSCALL(116, compat_sys_sysinfo)
__SYSCALL
(
117
,
sys_ni_syscall
)
/* 117 was sys_ipc */
__SYSCALL
(
118
,
sys_fsync
)
__SYSCALL
(
119
,
compat_sys_sigreturn_wrapper
)
__SYSCALL
(
120
,
compat_sys_clone_wrapper
)
__SYSCALL
(
120
,
sys_clone
)
__SYSCALL
(
121
,
sys_setdomainname
)
__SYSCALL
(
122
,
sys_newuname
)
__SYSCALL
(
123
,
sys_ni_syscall
)
/* 123 was sys_modify_ldt */
...
...
@@ -211,7 +211,7 @@ __SYSCALL(186, compat_sys_sigaltstack_wrapper)
__SYSCALL
(
187
,
compat_sys_sendfile
)
__SYSCALL
(
188
,
sys_ni_syscall
)
/* 188 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
(
192
,
sys_mmap_pgoff
)
__SYSCALL
(
193
,
compat_sys_truncate64_wrapper
)
...
...
arch/arm64/kernel/entry.S
View file @
5653cde7
...
...
@@ -676,11 +676,6 @@ __sys_trace_return:
/*
*
Special
system
call
wrappers
.
*/
ENTRY
(
sys_clone_wrapper
)
mov
x5
,
sp
b
sys_clone
ENDPROC
(
sys_clone_wrapper
)
ENTRY
(
sys_rt_sigreturn_wrapper
)
mov
x0
,
sp
b
sys_rt_sigreturn
...
...
arch/arm64/kernel/process.c
View file @
5653cde7
...
...
@@ -246,14 +246,20 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
*
childregs
=
*
regs
;
childregs
->
regs
[
0
]
=
0
;
if
(
is_compat_thread
(
task_thread_info
(
p
)))
{
childregs
->
compat_sp
=
stack_start
;
if
(
stack_start
)
childregs
->
compat_sp
=
stack_start
;
}
else
{
/*
* Read the current TLS pointer from tpidr_el0 as it may be
* out-of-sync with the saved value.
*/
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
...
...
arch/arm64/kernel/sys.c
View file @
5653cde7
...
...
@@ -31,14 +31,10 @@
*/
asmlinkage
long
sys_clone
(
unsigned
long
clone_flags
,
unsigned
long
newsp
,
int
__user
*
parent_tidptr
,
unsigned
long
tls_val
,
int
__user
*
child_tidptr
,
struct
pt_regs
*
regs
)
int
__user
*
child_tidptr
)
{
if
(
!
newsp
)
newsp
=
regs
->
sp
;
/* 16-byte aligned stack mandatory on AArch64 */
if
(
newsp
&
15
)
return
-
EINVAL
;
return
do_fork
(
clone_flags
,
newsp
,
regs
,
0
,
parent_tidptr
,
child_tidptr
);
return
do_fork
(
clone_flags
,
newsp
,
current_pt_regs
(),
0
,
parent_tidptr
,
child_tidptr
);
}
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.
*/
#define sys_clone sys_clone_wrapper
#define sys_rt_sigreturn sys_rt_sigreturn_wrapper
#define sys_sigaltstack sys_sigaltstack_wrapper
...
...
arch/arm64/kernel/sys32.S
View file @
5653cde7
...
...
@@ -26,20 +26,6 @@
/*
*
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
:
mov
x0
,
sp
...
...
arch/arm64/kernel/sys_compat.c
View file @
5653cde7
...
...
@@ -28,25 +28,15 @@
#include <asm/cacheflush.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
,
int
__user
*
parent_tidptr
,
int
tls_val
,
int
__user
*
child_tidptr
,
struct
pt_regs
*
regs
)
asmlinkage
int
compat_sys_vfork
(
void
)
{
if
(
!
newsp
)
newsp
=
regs
->
compat_sp
;
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
);
return
do_fork
(
CLONE_VFORK
|
CLONE_VM
|
SIGCHLD
,
0
,
current_pt_regs
(),
0
,
NULL
,
NULL
);
}
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