Fix the exit syscall stub's name.
I've left the exit_group syscall as _exit because otherwise we'd have to convince the compiler that our _exit (which just calls __exit_group) is actually "noreturn", and it seems like that would be less clean than just cutting out the middleman. We'll just have to trust ourselves not to add anything to SYSCALLS.TXT that ought to be private but that only has a single leading underscore. Hopefully we can manage that. Change-Id: Iac47faea9f516186e1774381846c54cafabc4354
This commit is contained in:
parent
bbefbf1a75
commit
6b53c2349a
@ -24,13 +24,6 @@
|
|||||||
#
|
#
|
||||||
# This file is processed by a python script named gensyscalls.py.
|
# This file is processed by a python script named gensyscalls.py.
|
||||||
|
|
||||||
# process management
|
|
||||||
void _exit:exit_group(int) all
|
|
||||||
void _exit_thread:exit(int) all
|
|
||||||
|
|
||||||
pid_t wait4(pid_t, int*, int, struct rusage*) all
|
|
||||||
int __waitid:waitid(int, pid_t, struct siginfo_t*, int, void*) all
|
|
||||||
|
|
||||||
int execve(const char*, char* const*, char* const*) all
|
int execve(const char*, char* const*, char* const*) all
|
||||||
|
|
||||||
uid_t getuid:getuid32() arm,x86
|
uid_t getuid:getuid32() arm,x86
|
||||||
@ -289,6 +282,9 @@ int __epoll_pwait:epoll_pwait(int, struct epoll_event*, int, int, const sigset_t
|
|||||||
|
|
||||||
int eventfd:eventfd2(unsigned int, int) all
|
int eventfd:eventfd2(unsigned int, int) all
|
||||||
|
|
||||||
|
void _exit:exit_group(int) all
|
||||||
|
void __exit:exit(int) all
|
||||||
|
|
||||||
int futex(void*, int, int, void*, void*, int) all
|
int futex(void*, int, int, void*, void*, int) all
|
||||||
|
|
||||||
int inotify_init1(int) all
|
int inotify_init1(int) all
|
||||||
@ -298,6 +294,9 @@ int inotify_rm_watch(int, unsigned int) all
|
|||||||
int __pselect6:pselect6(int, fd_set*, fd_set*, fd_set*, timespec*, void*) all
|
int __pselect6:pselect6(int, fd_set*, fd_set*, fd_set*, timespec*, void*) all
|
||||||
int __ppoll:ppoll(pollfd*, unsigned int, timespec*, const sigset_t*, size_t) all
|
int __ppoll:ppoll(pollfd*, unsigned int, timespec*, const sigset_t*, size_t) all
|
||||||
|
|
||||||
|
pid_t wait4(pid_t, int*, int, struct rusage*) all
|
||||||
|
int __waitid:waitid(int, pid_t, struct siginfo_t*, int, void*) all
|
||||||
|
|
||||||
# ARM-specific
|
# ARM-specific
|
||||||
int __set_tls:__ARM_NR_set_tls(void*) arm
|
int __set_tls:__ARM_NR_set_tls(void*) arm
|
||||||
int cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) arm
|
int cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) arm
|
||||||
|
@ -3,6 +3,7 @@ syscall_src :=
|
|||||||
syscall_src += arch-arm/syscalls/__brk.S
|
syscall_src += arch-arm/syscalls/__brk.S
|
||||||
syscall_src += arch-arm/syscalls/__clone.S
|
syscall_src += arch-arm/syscalls/__clone.S
|
||||||
syscall_src += arch-arm/syscalls/__epoll_pwait.S
|
syscall_src += arch-arm/syscalls/__epoll_pwait.S
|
||||||
|
syscall_src += arch-arm/syscalls/__exit.S
|
||||||
syscall_src += arch-arm/syscalls/__fcntl.S
|
syscall_src += arch-arm/syscalls/__fcntl.S
|
||||||
syscall_src += arch-arm/syscalls/__fcntl64.S
|
syscall_src += arch-arm/syscalls/__fcntl64.S
|
||||||
syscall_src += arch-arm/syscalls/__fstatfs64.S
|
syscall_src += arch-arm/syscalls/__fstatfs64.S
|
||||||
@ -34,7 +35,6 @@ syscall_src += arch-arm/syscalls/__timer_gettime.S
|
|||||||
syscall_src += arch-arm/syscalls/__timer_settime.S
|
syscall_src += arch-arm/syscalls/__timer_settime.S
|
||||||
syscall_src += arch-arm/syscalls/__waitid.S
|
syscall_src += arch-arm/syscalls/__waitid.S
|
||||||
syscall_src += arch-arm/syscalls/_exit.S
|
syscall_src += arch-arm/syscalls/_exit.S
|
||||||
syscall_src += arch-arm/syscalls/_exit_thread.S
|
|
||||||
syscall_src += arch-arm/syscalls/accept.S
|
syscall_src += arch-arm/syscalls/accept.S
|
||||||
syscall_src += arch-arm/syscalls/acct.S
|
syscall_src += arch-arm/syscalls/acct.S
|
||||||
syscall_src += arch-arm/syscalls/bind.S
|
syscall_src += arch-arm/syscalls/bind.S
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(_exit_thread)
|
ENTRY(__exit)
|
||||||
mov ip, r7
|
mov ip, r7
|
||||||
ldr r7, =__NR_exit
|
ldr r7, =__NR_exit
|
||||||
swi #0
|
swi #0
|
||||||
@ -13,4 +13,4 @@ ENTRY(_exit_thread)
|
|||||||
bxls lr
|
bxls lr
|
||||||
neg r0, r0
|
neg r0, r0
|
||||||
b __set_errno
|
b __set_errno
|
||||||
END(_exit_thread)
|
END(__exit)
|
@ -3,6 +3,7 @@ syscall_src :=
|
|||||||
syscall_src += arch-mips/syscalls/__brk.S
|
syscall_src += arch-mips/syscalls/__brk.S
|
||||||
syscall_src += arch-mips/syscalls/__clone.S
|
syscall_src += arch-mips/syscalls/__clone.S
|
||||||
syscall_src += arch-mips/syscalls/__epoll_pwait.S
|
syscall_src += arch-mips/syscalls/__epoll_pwait.S
|
||||||
|
syscall_src += arch-mips/syscalls/__exit.S
|
||||||
syscall_src += arch-mips/syscalls/__fcntl.S
|
syscall_src += arch-mips/syscalls/__fcntl.S
|
||||||
syscall_src += arch-mips/syscalls/__fcntl64.S
|
syscall_src += arch-mips/syscalls/__fcntl64.S
|
||||||
syscall_src += arch-mips/syscalls/__fstatfs64.S
|
syscall_src += arch-mips/syscalls/__fstatfs64.S
|
||||||
@ -34,7 +35,6 @@ syscall_src += arch-mips/syscalls/__timer_gettime.S
|
|||||||
syscall_src += arch-mips/syscalls/__timer_settime.S
|
syscall_src += arch-mips/syscalls/__timer_settime.S
|
||||||
syscall_src += arch-mips/syscalls/__waitid.S
|
syscall_src += arch-mips/syscalls/__waitid.S
|
||||||
syscall_src += arch-mips/syscalls/_exit.S
|
syscall_src += arch-mips/syscalls/_exit.S
|
||||||
syscall_src += arch-mips/syscalls/_exit_thread.S
|
|
||||||
syscall_src += arch-mips/syscalls/_flush_cache.S
|
syscall_src += arch-mips/syscalls/_flush_cache.S
|
||||||
syscall_src += arch-mips/syscalls/accept.S
|
syscall_src += arch-mips/syscalls/accept.S
|
||||||
syscall_src += arch-mips/syscalls/acct.S
|
syscall_src += arch-mips/syscalls/acct.S
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
.text
|
.text
|
||||||
.globl _exit_thread
|
.globl __exit
|
||||||
.align 4
|
.align 4
|
||||||
.ent _exit_thread
|
.ent __exit
|
||||||
|
|
||||||
_exit_thread:
|
__exit:
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.cpload $t9
|
.cpload $t9
|
||||||
li $v0, __NR_exit
|
li $v0, __NR_exit
|
||||||
@ -20,4 +20,4 @@ _exit_thread:
|
|||||||
j $t9
|
j $t9
|
||||||
nop
|
nop
|
||||||
.set reorder
|
.set reorder
|
||||||
.end _exit_thread
|
.end __exit
|
@ -3,6 +3,7 @@ syscall_src :=
|
|||||||
syscall_src += arch-x86/syscalls/__brk.S
|
syscall_src += arch-x86/syscalls/__brk.S
|
||||||
syscall_src += arch-x86/syscalls/__clone.S
|
syscall_src += arch-x86/syscalls/__clone.S
|
||||||
syscall_src += arch-x86/syscalls/__epoll_pwait.S
|
syscall_src += arch-x86/syscalls/__epoll_pwait.S
|
||||||
|
syscall_src += arch-x86/syscalls/__exit.S
|
||||||
syscall_src += arch-x86/syscalls/__fcntl.S
|
syscall_src += arch-x86/syscalls/__fcntl.S
|
||||||
syscall_src += arch-x86/syscalls/__fcntl64.S
|
syscall_src += arch-x86/syscalls/__fcntl64.S
|
||||||
syscall_src += arch-x86/syscalls/__fstatfs64.S
|
syscall_src += arch-x86/syscalls/__fstatfs64.S
|
||||||
@ -34,7 +35,6 @@ syscall_src += arch-x86/syscalls/__timer_gettime.S
|
|||||||
syscall_src += arch-x86/syscalls/__timer_settime.S
|
syscall_src += arch-x86/syscalls/__timer_settime.S
|
||||||
syscall_src += arch-x86/syscalls/__waitid.S
|
syscall_src += arch-x86/syscalls/__waitid.S
|
||||||
syscall_src += arch-x86/syscalls/_exit.S
|
syscall_src += arch-x86/syscalls/_exit.S
|
||||||
syscall_src += arch-x86/syscalls/_exit_thread.S
|
|
||||||
syscall_src += arch-x86/syscalls/accept.S
|
syscall_src += arch-x86/syscalls/accept.S
|
||||||
syscall_src += arch-x86/syscalls/acct.S
|
syscall_src += arch-x86/syscalls/acct.S
|
||||||
syscall_src += arch-x86/syscalls/bind.S
|
syscall_src += arch-x86/syscalls/bind.S
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(_exit_thread)
|
ENTRY(__exit)
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
mov 8(%esp), %ebx
|
mov 8(%esp), %ebx
|
||||||
movl $__NR_exit, %eax
|
movl $__NR_exit, %eax
|
||||||
@ -19,4 +19,4 @@ ENTRY(_exit_thread)
|
|||||||
1:
|
1:
|
||||||
popl %ebx
|
popl %ebx
|
||||||
ret
|
ret
|
||||||
END(_exit_thread)
|
END(__exit)
|
@ -4,6 +4,7 @@ syscall_src += arch-x86_64/syscalls/__arch_prctl.S
|
|||||||
syscall_src += arch-x86_64/syscalls/__brk.S
|
syscall_src += arch-x86_64/syscalls/__brk.S
|
||||||
syscall_src += arch-x86_64/syscalls/__clone.S
|
syscall_src += arch-x86_64/syscalls/__clone.S
|
||||||
syscall_src += arch-x86_64/syscalls/__epoll_pwait.S
|
syscall_src += arch-x86_64/syscalls/__epoll_pwait.S
|
||||||
|
syscall_src += arch-x86_64/syscalls/__exit.S
|
||||||
syscall_src += arch-x86_64/syscalls/__getcpu.S
|
syscall_src += arch-x86_64/syscalls/__getcpu.S
|
||||||
syscall_src += arch-x86_64/syscalls/__getcwd.S
|
syscall_src += arch-x86_64/syscalls/__getcwd.S
|
||||||
syscall_src += arch-x86_64/syscalls/__getpriority.S
|
syscall_src += arch-x86_64/syscalls/__getpriority.S
|
||||||
@ -27,7 +28,6 @@ syscall_src += arch-x86_64/syscalls/__timer_gettime.S
|
|||||||
syscall_src += arch-x86_64/syscalls/__timer_settime.S
|
syscall_src += arch-x86_64/syscalls/__timer_settime.S
|
||||||
syscall_src += arch-x86_64/syscalls/__waitid.S
|
syscall_src += arch-x86_64/syscalls/__waitid.S
|
||||||
syscall_src += arch-x86_64/syscalls/_exit.S
|
syscall_src += arch-x86_64/syscalls/_exit.S
|
||||||
syscall_src += arch-x86_64/syscalls/_exit_thread.S
|
|
||||||
syscall_src += arch-x86_64/syscalls/accept.S
|
syscall_src += arch-x86_64/syscalls/accept.S
|
||||||
syscall_src += arch-x86_64/syscalls/acct.S
|
syscall_src += arch-x86_64/syscalls/acct.S
|
||||||
syscall_src += arch-x86_64/syscalls/bind.S
|
syscall_src += arch-x86_64/syscalls/bind.S
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(_exit_thread)
|
ENTRY(__exit)
|
||||||
movl $__NR_exit, %eax
|
movl $__NR_exit, %eax
|
||||||
syscall
|
syscall
|
||||||
cmpq $-MAX_ERRNO, %rax
|
cmpq $-MAX_ERRNO, %rax
|
||||||
@ -15,4 +15,5 @@ ENTRY(_exit_thread)
|
|||||||
orq $-1, %rax
|
orq $-1, %rax
|
||||||
1:
|
1:
|
||||||
ret
|
ret
|
||||||
END(_exit_thread)
|
END(__exit)
|
||||||
|
.hidden _C_LABEL(__exit)
|
@ -39,14 +39,14 @@ extern int __bionic_clone(unsigned long clone_flags,
|
|||||||
int (*fn)(void *),
|
int (*fn)(void *),
|
||||||
void *arg);
|
void *arg);
|
||||||
|
|
||||||
extern void _exit_thread(int status);
|
extern void __exit(int status);
|
||||||
|
|
||||||
/* this function is called from the __bionic_clone
|
/* this function is called from the __bionic_clone
|
||||||
* assembly fragment to call the thread function
|
* assembly fragment to call the thread function
|
||||||
* then exit. */
|
* then exit. */
|
||||||
extern void __bionic_clone_entry(int (*fn)(void*), void* arg) {
|
extern void __bionic_clone_entry(int (*fn)(void*), void* arg) {
|
||||||
int status = (*fn)(arg);
|
int status = (*fn)(arg);
|
||||||
_exit_thread(status);
|
__exit(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
int clone(int (*fn)(void*), void* child_stack, int flags, void* arg, ...) {
|
int clone(int (*fn)(void*), void* child_stack, int flags, void* arg, ...) {
|
||||||
|
@ -46,7 +46,7 @@ extern void pthread_debug_mutex_lock_check(pthread_mutex_t *mutex);
|
|||||||
extern void pthread_debug_mutex_unlock_check(pthread_mutex_t *mutex);
|
extern void pthread_debug_mutex_unlock_check(pthread_mutex_t *mutex);
|
||||||
|
|
||||||
extern void _exit_with_stack_teardown(void * stackBase, size_t stackSize, int status);
|
extern void _exit_with_stack_teardown(void * stackBase, size_t stackSize, int status);
|
||||||
extern void _exit_thread(int status);
|
extern void __exit(int status);
|
||||||
|
|
||||||
int __futex_wake_ex(volatile void *ftx, int pshared, int val)
|
int __futex_wake_ex(volatile void *ftx, int pshared, int val)
|
||||||
{
|
{
|
||||||
@ -148,7 +148,7 @@ void pthread_exit(void * retval)
|
|||||||
|
|
||||||
if (user_stack) {
|
if (user_stack) {
|
||||||
// Cleaning up this thread's stack is the creator's responsibility, not ours.
|
// Cleaning up this thread's stack is the creator's responsibility, not ours.
|
||||||
_exit_thread(0);
|
__exit(0);
|
||||||
} else {
|
} else {
|
||||||
// We need to munmap the stack we're running on before calling exit.
|
// We need to munmap the stack we're running on before calling exit.
|
||||||
// That's not something we can do in C.
|
// That's not something we can do in C.
|
||||||
|
@ -240,7 +240,6 @@ def add_footer(pointer_length, stub, syscall):
|
|||||||
stub += function_alias % { "func" : syscall["func"], "alias" : alias }
|
stub += function_alias % { "func" : syscall["func"], "alias" : alias }
|
||||||
|
|
||||||
# Use hidden visibility for any functions beginning with underscores.
|
# Use hidden visibility for any functions beginning with underscores.
|
||||||
# TODO: clean up single-underscore names too.
|
|
||||||
if pointer_length == 64 and syscall["func"].startswith("__"):
|
if pointer_length == 64 and syscall["func"].startswith("__"):
|
||||||
stub += '.hidden _C_LABEL(' + syscall["func"] + ')\n'
|
stub += '.hidden _C_LABEL(' + syscall["func"] + ')\n'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user