am cb43f847: Merge "Unify our assembler macros."

* commit 'cb43f8474dafd7a4d3eb605d4a7c7f69ad7cef2e':
  Unify our assembler macros.
This commit is contained in:
Elliott Hughes 2014-03-07 23:00:02 +00:00 committed by Android Git Automerger
commit 1fa1416bb8
94 changed files with 298 additions and 963 deletions

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(__get_sp) ENTRY(__get_sp)
mov r0, sp mov r0, sp

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
#include <machine/cpu-features.h> #include <machine/cpu-features.h>

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* Coding the abort function in assembly so that registers are guaranteed to * Coding the abort function in assembly so that registers are guaranteed to

View File

@ -27,7 +27,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#ifdef HAVE_32_BYTE_CACHE_LINE #ifdef HAVE_32_BYTE_CACHE_LINE

View File

@ -27,7 +27,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* Optimized memcmp16() for ARM9. * Optimized memcmp16() for ARM9.

View File

@ -27,7 +27,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#if defined(__ARM_NEON__) && !defined(ARCH_ARM_USE_NON_NEON_MEMCPY) #if defined(__ARM_NEON__) && !defined(ARCH_ARM_USE_NON_NEON_MEMCPY)

View File

@ -44,7 +44,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
.syntax unified .syntax unified
/* This implementation requires ARM state. */ /* This implementation requires ARM state. */

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
@ -112,7 +112,7 @@ ENTRY(longjmp)
add sp, sp, #4 /* unalign the stack */ add sp, sp, #4 /* unalign the stack */
.cfi_adjust_cfa_offset -4 .cfi_adjust_cfa_offset -4
ldmfd sp!, {r0, r1, r14} ldmfd sp!, {r0, r1, r14}
.cfi_def_cfa_offset 0 .cfi_def_cfa_offset 0
#ifdef __ARM_HAVE_VFP #ifdef __ARM_HAVE_VFP

View File

@ -35,7 +35,7 @@
#define _ALIGN_TEXT .align 0 #define _ALIGN_TEXT .align 0
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
/* /*

View File

@ -28,7 +28,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
.text .text

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
.syntax unified .syntax unified

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
.syntax unified .syntax unified

View File

@ -55,8 +55,8 @@
// Prototype: void *memcpy (void *dst, const void *src, size_t count). // Prototype: void *memcpy (void *dst, const void *src, size_t count).
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
.text .text
.syntax unified .syntax unified

View File

@ -27,8 +27,8 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
/* /*
* Optimized memset() for ARM. * Optimized memset() for ARM.

View File

@ -53,7 +53,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
.syntax unified .syntax unified

View File

@ -27,7 +27,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#ifdef __ARMEB__ #ifdef __ARMEB__
#define S2LOMEM lsl #define S2LOMEM lsl

View File

@ -53,7 +53,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
.syntax unified .syntax unified

View File

@ -53,7 +53,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
.syntax unified .syntax unified

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
.syntax unified .syntax unified
.fpu neon .fpu neon

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
.syntax unified .syntax unified
.fpu neon .fpu neon

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
/* /*
* This code assumes it is running on a processor that supports all arm v7 * This code assumes it is running on a processor that supports all arm v7

View File

@ -26,9 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/cpu-features.h> #include <private/bionic_asm.h>
#include <machine/asm.h> #include <private/libc_events.h>
#include "private/libc_events.h"
/* /*
* This code assumes it is running on a processor that supports all arm v7 * This code assumes it is running on a processor that supports all arm v7

View File

@ -53,7 +53,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
.syntax unified .syntax unified

View File

@ -27,7 +27,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#ifdef __ARMEB__ #ifdef __ARMEB__
#define S2LOMEM lsl #define S2LOMEM lsl

View File

@ -53,7 +53,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
.syntax unified .syntax unified

View File

@ -53,7 +53,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
.syntax unified .syntax unified

View File

@ -27,8 +27,8 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
/* /*
* Optimized memcpy() for ARM. * Optimized memcpy() for ARM.

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
/* /*
* Optimized memset() for ARM. * Optimized memset() for ARM.

View File

@ -28,7 +28,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
.text .text

View File

@ -30,7 +30,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(strcpy) ENTRY(strcpy)
pld [r1, #0] pld [r1, #0]

View File

@ -38,107 +38,22 @@
#ifndef _ARM32_ASM_H_ #ifndef _ARM32_ASM_H_
#define _ARM32_ASM_H_ #define _ARM32_ASM_H_
#ifdef __ELF__
# define _C_LABEL(x) x
#else
# ifdef __STDC__
# define _C_LABEL(x) _ ## x
# else
# define _C_LABEL(x) _/**/x
# endif
#endif
#define _ASM_LABEL(x) x
#ifdef __STDC__
# define __CONCAT(x,y) x ## y
# define __STRING(x) #x
#else
# define __CONCAT(x,y) x/**/y
# define __STRING(x) "x"
#endif
#ifndef _ALIGN_TEXT #ifndef _ALIGN_TEXT
# define _ALIGN_TEXT .align 0 # define _ALIGN_TEXT .align 0
#endif #endif
/* #undef __bionic_asm_custom_entry
* gas/arm uses @ as a single comment character and thus cannot be used here #undef __bionic_asm_custom_end
* Instead it recognised the # instead of an @ symbols in .type directives #define __bionic_asm_custom_entry(f) .fnstart
* We define a couple of macros so that assembly code will not be dependant #define __bionic_asm_custom_end(f) .fnend
* on one or the other.
*/
#define _ASM_TYPE_FUNCTION #function
#define _ASM_TYPE_OBJECT #object
#define _ENTRY(x) \
.text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x: .fnstart; .cfi_startproc;
#define _ASM_SIZE(x) .size x, .-x; #undef __bionic_asm_function_type
#define __bionic_asm_function_type #function
#define _END(x) \
.fnend; .cfi_endproc; \
_ASM_SIZE(x)
#ifdef GPROF
# ifdef __ELF__
# define _PROF_PROLOGUE \
mov ip, lr; bl __mcount
# else
# define _PROF_PROLOGUE \
mov ip,lr; bl mcount
# endif
#else
# define _PROF_PROLOGUE
#endif
#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
#define ENTRY_NP(y) _ENTRY(_C_LABEL(y))
#define END(y) _END(_C_LABEL(y))
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y))
#define ASEND(y) _END(_ASM_LABEL(y))
#ifdef __ELF__
#define ENTRY_PRIVATE(y) ENTRY(y); .hidden _C_LABEL(y)
#else
#define ENTRY_PRIVATE(y) ENTRY(y)
#endif
#define ASMSTR .asciz
#if defined(__ELF__) && defined(PIC) #if defined(__ELF__) && defined(PIC)
#ifdef __STDC__ #define PIC_SYM(x,y) x ## ( ## y ## )
#define PIC_SYM(x,y) x ## ( ## y ## )
#else #else
#define PIC_SYM(x,y) x/**/(/**/y/**/) #define PIC_SYM(x,y) x
#endif #endif
#else
#define PIC_SYM(x,y) x
#endif
#ifdef __ELF__
#define RCSID(x) .section ".ident"; .asciz x
#else
#define RCSID(x) .text; .asciz x
#endif
#ifdef __ELF__
#define WEAK_ALIAS(alias,sym) \
.weak alias; \
alias = sym
#endif
#ifdef __STDC__
#define WARN_REFERENCES(sym,msg) \
.stabs msg ## ,30,0,0,0 ; \
.stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0
#elif defined(__ELF__)
#define WARN_REFERENCES(sym,msg) \
.stabs msg,30,0,0,0 ; \
.stabs __STRING(sym),1,0,0,0
#else
#define WARN_REFERENCES(sym,msg) \
.stabs msg,30,0,0,0 ; \
.stabs __STRING(_/**/sym),1,0,0,0
#endif /* __STDC__ */
#endif /* !_ARM_ASM_H_ */ #endif /* !_ARM_ASM_H_ */

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
.syntax unified .syntax unified

View File

@ -26,8 +26,8 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
.syntax unified .syntax unified

View File

@ -28,8 +28,8 @@
/* Assumes neon instructions and a cache line size of 32 bytes. */ /* Assumes neon instructions and a cache line size of 32 bytes. */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
/* /*
* This code assumes it is running on a processor that supports all arm v7 * This code assumes it is running on a processor that supports all arm v7

View File

@ -27,8 +27,8 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#include "private/libc_events.h" #include <private/libc_events.h>
/* /*
* This code assumes it is running on a processor that supports all arm v7 * This code assumes it is running on a processor that supports all arm v7

View File

@ -27,7 +27,7 @@
*/ */
#include <machine/cpu-features.h> #include <machine/cpu-features.h>
#include <machine/asm.h> #include <private/bionic_asm.h>
#ifdef __ARMEB__ #ifdef __ARMEB__
#define S2LOMEM lsl #define S2LOMEM lsl

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(__get_sp) ENTRY(__get_sp)
mov x0, sp mov x0, sp

View File

@ -26,8 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
#include <machine/asm.h>
ENTRY_PRIVATE(__rt_sigreturn) ENTRY_PRIVATE(__rt_sigreturn)
mov x8, __NR_rt_sigreturn mov x8, __NR_rt_sigreturn

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
/* /*

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
/* /*

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
/* /*

View File

@ -38,91 +38,17 @@
#ifndef _AARCH64_ASM_H_ #ifndef _AARCH64_ASM_H_
#define _AARCH64_ASM_H_ #define _AARCH64_ASM_H_
/* TODO: Add cfi directives for creating/restoring FP */
#ifdef __ELF__
# define _C_LABEL(x) x
#else
# ifdef __STDC__
# define _C_LABEL(x) _ ## x
# else
# define _C_LABEL(x) _/**/x
# endif
#endif
#define _ASM_LABEL(x) x
#ifdef __STDC__
# define __CONCAT(x,y) x ## y
# define __STRING(x) #x
#else
# define __CONCAT(x,y) x/**/y
# define __STRING(x) "x"
#endif
#ifndef _ALIGN_TEXT #ifndef _ALIGN_TEXT
# define _ALIGN_TEXT .align 0 # define _ALIGN_TEXT .align 0
#endif #endif
#define _ASM_TYPE_FUNCTION %function #undef __bionic_asm_function_type
#define _ASM_TYPE_OBJECT %object #define __bionic_asm_function_type %function
#define _ENTRY(x) \
.text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x: .cfi_startproc
#define _ASM_SIZE(x) .size x, .-x;
#define _END(x) \
.cfi_endproc; \
_ASM_SIZE(x)
#define ENTRY(y) _ENTRY(_C_LABEL(y));
#define ENTRY_NP(y) _ENTRY(_C_LABEL(y))
#define END(y) _END(_C_LABEL(y))
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y))
#define ASEND(y) _END(_ASM_LABEL(y))
#ifdef __ELF__
#define ENTRY_PRIVATE(y) ENTRY(y); .hidden _C_LABEL(y)
#else
#define ENTRY_PRIVATE(y) ENTRY(y)
#endif
#define ASMSTR .asciz
#if defined(__ELF__) && defined(PIC) #if defined(__ELF__) && defined(PIC)
#ifdef __STDC__ #define PIC_SYM(x,y) x ## ( ## y ## )
#define PIC_SYM(x,y) x ## ( ## y ## )
#else #else
#define PIC_SYM(x,y) x/**/(/**/y/**/) #define PIC_SYM(x,y) x
#endif #endif
#else
#define PIC_SYM(x,y) x
#endif
#ifdef __ELF__
#define RCSID(x) .section ".ident"; .asciz x
#else
#define RCSID(x) .text; .asciz x
#endif
#ifdef __ELF__
#define WEAK_ALIAS(alias,sym) \
.weak alias; \
alias = sym
#endif
#ifdef __STDC__
#define WARN_REFERENCES(sym,msg) \
.stabs msg ## ,30,0,0,0 ; \
.stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0
#elif defined(__ELF__)
#define WARN_REFERENCES(sym,msg) \
.stabs msg,30,0,0,0 ; \
.stabs __STRING(sym),1,0,0,0
#else
#define WARN_REFERENCES(sym,msg) \
.stabs msg,30,0,0,0 ; \
.stabs __STRING(_/**/sym),1,0,0,0
#endif /* __STDC__ */
#endif /* _AARCH64_ASM_H_ */ #endif /* _AARCH64_ASM_H_ */

View File

@ -26,49 +26,43 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/sched.h> #include <linux/sched.h>
// pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg); // pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg);
.text ENTRY(__bionic_clone)
.type __bionic_clone, @function
.global __bionic_clone
.align 4
.ent __bionic_clone
__bionic_clone:
.set noreorder .set noreorder
.cpload $t9 .cpload t9
.set reorder .set reorder
# set up child stack # set up child stack
subu $a1,16 subu a1,16
lw $t0,20($sp) # fn lw t0,20(sp) # fn
lw $t1,24($sp) # arg lw t1,24(sp) # arg
sw $t0,0($a1) # fn sw t0,0(a1) # fn
sw $t1,4($a1) # arg sw t1,4(a1) # arg
# remainder of arguments are correct for clone system call # remainder of arguments are correct for clone system call
li $v0,__NR_clone li v0,__NR_clone
syscall syscall
bnez $a3,.L__error_bc bnez a3,.L__error_bc
beqz $v0,.L__thread_start_bc beqz v0,.L__thread_start_bc
j $ra j ra
.L__thread_start_bc: .L__thread_start_bc:
lw $a0,0($sp) # fn lw a0,0(sp) # fn
lw $a1,4($sp) # arg lw a1,4(sp) # arg
# void __bionic_clone_entry(int (*func)(void*), void *arg) # void __bionic_clone_entry(int (*func)(void*), void *arg)
la $t9,__bionic_clone_entry la t9,__bionic_clone_entry
j $t9 j t9
.L__error_bc: .L__error_bc:
move $a0,$v0 move a0,v0
la $t9,__set_errno la t9,__set_errno
j $t9 j t9
END(__bionic_clone)
.end __bionic_clone

View File

@ -25,15 +25,11 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
.text
/* void *__get_sp(void) */ #include <private/bionic_asm.h>
.type __get_sp, @function // void* __get_sp()
.global __get_sp ENTRY(__get_sp)
.align 4 move v0, sp
.ent __get_sp j ra
__get_sp: END(__get_sp)
move $v0, $sp
j $ra
.end __get_sp

View File

@ -26,23 +26,16 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
.text
// void _exit_with_stack_teardown(void* stackBase, size_t stackSize) // void _exit_with_stack_teardown(void* stackBase, size_t stackSize)
ENTRY(_exit_with_stack_teardown)
.type _exit_with_stack_teardown, @function li v0, __NR_munmap
.global _exit_with_stack_teardown
.align 4
.ent _exit_with_stack_teardown
_exit_with_stack_teardown:
li $v0, __NR_munmap
syscall syscall
// If munmap failed, we ignore the failure and exit anyway. // If munmap failed, we ignore the failure and exit anyway.
li $a0, 0 li a0, 0
li $v0, __NR_exit li v0, __NR_exit
syscall syscall
// The exit syscall does not return. // The exit syscall does not return.
.end _exit_with_stack_teardown END(_exit_with_stack_teardown)

View File

@ -2,7 +2,7 @@
/* /*
* Copyright (c) 2002 Opsycon AB (www.opsycon.se / www.opsycon.com) * Copyright (c) 2002 Opsycon AB (www.opsycon.se / www.opsycon.com)
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
@ -29,7 +29,7 @@
* *
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/regnum.h> #include <machine/regnum.h>
#include <machine/signal.h> #include <machine/signal.h>
@ -48,13 +48,13 @@ GPOFF= FRAMESZ-2*REGSZ
swc1 FPR, OFF(BASE) ; \ swc1 FPR, OFF(BASE) ; \
mfhc1 t0, FPR ; \ mfhc1 t0, FPR ; \
sw t0, OFF+4(BASE) ; sw t0, OFF+4(BASE) ;
#define FPREG64_L(FPR, OFF, BASE) \ #define FPREG64_L(FPR, OFF, BASE) \
lw t0, OFF+4(BASE) ; \ lw t0, OFF+4(BASE) ; \
lw t1, OFF(BASE) ; \ lw t1, OFF(BASE) ; \
mtc1 t1, FPR ; \ mtc1 t1, FPR ; \
mthc1 t0, FPR ; \ mthc1 t0, FPR ; \
LEAF(_setjmp, FRAMESZ) LEAF(_setjmp, FRAMESZ)
PTR_SUBU sp, FRAMESZ PTR_SUBU sp, FRAMESZ
SETUP_GP64(GPOFF, _setjmp) SETUP_GP64(GPOFF, _setjmp)
@ -185,4 +185,3 @@ botch:
RESTORE_GP64 RESTORE_GP64
PTR_ADDU sp, FRAMESZ PTR_ADDU sp, FRAMESZ
END(_longjmp) END(_longjmp)

View File

@ -25,21 +25,15 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
.text
/* #include <private/bionic_asm.h>
* void bzero(void *s, size_t n);
*/ // void bzero(void*, size_t);
.type bzero, @function ENTRY(bzero)
.global bzero
.align 4
.ent bzero
.set noreorder .set noreorder
bzero: .cpload t9
.cpload $t9 move a2,a1
move $a2,$a1 la t9,memset
la $t9,memset j t9
j $t9 move a1,zero
move $a1,$zero END(bzero)
.end bzero

View File

@ -32,11 +32,7 @@
#define FUTEX_WAKE 1 #define FUTEX_WAKE 1
// int __futex_wait(volatile void* ftx, int val, const struct timespec* timeout) // int __futex_wait(volatile void* ftx, int val, const struct timespec* timeout)
.type __futex_wait, @function ENTRY(__futex_wait)
.global __futex_wait
.align 4
.ent __futex_wait
__futex_wait:
subu sp,4*6 subu sp,4*6
sw $0,20(sp) /* val3 */ sw $0,20(sp) /* val3 */
sw $0,16(sp) /* addr2 */ sw $0,16(sp) /* addr2 */
@ -54,14 +50,10 @@ __futex_wait:
.set reorder .set reorder
addu sp,4*6 addu sp,4*6
j ra j ra
.end __futex_wait END(__futex_wait)
// int __futex_wake(volatile void* ftx, int count) // int __futex_wake(volatile void* ftx, int count)
.type __futex_wake, @function ENTRY(__futex_wake)
.globl __futex_wake
.align 4
.ent __futex_wake
__futex_wake:
subu sp,4*6 subu sp,4*6
sw $0,20(sp) /* val3 */ sw $0,20(sp) /* val3 */
sw $0,16(sp) /* addr2 */ sw $0,16(sp) /* addr2 */
@ -79,14 +71,10 @@ __futex_wake:
.set reorder .set reorder
addu sp,4*6 addu sp,4*6
j ra j ra
.end __futex_wake END(__futex_wake)
// int __futex_syscall3(volatile void* ftx, int op, int count) // int __futex_syscall3(volatile void* ftx, int op, int count)
.type __futex_syscall3, @function ENTRY(__futex_syscall3)
.global __futex_syscall3
.align 4
.ent __futex_syscall3
__futex_syscall3:
subu sp,4*6 subu sp,4*6
sw $0,20(sp) /* val3 */ sw $0,20(sp) /* val3 */
sw $0,16(sp) /* addr2 */ sw $0,16(sp) /* addr2 */
@ -104,14 +92,10 @@ __futex_syscall3:
.set reorder .set reorder
addu sp,4*6 addu sp,4*6
j ra j ra
.end __futex_syscall3 END(__futex_syscall3)
// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout) // int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout)
.type __futex_syscall4, @function ENTRY(__futex_syscall4)
.global __futex_syscall4
.align 4
.ent __futex_syscall4
__futex_syscall4:
subu sp,4*6 subu sp,4*6
sw $0,20(sp) /* val3 */ sw $0,20(sp) /* val3 */
sw $0,16(sp) /* addr2 */ sw $0,16(sp) /* addr2 */
@ -129,4 +113,4 @@ __futex_syscall4:
.set reorder .set reorder
addu sp,4*6 addu sp,4*6
j ra j ra
.end __futex_syscall4 END(__futex_syscall4)

View File

@ -25,31 +25,26 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
.text
/* #include <private/bionic_asm.h>
* u4 __memcmp16(const u2* s0, const u2* s1, size_t count);
*/ // u4 __memcmp16(const u2*, const u2*, size_t);
.type __memcmp16, @function ENTRY(__memcmp16)
.global __memcmp16 li t0,0
.align 4 li t1,0
.ent __memcmp16 beqz a2,done /* 0 length string */
__memcmp16: beq a0,a1,done /* strings are identical */
li $t0,0
li $t1,0
beqz $a2,done /* 0 length string */
beq $a0,$a1,done /* strings are identical */
/* Unoptimised... */ /* Unoptimised... */
1: lhu $t0,0($a0) 1: lhu t0,0(a0)
lhu $t1,0($a1) lhu t1,0(a1)
addu $a1,2 addu a1,2
bne $t0,$t1,done bne t0,t1,done
addu $a0,2 addu a0,2
subu $a2,1 subu a2,1
bnez $a2,1b bnez a2,1b
done: done:
subu $v0,$t0,$t1 subu v0,t0,t1
j $ra j ra
.end __memcmp16 END(__memcmp16)

View File

@ -29,7 +29,7 @@
* *
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/regnum.h> #include <machine/regnum.h>
#include <machine/signal.h> #include <machine/signal.h>
@ -49,13 +49,13 @@ RAOFF= FRAMESZ-1*REGSZ
swc1 FPR, OFF(BASE) ; \ swc1 FPR, OFF(BASE) ; \
mfhc1 t0, FPR ; \ mfhc1 t0, FPR ; \
sw t0, OFF+4(BASE) ; sw t0, OFF+4(BASE) ;
#define FPREG64_L(FPR, OFF, BASE) \ #define FPREG64_L(FPR, OFF, BASE) \
lw t0, OFF+4(BASE) ; \ lw t0, OFF+4(BASE) ; \
lw t1, OFF(BASE) ; \ lw t1, OFF(BASE) ; \
mtc1 t1, FPR ; \ mtc1 t1, FPR ; \
mthc1 t0, FPR ; \ mthc1 t0, FPR ; \
NON_LEAF(setjmp, FRAMESZ, ra) NON_LEAF(setjmp, FRAMESZ, ra)
.mask 0x80000000, RAOFF .mask 0x80000000, RAOFF
PTR_SUBU sp, FRAMESZ # allocate stack frame PTR_SUBU sp, FRAMESZ # allocate stack frame
@ -154,7 +154,7 @@ LEAF(longjmp, FRAMESZ)
lw a0, A0OFF(sp) lw a0, A0OFF(sp)
lw a1, A1OFF(sp) lw a1, A1OFF(sp)
.set noreorder .set noreorder
REG_L v0, SC_REGS+ZERO*REGSZ(a0) REG_L v0, SC_REGS+ZERO*REGSZ(a0)
bne v0, 0xACEDBADE, botch # jump if error bne v0, 0xACEDBADE, botch # jump if error
REG_L ra, SC_PC(a0) REG_L ra, SC_PC(a0)
@ -169,9 +169,9 @@ LEAF(longjmp, FRAMESZ)
REG_L s8, SC_REGS+S8*REGSZ(a0) REG_L s8, SC_REGS+S8*REGSZ(a0)
REG_L gp, SC_REGS+GP*REGSZ(a0) REG_L gp, SC_REGS+GP*REGSZ(a0)
REG_L sp, SC_REGS+SP*REGSZ(a0) REG_L sp, SC_REGS+SP*REGSZ(a0)
#if !defined(SOFTFLOAT) #if !defined(SOFTFLOAT)
REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0) REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0)
ctc1 v0, $31 ctc1 v0, $31
#if _MIPS_FPSET == 32 #if _MIPS_FPSET == 32
FPREG64_L($f20, SC_FPREGS+((F20-F0)*REGSZ_FP), a0) FPREG64_L($f20, SC_FPREGS+((F20-F0)*REGSZ_FP), a0)

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/regnum.h> #include <machine/regnum.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>

View File

@ -26,11 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
.text
.globl syscall
.align 4
.ent syscall
/* /*
* The caller is only required to allocate 16 bytes of stack for a0-a3. * The caller is only required to allocate 16 bytes of stack for a0-a3.
@ -38,28 +34,28 @@
*/ */
#define STACKSIZE 2*4 #define STACKSIZE 2*4
syscall: ENTRY(syscall)
.set noreorder .set noreorder
.cpload $t9 .cpload t9
move $v0, $a0 move v0, a0
move $a0, $a1 move a0, a1
move $a1, $a2 move a1, a2
move $a2, $a3 move a2, a3
lw $a3, 16($sp) lw a3, 16(sp)
lw $t0, 20($sp) lw t0, 20(sp)
lw $t1, 24($sp) lw t1, 24(sp)
subu $sp, STACKSIZE subu sp, STACKSIZE
sw $t0, 16($sp) sw t0, 16(sp)
sw $t1, 20($sp) sw t1, 20(sp)
syscall syscall
addu $sp, STACKSIZE addu sp, STACKSIZE
bnez $a3, 1f bnez a3, 1f
move $a0, $v0 move a0, v0
j $ra j ra
nop nop
1: 1:
la $t9,__set_errno la t9,__set_errno
j $t9 j t9
nop nop
.set reorder .set reorder
.end syscall END(syscall)

View File

@ -26,39 +26,33 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
#include <linux/sched.h> #include <linux/sched.h>
// TODO: mips' uapi signal.h is missing #ifndef __ASSEMBLY__. // TODO: mips' uapi signal.h is missing #ifndef __ASSEMBLY__.
// #include <asm/signal.h> // #include <asm/signal.h>
#define SIGCHLD 18 #define SIGCHLD 18
.text ENTRY(vfork)
.type vfork, @function
.global vfork
.align 4
.ent vfork
vfork:
.set noreorder .set noreorder
.cpload $t9 .cpload t9
li $a0, (CLONE_VM | CLONE_VFORK | SIGCHLD) li a0, (CLONE_VM | CLONE_VFORK | SIGCHLD)
li $a1, 0 li a1, 0
li $a2, 0 li a2, 0
li $a3, 0 li a3, 0
subu $sp, 8 subu sp, 8
sw $0, 16($sp) sw $0, 16(sp)
li $v0, __NR_clone li v0, __NR_clone
syscall syscall
addu $sp, 8 addu sp, 8
bnez $a3, 1f bnez a3, 1f
move $a0, $v0 move a0, v0
j $ra j ra
nop nop
1: 1:
la $t9, __set_errno la t9, __set_errno
j $t9 j t9
nop nop
.end vfork END(vfork)

View File

@ -28,25 +28,24 @@
#ifndef _MIPS64_ASM_H #ifndef _MIPS64_ASM_H
#define _MIPS64_ASM_H #define _MIPS64_ASM_H
#include <machine/regdef.h> #ifndef _ALIGN_TEXT
# define _ALIGN_TEXT .align 4
#ifdef NEED_OLD_RM7KFIX
#define ITLBNOPFIX nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
#else
#define ITLBNOPFIX nop;nop;nop;nop
#endif #endif
#undef __bionic_asm_custom_entry
#undef __bionic_asm_custom_end
#define __bionic_asm_custom_entry(f) .ent f
#define __bionic_asm_custom_end(f) .end f
#include <machine/regdef.h>
#define _MIPS_ISA_MIPS1 1 /* R2000/R3000 */ #define _MIPS_ISA_MIPS1 1 /* R2000/R3000 */
#define _MIPS_ISA_MIPS2 2 /* R4000/R6000 */ #define _MIPS_ISA_MIPS2 2 /* R4000/R6000 */
#define _MIPS_ISA_MIPS3 3 /* R4000 */ #define _MIPS_ISA_MIPS3 3 /* R4000 */
#define _MIPS_ISA_MIPS4 4 /* TFP (R1x000) */ #define _MIPS_ISA_MIPS4 4 /* TFP (R1x000) */
#ifdef __linux__
#define _MIPS_ISA_MIPS5 5 #define _MIPS_ISA_MIPS5 5
#define _MIPS_ISA_MIPS32 6 #define _MIPS_ISA_MIPS32 6
#define _MIPS_ISA_MIPS64 7 #define _MIPS_ISA_MIPS64 7
#else
#define _MIPS_ISA_MIPS32 32 /* MIPS32 */
#endif
#if !defined(ABICALLS) && !defined(_NO_ABICALLS) #if !defined(ABICALLS) && !defined(_NO_ABICALLS)
#define ABICALLS .abicalls #define ABICALLS .abicalls
@ -56,8 +55,6 @@
ABICALLS ABICALLS
#endif #endif
#define _C_LABEL(x) x /* XXX Obsolete but keep for a while */
#if !defined(__MIPSEL__) && !defined(__MIPSEB__) #if !defined(__MIPSEL__) && !defined(__MIPSEB__)
#error "__MIPSEL__ or __MIPSEB__ must be defined" #error "__MIPSEL__ or __MIPSEB__ must be defined"
#endif #endif
@ -90,15 +87,6 @@
*/ */
#if defined(ABICALLS) && !defined(_KERNEL) && !defined(_STANDALONE) #if defined(ABICALLS) && !defined(_KERNEL) && !defined(_STANDALONE)
#ifndef _MIPS_SIM
#define _MIPS_SIM 1
#define _ABIO32 1
#endif
#ifndef _MIPS_ISA
#define _MIPS_ISA 2
#define _MIPS_ISA_MIPS2 2
#endif
#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) #if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32)
#define NARGSAVE 4 #define NARGSAVE 4
@ -151,7 +139,7 @@
#define CF_RA_OFFS 20 /* Call ra save offset */ #define CF_RA_OFFS 20 /* Call ra save offset */
#endif #endif
#if (_MIPS_ISA == _MIPS_ISA_MIPS3 || _MIPS_ISA == _MIPS_ISA_MIPS4) #if (_MIPS_ISA == _MIPS_ISA_MIPS3 || _MIPS_ISA == _MIPS_ISA_MIPS4 || _MIPS_ISA == _MIPS_ISA_MIPS64)
#define REGSZ 8 /* 64 bit mode register size */ #define REGSZ 8 /* 64 bit mode register size */
#define LOGREGSZ 3 /* log rsize */ #define LOGREGSZ 3 /* log rsize */
#define REG_S sd #define REG_S sd
@ -189,28 +177,6 @@
#define PTR_VAL .dword #define PTR_VAL .dword
#endif #endif
/*
* Define -pg profile entry code.
*/
#if defined(XGPROF) || defined(XPROF)
#define MCOUNT \
PTR_SUBU sp, sp, 32; \
SAVE_GP(16); \
sw ra, 28(sp); \
sw gp, 24(sp); \
.set noat; \
.set noreorder; \
move AT, ra; \
jal _mcount; \
PTR_SUBU sp, sp, 8; \
lw ra, 28(sp); \
PTR_ADDU sp, sp, 32; \
.set reorder; \
.set at;
#else
#define MCOUNT
#endif
/* /*
* LEAF(x, fsize) * LEAF(x, fsize)
* *
@ -221,26 +187,9 @@
.globl x; \ .globl x; \
.ent x, 0; \ .ent x, 0; \
x: ; \ x: ; \
.cfi_startproc; \
.frame sp, fsize, ra; \ .frame sp, fsize, ra; \
SETUP_GP \ SETUP_GP \
MCOUNT
#define ALEAF(x) \
.globl x; \
x:
/*
* NLEAF(x)
*
* Declare a non-profiled leaf routine.
*/
#define NLEAF(x, fsize) \
.align 3; \
.globl x; \
.ent x, 0; \
x: ; \
.frame sp, fsize, ra; \
SETUP_GP
/* /*
* NON_LEAF(x) * NON_LEAF(x)
@ -252,54 +201,8 @@ x: ; \
.globl x; \ .globl x; \
.ent x, 0; \ .ent x, 0; \
x: ; \ x: ; \
.cfi_startproc; \
.frame sp, fsize, retpc; \ .frame sp, fsize, retpc; \
SETUP_GP \ SETUP_GP \
MCOUNT
/*
* NNON_LEAF(x)
*
* Declare a non-profiled non-leaf routine
* (a routine that makes other C calls).
*/
#define NNON_LEAF(x, fsize, retpc) \
.align 3; \
.globl x; \
.ent x, 0; \
x: ; \
.frame sp, fsize, retpc \
SETUP_GP
/*
* END(x)
*
* Mark end of a procedure.
*/
#define END(x) \
.end x
/*
* Macros to panic and printf from assembly language.
*/
#define PANIC(msg) \
LA a0, 9f; \
jal panic; \
nop ; \
MSG(msg)
#define PRINTF(msg) \
la a0, 9f; \
jal printf; \
nop ; \
MSG(msg)
#define MSG(msg) \
.rdata; \
9: .asciiz msg; \
.text
#define ASMSTR(str) \
.asciiz str; \
.align 3
#endif /* !_MIPS_ASM_H */ #endif /* !_MIPS_ASM_H */

View File

@ -37,8 +37,6 @@
#ifndef _MIPS_SIGNAL_H_ #ifndef _MIPS_SIGNAL_H_
#define _MIPS_SIGNAL_H_ #define _MIPS_SIGNAL_H_
#include <machine/asm.h>
#define SC_REGMASK (0*REGSZ) #define SC_REGMASK (0*REGSZ)
#define SC_STATUS (1*REGSZ) #define SC_STATUS (1*REGSZ)
#define SC_PC (2*REGSZ) #define SC_PC (2*REGSZ)

View File

@ -39,13 +39,13 @@
* Include files * Include files
************************************************************************/ ************************************************************************/
#include "machine/asm.h" #include <private/bionic_asm.h>
/* /*
* This routine could be optimized for MIPS64. The current code only * This routine could be optimized for MIPS64. The current code only
* uses MIPS32 instructions. * uses MIPS32 instructions.
*/ */
#if defined(__MIPSEB__) #if defined(__MIPSEB__)
# define LWHI lwl /* high part is left in big-endian */ # define LWHI lwl /* high part is left in big-endian */
# define SWHI swl /* high part is left in big-endian */ # define SWHI swl /* high part is left in big-endian */

View File

@ -39,12 +39,12 @@
* Include files * Include files
************************************************************************/ ************************************************************************/
#include "machine/asm.h" #include <private/bionic_asm.h>
/* /*
* This routine could be optimized for MIPS64. The current code only * This routine could be optimized for MIPS64. The current code only
* uses MIPS32 instructions. * uses MIPS32 instructions.
*/ */
#if defined(__MIPSEB__) #if defined(__MIPSEB__)
# define SWHI swl /* high part is left in big-endian */ # define SWHI swl /* high part is left in big-endian */
@ -220,7 +220,7 @@ LEAF(memset,0)
sw a1,-36(a0) sw a1,-36(a0)
nop nop
nop # the extra nop instructions help to balance nop # the extra nop instructions help to balance
nop # cycles needed for "store" + "fill" + "evict" nop # cycles needed for "store" + "fill" + "evict"
nop # For 64byte store there are needed 8 fill nop # For 64byte store there are needed 8 fill
nop # and 8 evict cycles, i.e. at least 32 instr. nop # and 8 evict cycles, i.e. at least 32 instr.
nop nop
@ -320,4 +320,3 @@ END(memset)
/************************************************************************ /************************************************************************
* Implementation : Static functions * Implementation : Static functions
************************************************************************/ ************************************************************************/

View File

@ -26,8 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <asm/unistd.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/sched.h> #include <linux/sched.h>
@ -43,8 +42,7 @@ FRAME_FN = FRAMESZ-3*REGSZ
#endif #endif
// pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg); // pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg);
.text LEAF(__bionic_clone, FRAMESZ)
LEAF(__bionic_clone,FRAMESZ)
PTR_SUBU sp, FRAMESZ # allocate stack frame PTR_SUBU sp, FRAMESZ # allocate stack frame
SETUP_GP64(FRAME_GP,__bionic_clone) SETUP_GP64(FRAME_GP,__bionic_clone)
SAVE_GP(FRAME_GP) SAVE_GP(FRAME_GP)

View File

@ -25,15 +25,10 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
.text
/* void *__get_sp(void) */ #include <private/bionic_asm.h>
.type __get_sp, @function ENTRY(__get_sp)
.global __get_sp move v0, sp
.align 4 j ra
.ent __get_sp END(__get_sp)
__get_sp:
move $v0, $sp
j $ra
.end __get_sp

View File

@ -26,23 +26,16 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
.text
// void _exit_with_stack_teardown(void* stackBase, size_t stackSize) // void _exit_with_stack_teardown(void* stackBase, size_t stackSize)
ENTRY(_exit_with_stack_teardown)
li v0, __NR_munmap
syscall
// If munmap failed, we ignore the failure and exit anyway.
.type _exit_with_stack_teardown, @function li a0, 0
.global _exit_with_stack_teardown li v0, __NR_exit
.align 4 syscall
.ent _exit_with_stack_teardown // The exit syscall does not return.
_exit_with_stack_teardown: END(_exit_with_stack_teardown)
li $v0, __NR_munmap
syscall
// If munmap failed, we ignore the failure and exit anyway.
li $a0, 0
li $v0, __NR_exit
syscall
// The exit syscall does not return.
.end _exit_with_stack_teardown

View File

@ -2,7 +2,7 @@
/* /*
* Copyright (c) 2002 Opsycon AB (www.opsycon.se / www.opsycon.com) * Copyright (c) 2002 Opsycon AB (www.opsycon.se / www.opsycon.com)
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
@ -29,7 +29,7 @@
* *
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/regnum.h> #include <machine/regnum.h>
#include <machine/signal.h> #include <machine/signal.h>
@ -48,13 +48,13 @@ GPOFF= FRAMESZ-2*REGSZ
swc1 FPR, OFF(BASE) ; \ swc1 FPR, OFF(BASE) ; \
mfhc1 t0, FPR ; \ mfhc1 t0, FPR ; \
sw t0, OFF+4(BASE) ; sw t0, OFF+4(BASE) ;
#define FPREG64_L(FPR, OFF, BASE) \ #define FPREG64_L(FPR, OFF, BASE) \
lw t0, OFF+4(BASE) ; \ lw t0, OFF+4(BASE) ; \
lw t1, OFF(BASE) ; \ lw t1, OFF(BASE) ; \
mtc1 t1, FPR ; \ mtc1 t1, FPR ; \
mthc1 t0, FPR ; \ mthc1 t0, FPR ; \
LEAF(_setjmp, FRAMESZ) LEAF(_setjmp, FRAMESZ)
PTR_SUBU sp, FRAMESZ PTR_SUBU sp, FRAMESZ
SETUP_GP64(GPOFF, _setjmp) SETUP_GP64(GPOFF, _setjmp)
@ -185,4 +185,3 @@ botch:
RESTORE_GP64 RESTORE_GP64
PTR_ADDU sp, FRAMESZ PTR_ADDU sp, FRAMESZ
END(_longjmp) END(_longjmp)

View File

@ -25,9 +25,8 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
.text
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* void bzero(void *s, size_t n); * void bzero(void *s, size_t n);
@ -40,4 +39,3 @@ LEAF(bzero,0)
RESTORE_GP64 RESTORE_GP64
j t9 j t9
END(bzero) END(bzero)

View File

@ -27,7 +27,7 @@
*/ */
.text .text
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* u4 __memcmp16(const u2* s0, const u2* s1, size_t count); * u4 __memcmp16(const u2* s0, const u2* s1, size_t count);

View File

@ -29,7 +29,7 @@
* *
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/regnum.h> #include <machine/regnum.h>
#include <machine/signal.h> #include <machine/signal.h>
@ -49,13 +49,13 @@ RAOFF= FRAMESZ-1*REGSZ
swc1 FPR, OFF(BASE) ; \ swc1 FPR, OFF(BASE) ; \
mfhc1 t0, FPR ; \ mfhc1 t0, FPR ; \
sw t0, OFF+4(BASE) ; sw t0, OFF+4(BASE) ;
#define FPREG64_L(FPR, OFF, BASE) \ #define FPREG64_L(FPR, OFF, BASE) \
lw t0, OFF+4(BASE) ; \ lw t0, OFF+4(BASE) ; \
lw t1, OFF(BASE) ; \ lw t1, OFF(BASE) ; \
mtc1 t1, FPR ; \ mtc1 t1, FPR ; \
mthc1 t0, FPR ; \ mthc1 t0, FPR ; \
NON_LEAF(setjmp, FRAMESZ, ra) NON_LEAF(setjmp, FRAMESZ, ra)
.mask 0x80000000, RAOFF .mask 0x80000000, RAOFF
PTR_SUBU sp, FRAMESZ # allocate stack frame PTR_SUBU sp, FRAMESZ # allocate stack frame
@ -154,7 +154,7 @@ LEAF(longjmp, FRAMESZ)
lw a0, A0OFF(sp) lw a0, A0OFF(sp)
lw a1, A1OFF(sp) lw a1, A1OFF(sp)
.set noreorder .set noreorder
REG_L v0, SC_REGS+ZERO*REGSZ(a0) REG_L v0, SC_REGS+ZERO*REGSZ(a0)
bne v0, 0xACEDBADE, botch # jump if error bne v0, 0xACEDBADE, botch # jump if error
REG_L ra, SC_PC(a0) REG_L ra, SC_PC(a0)
@ -169,9 +169,9 @@ LEAF(longjmp, FRAMESZ)
REG_L s8, SC_REGS+S8*REGSZ(a0) REG_L s8, SC_REGS+S8*REGSZ(a0)
REG_L gp, SC_REGS+GP*REGSZ(a0) REG_L gp, SC_REGS+GP*REGSZ(a0)
REG_L sp, SC_REGS+SP*REGSZ(a0) REG_L sp, SC_REGS+SP*REGSZ(a0)
#if !defined(SOFTFLOAT) #if !defined(SOFTFLOAT)
REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0) REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0)
ctc1 v0, $31 ctc1 v0, $31
#if _MIPS_FPSET == 32 #if _MIPS_FPSET == 32
FPREG64_L($f20, SC_FPREGS+((F20-F0)*REGSZ_FP), a0) FPREG64_L($f20, SC_FPREGS+((F20-F0)*REGSZ_FP), a0)

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/regnum.h> #include <machine/regnum.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>

View File

@ -26,8 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <asm/unistd.h>
#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) #if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32)
FRAMESZ = MKFSIZ(6,0) FRAMESZ = MKFSIZ(6,0)

View File

@ -26,8 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <asm/unistd.h>
#include <linux/sched.h> #include <linux/sched.h>
// TODO: mips' uapi signal.h is missing #ifndef __ASSEMBLY__. // TODO: mips' uapi signal.h is missing #ifndef __ASSEMBLY__.
@ -46,7 +45,7 @@ LEAF(vfork,FRAMESZ)
#if FRAMESZ!=0 #if FRAMESZ!=0
PTR_SUBU sp, FRAMESZ PTR_SUBU sp, FRAMESZ
#endif #endif
SETUP_GP64(a5,vfork) SETUP_GP64(a5, vfork)
LI a0, (CLONE_VM | CLONE_VFORK | SIGCHLD) LI a0, (CLONE_VM | CLONE_VFORK | SIGCHLD)
move a1, $0 move a1, $0
move a2, $0 move a2, $0

View File

@ -28,25 +28,24 @@
#ifndef _MIPS64_ASM_H #ifndef _MIPS64_ASM_H
#define _MIPS64_ASM_H #define _MIPS64_ASM_H
#include <machine/regdef.h> #ifndef _ALIGN_TEXT
# define _ALIGN_TEXT .align 4
#ifdef NEED_OLD_RM7KFIX
#define ITLBNOPFIX nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
#else
#define ITLBNOPFIX nop;nop;nop;nop
#endif #endif
#undef __bionic_asm_custom_entry
#undef __bionic_asm_custom_end
#define __bionic_asm_custom_entry(f) .ent f
#define __bionic_asm_custom_end(f) .end f
#include <machine/regdef.h>
#define _MIPS_ISA_MIPS1 1 /* R2000/R3000 */ #define _MIPS_ISA_MIPS1 1 /* R2000/R3000 */
#define _MIPS_ISA_MIPS2 2 /* R4000/R6000 */ #define _MIPS_ISA_MIPS2 2 /* R4000/R6000 */
#define _MIPS_ISA_MIPS3 3 /* R4000 */ #define _MIPS_ISA_MIPS3 3 /* R4000 */
#define _MIPS_ISA_MIPS4 4 /* TFP (R1x000) */ #define _MIPS_ISA_MIPS4 4 /* TFP (R1x000) */
#ifdef __linux__
#define _MIPS_ISA_MIPS5 5 #define _MIPS_ISA_MIPS5 5
#define _MIPS_ISA_MIPS32 6 #define _MIPS_ISA_MIPS32 6
#define _MIPS_ISA_MIPS64 7 #define _MIPS_ISA_MIPS64 7
#else
#define _MIPS_ISA_MIPS32 32 /* MIPS32 */
#endif
#if !defined(ABICALLS) && !defined(_NO_ABICALLS) #if !defined(ABICALLS) && !defined(_NO_ABICALLS)
#define ABICALLS .abicalls #define ABICALLS .abicalls
@ -56,8 +55,6 @@
ABICALLS ABICALLS
#endif #endif
#define _C_LABEL(x) x /* XXX Obsolete but keep for a while */
#if !defined(__MIPSEL__) && !defined(__MIPSEB__) #if !defined(__MIPSEL__) && !defined(__MIPSEB__)
#error "__MIPSEL__ or __MIPSEB__ must be defined" #error "__MIPSEL__ or __MIPSEB__ must be defined"
#endif #endif
@ -90,15 +87,6 @@
*/ */
#if defined(ABICALLS) && !defined(_KERNEL) && !defined(_STANDALONE) #if defined(ABICALLS) && !defined(_KERNEL) && !defined(_STANDALONE)
#ifndef _MIPS_SIM
#define _MIPS_SIM 1
#define _ABIO32 1
#endif
#ifndef _MIPS_ISA
#define _MIPS_ISA 2
#define _MIPS_ISA_MIPS2 2
#endif
#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) #if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32)
#define NARGSAVE 4 #define NARGSAVE 4
@ -189,28 +177,6 @@
#define PTR_VAL .dword #define PTR_VAL .dword
#endif #endif
/*
* Define -pg profile entry code.
*/
#if defined(XGPROF) || defined(XPROF)
#define MCOUNT \
PTR_SUBU sp, sp, 64; \
SAVE_GP(16); \
sd ra, 56(sp); \
sd gp, 48(sp); \
.set noat; \
.set noreorder; \
move AT, ra; \
jal _mcount; \
PTR_SUBU sp, sp, 16; \
ld ra, 56(sp); \
PTR_ADDU sp, sp, 64; \
.set reorder; \
.set at;
#else
#define MCOUNT
#endif
/* /*
* LEAF(x, fsize) * LEAF(x, fsize)
* *
@ -221,26 +187,9 @@
.globl x; \ .globl x; \
.ent x, 0; \ .ent x, 0; \
x: ; \ x: ; \
.cfi_startproc; \
.frame sp, fsize, ra; \ .frame sp, fsize, ra; \
SETUP_GP \ SETUP_GP \
MCOUNT
#define ALEAF(x) \
.globl x; \
x:
/*
* NLEAF(x)
*
* Declare a non-profiled leaf routine.
*/
#define NLEAF(x, fsize) \
.align 3; \
.globl x; \
.ent x, 0; \
x: ; \
.frame sp, fsize, ra; \
SETUP_GP
/* /*
* NON_LEAF(x) * NON_LEAF(x)
@ -252,54 +201,8 @@ x: ; \
.globl x; \ .globl x; \
.ent x, 0; \ .ent x, 0; \
x: ; \ x: ; \
.cfi_startproc; \
.frame sp, fsize, retpc; \ .frame sp, fsize, retpc; \
SETUP_GP \ SETUP_GP \
MCOUNT
/*
* NNON_LEAF(x)
*
* Declare a non-profiled non-leaf routine
* (a routine that makes other C calls).
*/
#define NNON_LEAF(x, fsize, retpc) \
.align 3; \
.globl x; \
.ent x, 0; \
x: ; \
.frame sp, fsize, retpc \
SETUP_GP
/*
* END(x)
*
* Mark end of a procedure.
*/
#define END(x) \
.end x
/*
* Macros to panic and printf from assembly language.
*/
#define PANIC(msg) \
LA a0, 9f; \
jal panic; \
nop ; \
MSG(msg)
#define PRINTF(msg) \
LA a0, 9f; \
jal printf; \
nop ; \
MSG(msg)
#define MSG(msg) \
.rdata; \
9: .asciiz msg; \
.text
#define ASMSTR(str) \
.asciiz str; \
.align 3
#endif /* !_MIPS_ASM_H */ #endif /* !_MIPS_ASM_H */

View File

@ -37,8 +37,6 @@
#ifndef _MIPS_SIGNAL_H_ #ifndef _MIPS_SIGNAL_H_
#define _MIPS_SIGNAL_H_ #define _MIPS_SIGNAL_H_
#include <machine/asm.h>
#define SC_REGMASK (0*REGSZ) #define SC_REGMASK (0*REGSZ)
#define SC_STATUS (1*REGSZ) #define SC_STATUS (1*REGSZ)
#define SC_PC (2*REGSZ) #define SC_PC (2*REGSZ)

View File

@ -39,13 +39,13 @@
* Include files * Include files
************************************************************************/ ************************************************************************/
#include "machine/asm.h" #include <private/bionic_asm.h>
/* /*
* This routine could be optimized for MIPS64. The current code only * This routine could be optimized for MIPS64. The current code only
* uses MIPS32 instructions. * uses MIPS32 instructions.
*/ */
#if defined(__MIPSEB__) #if defined(__MIPSEB__)
# define LWHI lwl /* high part is left in big-endian */ # define LWHI lwl /* high part is left in big-endian */
# define SWHI swl /* high part is left in big-endian */ # define SWHI swl /* high part is left in big-endian */

View File

@ -39,12 +39,12 @@
* Include files * Include files
************************************************************************/ ************************************************************************/
#include "machine/asm.h" #include <private/bionic_asm.h>
/* /*
* This routine could be optimized for MIPS64. The current code only * This routine could be optimized for MIPS64. The current code only
* uses MIPS32 instructions. * uses MIPS32 instructions.
*/ */
#if defined(__MIPSEB__) #if defined(__MIPSEB__)
# define SWHI swl /* high part is left in big-endian */ # define SWHI swl /* high part is left in big-endian */
@ -220,7 +220,7 @@ LEAF(memset,0)
sw a1,-36(a0) sw a1,-36(a0)
nop nop
nop # the extra nop instructions help to balance nop # the extra nop instructions help to balance
nop # cycles needed for "store" + "fill" + "evict" nop # cycles needed for "store" + "fill" + "evict"
nop # For 64byte store there are needed 8 fill nop # For 64byte store there are needed 8 fill
nop # and 8 evict cycles, i.e. at least 32 instr. nop # and 8 evict cycles, i.e. at least 32 instr.
nop nop
@ -320,4 +320,3 @@ END(memset)
/************************************************************************ /************************************************************************
* Implementation : Static functions * Implementation : Static functions
************************************************************************/ ************************************************************************/

View File

@ -1,5 +1,4 @@
#include <asm/unistd.h> #include <private/bionic_asm.h>
#include <machine/asm.h>
// pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg); // pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg);
ENTRY(__bionic_clone) ENTRY(__bionic_clone)

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(__get_sp) ENTRY(__get_sp)
mov %esp, %eax mov %esp, %eax

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* C library -- _setjmp, _longjmp * C library -- _setjmp, _longjmp

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* C library -- setjmp, longjmp * C library -- setjmp, longjmp

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(sigsetjmp) ENTRY(sigsetjmp)
movl 4(%esp),%ecx movl 4(%esp),%ecx

View File

@ -37,10 +37,6 @@
#ifndef _I386_ASM_H_ #ifndef _I386_ASM_H_
#define _I386_ASM_H_ #define _I386_ASM_H_
#ifdef _KERNEL_OPT
#include "opt_multiprocessor.h"
#endif
#ifdef PIC #ifdef PIC
#define PIC_PROLOGUE \ #define PIC_PROLOGUE \
pushl %ebx; \ pushl %ebx; \
@ -61,27 +57,6 @@
#define PIC_GOTOFF(x) x #define PIC_GOTOFF(x) x
#endif #endif
#ifdef __ELF__
# define _C_LABEL(x) x
#else
# ifdef __STDC__
# define _C_LABEL(x) _ ## x
# else
# define _C_LABEL(x) _/**/x
# endif
#endif
#define _ASM_LABEL(x) x
#define CVAROFF(x, y) _C_LABEL(x) + y
#ifdef __STDC__
# define __CONCAT(x,y) x ## y
# define __STRING(x) #x
#else
# define __CONCAT(x,y) x/**/y
# define __STRING(x) "x"
#endif
/* let kernels and others override entrypoint alignment */ /* let kernels and others override entrypoint alignment */
#if !defined(_ALIGN_TEXT) && !defined(_KERNEL) #if !defined(_ALIGN_TEXT) && !defined(_KERNEL)
# ifdef _STANDALONE # ifdef _STANDALONE
@ -93,126 +68,4 @@
# endif # endif
#endif #endif
#define _ENTRY(x) \
.text; _ALIGN_TEXT; .globl x; .type x,@function; x: .cfi_startproc;
#define _LABEL(x) \
.globl x; x:
#ifdef _KERNEL
#define CPUVAR(off) %fs:__CONCAT(CPU_INFO_,off)
/* XXX Can't use __CONCAT() here, as it would be evaluated incorrectly. */
#ifdef __ELF__
#ifdef __STDC__
#define IDTVEC(name) \
ALIGN_TEXT; .globl X ## name; .type X ## name,@function; X ## name:
#define IDTVEC_END(name) \
.size X ## name, . - X ## name
#else
#define IDTVEC(name) \
ALIGN_TEXT; .globl X/**/name; .type X/**/name,@function; X/**/name:
#define IDTVEC_END(name) \
.size X/**/name, . - X/**/name
#endif /* __STDC__ */
#else
#ifdef __STDC__
#define IDTVEC(name) \
ALIGN_TEXT; .globl _X ## name; .type _X ## name,@function; _X ## name:
#define IDTVEC_END(name) \
.size _X ## name, . - _X ## name
#else
#define IDTVEC(name) \
ALIGN_TEXT; .globl _X/**/name; .type _X/**/name,@function; _X/**/name:
#define IDTVEC_END(name) \
.size _X/**/name, . - _X/**/name
#endif /* __STDC__ */
#endif /* __ELF__ */
#ifdef _STANDALONE
#define ALIGN_DATA .align 4
#define ALIGN_TEXT .align 4 /* 4-byte boundaries */
#define SUPERALIGN_TEXT .align 16 /* 15-byte boundaries */
#elif defined __ELF__
#define ALIGN_DATA .align 4
#define ALIGN_TEXT .align 16 /* 16-byte boundaries */
#define SUPERALIGN_TEXT .align 16 /* 16-byte boundaries */
#else
#define ALIGN_DATA .align 2
#define ALIGN_TEXT .align 4 /* 16-byte boundaries */
#define SUPERALIGN_TEXT .align 4 /* 16-byte boundaries */
#endif /* __ELF__ */
#define _ALIGN_TEXT ALIGN_TEXT
#ifdef GPROF
#ifdef __ELF__
#define MCOUNT_ASM call _C_LABEL(__mcount)
#else /* __ELF__ */
#define MCOUNT_ASM call _C_LABEL(mcount)
#endif /* __ELF__ */
#else /* GPROF */
#define MCOUNT_ASM /* nothing */
#endif /* GPROF */
#endif /* _KERNEL */
#ifdef GPROF
# ifdef __ELF__
# define _PROF_PROLOGUE \
pushl %ebp; movl %esp,%ebp; call PIC_PLT(__mcount); popl %ebp
# else
# define _PROF_PROLOGUE \
pushl %ebp; movl %esp,%ebp; call PIC_PLT(mcount); popl %ebp
# endif
#else
# define _PROF_PROLOGUE
#endif
#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
#define NENTRY(y) _ENTRY(_C_LABEL(y))
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
#define LABEL(y) _LABEL(_C_LABEL(y))
#define END(y) .cfi_endproc; .size y, . - y
#define ASMSTR .asciz
#ifdef __ELF__
#define RCSID(x) .pushsection ".ident"; .asciz x; .popsection
#else
#define RCSID(x) .text; .asciz x
#endif
#ifdef NO_KERNEL_RCSIDS
#define __KERNEL_RCSID(_n, _s) /* nothing */
#else
#define __KERNEL_RCSID(_n, _s) RCSID(_s)
#endif
#ifdef __ELF__
#define WEAK_ALIAS(alias,sym) \
.weak alias; \
alias = sym
#endif
/*
* STRONG_ALIAS: create a strong alias.
*/
#define STRONG_ALIAS(alias,sym) \
.globl alias; \
alias = sym
#ifdef __STDC__
#define WARN_REFERENCES(sym,msg) \
.pushsection .gnu.warning. ## sym; \
.ascii msg; \
.popsection
#else
#define WARN_REFERENCES(sym,msg) \
.pushsection .gnu.warning./**/sym; \
.ascii msg; \
.popsection
#endif /* __STDC__ */
#endif /* !_I386_ASM_H_ */ #endif /* !_I386_ASM_H_ */

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* (ov)bcopy (src,dst,cnt) * (ov)bcopy (src,dst,cnt)

View File

@ -4,7 +4,7 @@
* Public domain. * Public domain.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(memcmp) ENTRY(memcmp)
pushl %edi pushl %edi

View File

@ -4,7 +4,7 @@
* Public domain. * Public domain.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#if defined(APIWARN) #if defined(APIWARN)
#APP #APP

View File

@ -4,7 +4,7 @@
* Public domain. * Public domain.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* NOTE: I've unrolled the loop eight times: large enough to make a * NOTE: I've unrolled the loop eight times: large enough to make a

View File

@ -4,7 +4,7 @@
* Public domain. * Public domain.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* NOTE: I've unrolled the loop eight times: large enough to make a * NOTE: I've unrolled the loop eight times: large enough to make a

View File

@ -4,7 +4,7 @@
* Public domain. * Public domain.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
/* /*
* On the i486, this code is negligibly faster than the code generated * On the i486, this code is negligibly faster than the code generated

View File

@ -26,8 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
#include <machine/asm.h>
// pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg); // pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg);
ENTRY(__bionic_clone) ENTRY(__bionic_clone)

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(__get_sp) ENTRY(__get_sp)
mov %rsp, %rax mov %rsp, %rax

View File

@ -26,11 +26,9 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <asm/unistd.h> #include <private/bionic_asm.h>
#include <machine/asm.h>
ENTRY(__rt_sigreturn) ENTRY_PRIVATE(__rt_sigreturn)
.hidden _C_LABEL(__rt_sigreturn) // TODO: add an ENTRY_PRIVATE macro for x86_64.
movl $__NR_rt_sigreturn, %eax movl $__NR_rt_sigreturn, %eax
syscall syscall
END(__rt_sigreturn) END(__rt_sigreturn)

View File

@ -36,8 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <private/bionic_asm.h>
#include <machine/asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
/* /*

View File

@ -36,8 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <private/bionic_asm.h>
#include <machine/asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
/* /*

View File

@ -37,7 +37,7 @@
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#include <machine/setjmp.h> #include <machine/setjmp.h>
/* /*

View File

@ -37,8 +37,6 @@
#ifndef _AMD64_ASM_H_ #ifndef _AMD64_ASM_H_
#define _AMD64_ASM_H_ #define _AMD64_ASM_H_
#ifdef __x86_64__
#ifdef __PIC__ #ifdef __PIC__
#define PIC_PLT(x) x@PLT #define PIC_PLT(x) x@PLT
#define PIC_GOT(x) x@GOTPCREL(%rip) #define PIC_GOT(x) x@GOTPCREL(%rip)
@ -47,19 +45,6 @@
#define PIC_GOT(x) x #define PIC_GOT(x) x
#endif #endif
# define _C_LABEL(x) x
#define _ASM_LABEL(x) x
#define CVAROFF(x,y) (_C_LABEL(x)+y)(%rip)
#ifdef __STDC__
# define __CONCAT(x,y) x ## y
# define __STRING(x) #x
#else
# define __CONCAT(x,y) x/**/y
# define __STRING(x) "x"
#endif
/* let kernels and others override entrypoint alignment */ /* let kernels and others override entrypoint alignment */
#ifndef _ALIGN_TEXT #ifndef _ALIGN_TEXT
# ifdef _STANDALONE # ifdef _STANDALONE
@ -69,78 +54,4 @@
# endif # endif
#endif #endif
#define _ENTRY(x) \
.text; _ALIGN_TEXT; .globl x; .type x,@function; x: .cfi_startproc;
#define _LABEL(x) \
.globl x; x:
#ifdef _KERNEL
/* XXX Can't use __CONCAT() here, as it would be evaluated incorrectly. */
#ifdef __STDC__
#define IDTVEC(name) \
ALIGN_TEXT; .globl X ## name; .type X ## name,@function; X ## name:
#define IDTVEC_END(name) \
.size X ## name, . - X ## name
#else
#define IDTVEC(name) \
ALIGN_TEXT; .globl X/**/name; .type X/**/name,@function; X/**/name:
#define IDTVEC_END(name) \
.size X/**/name, . - X/**/name
#endif /* __STDC__ */
#endif /* _KERNEL */
#ifdef __STDC__
#define CPUVAR(off) %gs:CPU_INFO_ ## off
#else
#define CPUVAR(off) %gs:CPU_INFO_/**/off
#endif
#ifdef GPROF
# define _PROF_PROLOGUE \
pushq %rbp; leaq (%rsp),%rbp; call PIC_PLT(__mcount); popq %rbp
#else
# define _PROF_PROLOGUE
#endif
#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
#define NENTRY(y) _ENTRY(_C_LABEL(y))
#define ALTENTRY(x) NENTRY(x)
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
#define LABEL(y) _LABEL(_C_LABEL(y))
#define END(y) .cfi_endproc; .size y, . - y
#define ASMSTR .asciz
#define RCSID(x) .pushsection ".ident"; .asciz x; .popsection
#define WEAK_ALIAS(alias,sym) \
.weak alias; \
alias = sym
/*
* STRONG_ALIAS: create a strong alias.
*/
#define STRONG_ALIAS(alias,sym) \
.globl alias; \
alias = sym
#ifdef __STDC__
#define WARN_REFERENCES(sym,msg) \
.pushsection .gnu.warning. ## sym; \
.ascii msg; \
.popsection
#else
#define WARN_REFERENCES(sym,msg) \
.pushsection .gnu.warning./**/sym; \
.ascii msg; \
.popsection
#endif /* __STDC__ */
#else /* __x86_64__ */
#include <i386/asm.h>
#endif /* __x86_64__ */
#endif /* !_AMD64_ASM_H_ */ #endif /* !_AMD64_ASM_H_ */

View File

@ -29,20 +29,32 @@
#ifndef _PRIVATE_BIONIC_ASM_H_ #ifndef _PRIVATE_BIONIC_ASM_H_
#define _PRIVATE_BIONIC_ASM_H_ #define _PRIVATE_BIONIC_ASM_H_
#include <machine/asm.h>
#include <asm/unistd.h> /* For system call numbers. */ #include <asm/unistd.h> /* For system call numbers. */
#define MAX_ERRNO 4095 /* For recognizing system call error returns. */ #define MAX_ERRNO 4095 /* For recognizing system call error returns. */
#if __mips__ #define __bionic_asm_custom_entry(f)
/* mips/mips64 don't have ENTRY like the others. */ #define __bionic_asm_custom_end(f)
#define ENTRY(f) .text; .globl f; .align 4; .type f, @function; .ent f; f: .cfi_startproc #define __bionic_asm_function_type @function
/* mips/mips64 do have END, but we want a better one, more like the others. */
#undef END
#define END(f) .cfi_endproc; .size f, .-f; .end f
#endif
/* TODO: add ENTRY_PRIVATE. */ #include <machine/asm.h>
/* TODO: add ASM_ALIAS macro. */
#define ENTRY(f) \
.text; \
.globl f; \
_ALIGN_TEXT; \
.type f, __bionic_asm_function_type; \
f: \
__bionic_asm_custom_entry(f); \
.cfi_startproc \
#define END(f) \
.cfi_endproc; \
.size f, .-f; \
__bionic_asm_custom_end(f) \
/* Like ENTRY, but with hidden visibility. */
#define ENTRY_PRIVATE(f) \
ENTRY(f); \
.hidden f \
#endif /* _PRIVATE_BIONIC_ASM_H_ */ #endif /* _PRIVATE_BIONIC_ASM_H_ */

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(_start) ENTRY(_start)
mov x0, sp mov x0, sp

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) #if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32)
#define ELF_DYNSZ 8 #define ELF_DYNSZ 8

View File

@ -26,7 +26,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <machine/asm.h> #include <private/bionic_asm.h>
ENTRY(_start) ENTRY(_start)
/* Pass elfdata to __linker_init. */ /* Pass elfdata to __linker_init. */