Merge "Unify our assembler macros."
This commit is contained in:
commit
cb43f8474d
94 changed files with 298 additions and 963 deletions
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(__get_sp)
|
||||
mov r0, sp
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* Coding the abort function in assembly so that registers are guaranteed to
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
|
||||
#ifdef HAVE_32_BYTE_CACHE_LINE
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* Optimized memcmp16() for ARM9.
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#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)
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.syntax unified
|
||||
/* This implementation requires ARM state. */
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
|
@ -112,7 +112,7 @@ ENTRY(longjmp)
|
|||
|
||||
add sp, sp, #4 /* unalign the stack */
|
||||
.cfi_adjust_cfa_offset -4
|
||||
ldmfd sp!, {r0, r1, r14}
|
||||
ldmfd sp!, {r0, r1, r14}
|
||||
.cfi_def_cfa_offset 0
|
||||
|
||||
#ifdef __ARM_HAVE_VFP
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
#define _ALIGN_TEXT .align 0
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.text
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -55,8 +55,8 @@
|
|||
|
||||
// Prototype: void *memcpy (void *dst, const void *src, size_t count).
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
.text
|
||||
.syntax unified
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
/*
|
||||
* Optimized memset() for ARM.
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
#ifdef __ARMEB__
|
||||
#define S2LOMEM lsl
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
.syntax unified
|
||||
.fpu neon
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
.syntax unified
|
||||
.fpu neon
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
/*
|
||||
* This code assumes it is running on a processor that supports all arm v7
|
||||
|
|
|
@ -26,9 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
/*
|
||||
* This code assumes it is running on a processor that supports all arm v7
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
#ifdef __ARMEB__
|
||||
#define S2LOMEM lsl
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
/*
|
||||
* Optimized memcpy() for ARM.
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
/*
|
||||
* Optimized memset() for ARM.
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.text
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(strcpy)
|
||||
pld [r1, #0]
|
||||
|
|
|
@ -38,107 +38,22 @@
|
|||
#ifndef _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
|
||||
# define _ALIGN_TEXT .align 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* gas/arm uses @ as a single comment character and thus cannot be used here
|
||||
* Instead it recognised the # instead of an @ symbols in .type directives
|
||||
* We define a couple of macros so that assembly code will not be dependant
|
||||
* 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;
|
||||
#undef __bionic_asm_custom_entry
|
||||
#undef __bionic_asm_custom_end
|
||||
#define __bionic_asm_custom_entry(f) .fnstart
|
||||
#define __bionic_asm_custom_end(f) .fnend
|
||||
|
||||
#define _ASM_SIZE(x) .size x, .-x;
|
||||
|
||||
#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
|
||||
#undef __bionic_asm_function_type
|
||||
#define __bionic_asm_function_type #function
|
||||
|
||||
#if defined(__ELF__) && defined(PIC)
|
||||
#ifdef __STDC__
|
||||
#define PIC_SYM(x,y) x ## ( ## y ## )
|
||||
#define PIC_SYM(x,y) x ## ( ## y ## )
|
||||
#else
|
||||
#define PIC_SYM(x,y) x/**/(/**/y/**/)
|
||||
#define PIC_SYM(x,y) x
|
||||
#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_ */
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
|
||||
/* Assumes neon instructions and a cache line size of 32 bytes. */
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
/*
|
||||
* This code assumes it is running on a processor that supports all arm v7
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include "private/libc_events.h"
|
||||
#include <private/bionic_asm.h>
|
||||
#include <private/libc_events.h>
|
||||
|
||||
/*
|
||||
* This code assumes it is running on a processor that supports all arm v7
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
#ifdef __ARMEB__
|
||||
#define S2LOMEM lsl
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(__get_sp)
|
||||
mov x0, sp
|
||||
|
|
|
@ -26,8 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY_PRIVATE(__rt_sigreturn)
|
||||
mov x8, __NR_rt_sigreturn
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -38,91 +38,17 @@
|
|||
#ifndef _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
|
||||
# define _ALIGN_TEXT .align 0
|
||||
# define _ALIGN_TEXT .align 0
|
||||
#endif
|
||||
|
||||
#define _ASM_TYPE_FUNCTION %function
|
||||
#define _ASM_TYPE_OBJECT %object
|
||||
#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
|
||||
#undef __bionic_asm_function_type
|
||||
#define __bionic_asm_function_type %function
|
||||
|
||||
#if defined(__ELF__) && defined(PIC)
|
||||
#ifdef __STDC__
|
||||
#define PIC_SYM(x,y) x ## ( ## y ## )
|
||||
#define PIC_SYM(x,y) x ## ( ## y ## )
|
||||
#else
|
||||
#define PIC_SYM(x,y) x/**/(/**/y/**/)
|
||||
#define PIC_SYM(x,y) x
|
||||
#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_ */
|
||||
|
||||
|
|
|
@ -26,49 +26,43 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <linux/errno.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);
|
||||
.text
|
||||
.type __bionic_clone, @function
|
||||
.global __bionic_clone
|
||||
.align 4
|
||||
.ent __bionic_clone
|
||||
__bionic_clone:
|
||||
ENTRY(__bionic_clone)
|
||||
.set noreorder
|
||||
.cpload $t9
|
||||
.cpload t9
|
||||
.set reorder
|
||||
|
||||
# set up child stack
|
||||
subu $a1,16
|
||||
lw $t0,20($sp) # fn
|
||||
lw $t1,24($sp) # arg
|
||||
sw $t0,0($a1) # fn
|
||||
sw $t1,4($a1) # arg
|
||||
subu a1,16
|
||||
lw t0,20(sp) # fn
|
||||
lw t1,24(sp) # arg
|
||||
sw t0,0(a1) # fn
|
||||
sw t1,4(a1) # arg
|
||||
|
||||
# remainder of arguments are correct for clone system call
|
||||
li $v0,__NR_clone
|
||||
li v0,__NR_clone
|
||||
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:
|
||||
lw $a0,0($sp) # fn
|
||||
lw $a1,4($sp) # arg
|
||||
lw a0,0(sp) # fn
|
||||
lw a1,4(sp) # arg
|
||||
|
||||
# void __bionic_clone_entry(int (*func)(void*), void *arg)
|
||||
la $t9,__bionic_clone_entry
|
||||
j $t9
|
||||
la t9,__bionic_clone_entry
|
||||
j t9
|
||||
|
||||
.L__error_bc:
|
||||
move $a0,$v0
|
||||
la $t9,__set_errno
|
||||
j $t9
|
||||
|
||||
.end __bionic_clone
|
||||
move a0,v0
|
||||
la t9,__set_errno
|
||||
j t9
|
||||
END(__bionic_clone)
|
||||
|
|
|
@ -25,15 +25,11 @@
|
|||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
.text
|
||||
|
||||
/* void *__get_sp(void) */
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.type __get_sp, @function
|
||||
.global __get_sp
|
||||
.align 4
|
||||
.ent __get_sp
|
||||
__get_sp:
|
||||
move $v0, $sp
|
||||
j $ra
|
||||
.end __get_sp
|
||||
// void* __get_sp()
|
||||
ENTRY(__get_sp)
|
||||
move v0, sp
|
||||
j ra
|
||||
END(__get_sp)
|
||||
|
|
|
@ -26,23 +26,16 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
|
||||
.text
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
// void _exit_with_stack_teardown(void* stackBase, size_t stackSize)
|
||||
|
||||
.type _exit_with_stack_teardown, @function
|
||||
.global _exit_with_stack_teardown
|
||||
.align 4
|
||||
.ent _exit_with_stack_teardown
|
||||
_exit_with_stack_teardown:
|
||||
li $v0, __NR_munmap
|
||||
ENTRY(_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
|
||||
li a0, 0
|
||||
li v0, __NR_exit
|
||||
syscall
|
||||
// The exit syscall does not return.
|
||||
.end _exit_with_stack_teardown
|
||||
END(_exit_with_stack_teardown)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2002 Opsycon AB (www.opsycon.se / www.opsycon.com)
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
|
@ -29,7 +29,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/regnum.h>
|
||||
#include <machine/signal.h>
|
||||
|
||||
|
@ -48,13 +48,13 @@ GPOFF= FRAMESZ-2*REGSZ
|
|||
swc1 FPR, OFF(BASE) ; \
|
||||
mfhc1 t0, FPR ; \
|
||||
sw t0, OFF+4(BASE) ;
|
||||
|
||||
|
||||
#define FPREG64_L(FPR, OFF, BASE) \
|
||||
lw t0, OFF+4(BASE) ; \
|
||||
lw t1, OFF(BASE) ; \
|
||||
mtc1 t1, FPR ; \
|
||||
mthc1 t0, FPR ; \
|
||||
|
||||
|
||||
LEAF(_setjmp, FRAMESZ)
|
||||
PTR_SUBU sp, FRAMESZ
|
||||
SETUP_GP64(GPOFF, _setjmp)
|
||||
|
@ -185,4 +185,3 @@ botch:
|
|||
RESTORE_GP64
|
||||
PTR_ADDU sp, FRAMESZ
|
||||
END(_longjmp)
|
||||
|
||||
|
|
|
@ -25,21 +25,15 @@
|
|||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
.text
|
||||
|
||||
/*
|
||||
* void bzero(void *s, size_t n);
|
||||
*/
|
||||
.type bzero, @function
|
||||
.global bzero
|
||||
.align 4
|
||||
.ent bzero
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
// void bzero(void*, size_t);
|
||||
ENTRY(bzero)
|
||||
.set noreorder
|
||||
bzero:
|
||||
.cpload $t9
|
||||
move $a2,$a1
|
||||
la $t9,memset
|
||||
j $t9
|
||||
move $a1,$zero
|
||||
.end bzero
|
||||
|
||||
.cpload t9
|
||||
move a2,a1
|
||||
la t9,memset
|
||||
j t9
|
||||
move a1,zero
|
||||
END(bzero)
|
||||
|
|
|
@ -32,11 +32,7 @@
|
|||
#define FUTEX_WAKE 1
|
||||
|
||||
// int __futex_wait(volatile void* ftx, int val, const struct timespec* timeout)
|
||||
.type __futex_wait, @function
|
||||
.global __futex_wait
|
||||
.align 4
|
||||
.ent __futex_wait
|
||||
__futex_wait:
|
||||
ENTRY(__futex_wait)
|
||||
subu sp,4*6
|
||||
sw $0,20(sp) /* val3 */
|
||||
sw $0,16(sp) /* addr2 */
|
||||
|
@ -54,14 +50,10 @@ __futex_wait:
|
|||
.set reorder
|
||||
addu sp,4*6
|
||||
j ra
|
||||
.end __futex_wait
|
||||
END(__futex_wait)
|
||||
|
||||
// int __futex_wake(volatile void* ftx, int count)
|
||||
.type __futex_wake, @function
|
||||
.globl __futex_wake
|
||||
.align 4
|
||||
.ent __futex_wake
|
||||
__futex_wake:
|
||||
ENTRY(__futex_wake)
|
||||
subu sp,4*6
|
||||
sw $0,20(sp) /* val3 */
|
||||
sw $0,16(sp) /* addr2 */
|
||||
|
@ -79,14 +71,10 @@ __futex_wake:
|
|||
.set reorder
|
||||
addu sp,4*6
|
||||
j ra
|
||||
.end __futex_wake
|
||||
END(__futex_wake)
|
||||
|
||||
// int __futex_syscall3(volatile void* ftx, int op, int count)
|
||||
.type __futex_syscall3, @function
|
||||
.global __futex_syscall3
|
||||
.align 4
|
||||
.ent __futex_syscall3
|
||||
__futex_syscall3:
|
||||
ENTRY(__futex_syscall3)
|
||||
subu sp,4*6
|
||||
sw $0,20(sp) /* val3 */
|
||||
sw $0,16(sp) /* addr2 */
|
||||
|
@ -104,14 +92,10 @@ __futex_syscall3:
|
|||
.set reorder
|
||||
addu sp,4*6
|
||||
j ra
|
||||
.end __futex_syscall3
|
||||
END(__futex_syscall3)
|
||||
|
||||
// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout)
|
||||
.type __futex_syscall4, @function
|
||||
.global __futex_syscall4
|
||||
.align 4
|
||||
.ent __futex_syscall4
|
||||
__futex_syscall4:
|
||||
ENTRY(__futex_syscall4)
|
||||
subu sp,4*6
|
||||
sw $0,20(sp) /* val3 */
|
||||
sw $0,16(sp) /* addr2 */
|
||||
|
@ -129,4 +113,4 @@ __futex_syscall4:
|
|||
.set reorder
|
||||
addu sp,4*6
|
||||
j ra
|
||||
.end __futex_syscall4
|
||||
END(__futex_syscall4)
|
||||
|
|
|
@ -25,31 +25,26 @@
|
|||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
.text
|
||||
|
||||
/*
|
||||
* u4 __memcmp16(const u2* s0, const u2* s1, size_t count);
|
||||
*/
|
||||
.type __memcmp16, @function
|
||||
.global __memcmp16
|
||||
.align 4
|
||||
.ent __memcmp16
|
||||
__memcmp16:
|
||||
li $t0,0
|
||||
li $t1,0
|
||||
beqz $a2,done /* 0 length string */
|
||||
beq $a0,$a1,done /* strings are identical */
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
// u4 __memcmp16(const u2*, const u2*, size_t);
|
||||
ENTRY(__memcmp16)
|
||||
li t0,0
|
||||
li t1,0
|
||||
beqz a2,done /* 0 length string */
|
||||
beq a0,a1,done /* strings are identical */
|
||||
|
||||
/* Unoptimised... */
|
||||
1: lhu $t0,0($a0)
|
||||
lhu $t1,0($a1)
|
||||
addu $a1,2
|
||||
bne $t0,$t1,done
|
||||
addu $a0,2
|
||||
subu $a2,1
|
||||
bnez $a2,1b
|
||||
1: lhu t0,0(a0)
|
||||
lhu t1,0(a1)
|
||||
addu a1,2
|
||||
bne t0,t1,done
|
||||
addu a0,2
|
||||
subu a2,1
|
||||
bnez a2,1b
|
||||
|
||||
done:
|
||||
subu $v0,$t0,$t1
|
||||
j $ra
|
||||
.end __memcmp16
|
||||
subu v0,t0,t1
|
||||
j ra
|
||||
END(__memcmp16)
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/regnum.h>
|
||||
#include <machine/signal.h>
|
||||
|
||||
|
@ -49,13 +49,13 @@ RAOFF= FRAMESZ-1*REGSZ
|
|||
swc1 FPR, OFF(BASE) ; \
|
||||
mfhc1 t0, FPR ; \
|
||||
sw t0, OFF+4(BASE) ;
|
||||
|
||||
|
||||
#define FPREG64_L(FPR, OFF, BASE) \
|
||||
lw t0, OFF+4(BASE) ; \
|
||||
lw t1, OFF(BASE) ; \
|
||||
mtc1 t1, FPR ; \
|
||||
mthc1 t0, FPR ; \
|
||||
|
||||
|
||||
NON_LEAF(setjmp, FRAMESZ, ra)
|
||||
.mask 0x80000000, RAOFF
|
||||
PTR_SUBU sp, FRAMESZ # allocate stack frame
|
||||
|
@ -154,7 +154,7 @@ LEAF(longjmp, FRAMESZ)
|
|||
lw a0, A0OFF(sp)
|
||||
lw a1, A1OFF(sp)
|
||||
|
||||
.set noreorder
|
||||
.set noreorder
|
||||
REG_L v0, SC_REGS+ZERO*REGSZ(a0)
|
||||
bne v0, 0xACEDBADE, botch # jump if error
|
||||
REG_L ra, SC_PC(a0)
|
||||
|
@ -169,9 +169,9 @@ LEAF(longjmp, FRAMESZ)
|
|||
REG_L s8, SC_REGS+S8*REGSZ(a0)
|
||||
REG_L gp, SC_REGS+GP*REGSZ(a0)
|
||||
REG_L sp, SC_REGS+SP*REGSZ(a0)
|
||||
|
||||
|
||||
#if !defined(SOFTFLOAT)
|
||||
REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0)
|
||||
REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0)
|
||||
ctc1 v0, $31
|
||||
#if _MIPS_FPSET == 32
|
||||
FPREG64_L($f20, SC_FPREGS+((F20-F0)*REGSZ_FP), a0)
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/regnum.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
|
|
|
@ -26,11 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
.text
|
||||
.globl syscall
|
||||
.align 4
|
||||
.ent syscall
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* The caller is only required to allocate 16 bytes of stack for a0-a3.
|
||||
|
@ -38,28 +34,28 @@
|
|||
*/
|
||||
#define STACKSIZE 2*4
|
||||
|
||||
syscall:
|
||||
ENTRY(syscall)
|
||||
.set noreorder
|
||||
.cpload $t9
|
||||
move $v0, $a0
|
||||
move $a0, $a1
|
||||
move $a1, $a2
|
||||
move $a2, $a3
|
||||
lw $a3, 16($sp)
|
||||
lw $t0, 20($sp)
|
||||
lw $t1, 24($sp)
|
||||
subu $sp, STACKSIZE
|
||||
sw $t0, 16($sp)
|
||||
sw $t1, 20($sp)
|
||||
.cpload t9
|
||||
move v0, a0
|
||||
move a0, a1
|
||||
move a1, a2
|
||||
move a2, a3
|
||||
lw a3, 16(sp)
|
||||
lw t0, 20(sp)
|
||||
lw t1, 24(sp)
|
||||
subu sp, STACKSIZE
|
||||
sw t0, 16(sp)
|
||||
sw t1, 20(sp)
|
||||
syscall
|
||||
addu $sp, STACKSIZE
|
||||
bnez $a3, 1f
|
||||
move $a0, $v0
|
||||
j $ra
|
||||
addu sp, STACKSIZE
|
||||
bnez a3, 1f
|
||||
move a0, v0
|
||||
j ra
|
||||
nop
|
||||
1:
|
||||
la $t9,__set_errno
|
||||
j $t9
|
||||
la t9,__set_errno
|
||||
j t9
|
||||
nop
|
||||
.set reorder
|
||||
.end syscall
|
||||
END(syscall)
|
||||
|
|
|
@ -26,39 +26,33 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
// TODO: mips' uapi signal.h is missing #ifndef __ASSEMBLY__.
|
||||
// #include <asm/signal.h>
|
||||
#define SIGCHLD 18
|
||||
|
||||
.text
|
||||
|
||||
.type vfork, @function
|
||||
.global vfork
|
||||
.align 4
|
||||
.ent vfork
|
||||
vfork:
|
||||
ENTRY(vfork)
|
||||
.set noreorder
|
||||
.cpload $t9
|
||||
.cpload t9
|
||||
|
||||
li $a0, (CLONE_VM | CLONE_VFORK | SIGCHLD)
|
||||
li $a1, 0
|
||||
li $a2, 0
|
||||
li $a3, 0
|
||||
subu $sp, 8
|
||||
sw $0, 16($sp)
|
||||
li $v0, __NR_clone
|
||||
li a0, (CLONE_VM | CLONE_VFORK | SIGCHLD)
|
||||
li a1, 0
|
||||
li a2, 0
|
||||
li a3, 0
|
||||
subu sp, 8
|
||||
sw $0, 16(sp)
|
||||
li v0, __NR_clone
|
||||
syscall
|
||||
addu $sp, 8
|
||||
bnez $a3, 1f
|
||||
move $a0, $v0
|
||||
addu sp, 8
|
||||
bnez a3, 1f
|
||||
move a0, v0
|
||||
|
||||
j $ra
|
||||
j ra
|
||||
nop
|
||||
1:
|
||||
la $t9, __set_errno
|
||||
j $t9
|
||||
la t9, __set_errno
|
||||
j t9
|
||||
nop
|
||||
.end vfork
|
||||
END(vfork)
|
||||
|
|
|
@ -28,25 +28,24 @@
|
|||
#ifndef _MIPS64_ASM_H
|
||||
#define _MIPS64_ASM_H
|
||||
|
||||
#include <machine/regdef.h>
|
||||
|
||||
#ifdef NEED_OLD_RM7KFIX
|
||||
#define ITLBNOPFIX nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
|
||||
#else
|
||||
#define ITLBNOPFIX nop;nop;nop;nop
|
||||
#ifndef _ALIGN_TEXT
|
||||
# define _ALIGN_TEXT .align 4
|
||||
#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_MIPS2 2 /* R4000/R6000 */
|
||||
#define _MIPS_ISA_MIPS3 3 /* R4000 */
|
||||
#define _MIPS_ISA_MIPS4 4 /* TFP (R1x000) */
|
||||
#ifdef __linux__
|
||||
#define _MIPS_ISA_MIPS5 5
|
||||
#define _MIPS_ISA_MIPS32 6
|
||||
#define _MIPS_ISA_MIPS64 7
|
||||
#else
|
||||
#define _MIPS_ISA_MIPS32 32 /* MIPS32 */
|
||||
#endif
|
||||
|
||||
#if !defined(ABICALLS) && !defined(_NO_ABICALLS)
|
||||
#define ABICALLS .abicalls
|
||||
|
@ -56,8 +55,6 @@
|
|||
ABICALLS
|
||||
#endif
|
||||
|
||||
#define _C_LABEL(x) x /* XXX Obsolete but keep for a while */
|
||||
|
||||
#if !defined(__MIPSEL__) && !defined(__MIPSEB__)
|
||||
#error "__MIPSEL__ or __MIPSEB__ must be defined"
|
||||
#endif
|
||||
|
@ -90,15 +87,6 @@
|
|||
*/
|
||||
#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)
|
||||
#define NARGSAVE 4
|
||||
|
||||
|
@ -151,7 +139,7 @@
|
|||
#define CF_RA_OFFS 20 /* Call ra save offset */
|
||||
#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 LOGREGSZ 3 /* log rsize */
|
||||
#define REG_S sd
|
||||
|
@ -189,28 +177,6 @@
|
|||
#define PTR_VAL .dword
|
||||
#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)
|
||||
*
|
||||
|
@ -221,26 +187,9 @@
|
|||
.globl x; \
|
||||
.ent x, 0; \
|
||||
x: ; \
|
||||
.cfi_startproc; \
|
||||
.frame sp, fsize, ra; \
|
||||
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)
|
||||
|
@ -252,54 +201,8 @@ x: ; \
|
|||
.globl x; \
|
||||
.ent x, 0; \
|
||||
x: ; \
|
||||
.cfi_startproc; \
|
||||
.frame sp, fsize, retpc; \
|
||||
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 */
|
||||
|
|
|
@ -37,8 +37,6 @@
|
|||
#ifndef _MIPS_SIGNAL_H_
|
||||
#define _MIPS_SIGNAL_H_
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define SC_REGMASK (0*REGSZ)
|
||||
#define SC_STATUS (1*REGSZ)
|
||||
#define SC_PC (2*REGSZ)
|
||||
|
|
|
@ -39,13 +39,13 @@
|
|||
* Include files
|
||||
************************************************************************/
|
||||
|
||||
#include "machine/asm.h"
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
|
||||
/*
|
||||
/*
|
||||
* This routine could be optimized for MIPS64. The current code only
|
||||
* uses MIPS32 instructions.
|
||||
*/
|
||||
*/
|
||||
#if defined(__MIPSEB__)
|
||||
# define LWHI lwl /* high part is left in big-endian */
|
||||
# define SWHI swl /* high part is left in big-endian */
|
||||
|
|
|
@ -39,12 +39,12 @@
|
|||
* Include files
|
||||
************************************************************************/
|
||||
|
||||
#include "machine/asm.h"
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
/*
|
||||
* This routine could be optimized for MIPS64. The current code only
|
||||
* uses MIPS32 instructions.
|
||||
*/
|
||||
*/
|
||||
|
||||
#if defined(__MIPSEB__)
|
||||
# define SWHI swl /* high part is left in big-endian */
|
||||
|
@ -220,7 +220,7 @@ LEAF(memset,0)
|
|||
sw a1,-36(a0)
|
||||
nop
|
||||
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 # and 8 evict cycles, i.e. at least 32 instr.
|
||||
nop
|
||||
|
@ -320,4 +320,3 @@ END(memset)
|
|||
/************************************************************************
|
||||
* Implementation : Static functions
|
||||
************************************************************************/
|
||||
|
||||
|
|
|
@ -26,8 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
|
@ -43,8 +42,7 @@ FRAME_FN = FRAMESZ-3*REGSZ
|
|||
#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);
|
||||
.text
|
||||
LEAF(__bionic_clone,FRAMESZ)
|
||||
LEAF(__bionic_clone, FRAMESZ)
|
||||
PTR_SUBU sp, FRAMESZ # allocate stack frame
|
||||
SETUP_GP64(FRAME_GP,__bionic_clone)
|
||||
SAVE_GP(FRAME_GP)
|
||||
|
|
|
@ -25,15 +25,10 @@
|
|||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
.text
|
||||
|
||||
/* void *__get_sp(void) */
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
.type __get_sp, @function
|
||||
.global __get_sp
|
||||
.align 4
|
||||
.ent __get_sp
|
||||
__get_sp:
|
||||
move $v0, $sp
|
||||
j $ra
|
||||
.end __get_sp
|
||||
ENTRY(__get_sp)
|
||||
move v0, sp
|
||||
j ra
|
||||
END(__get_sp)
|
||||
|
|
|
@ -26,23 +26,16 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
|
||||
.text
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
// 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
|
||||
.global _exit_with_stack_teardown
|
||||
.align 4
|
||||
.ent _exit_with_stack_teardown
|
||||
_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
|
||||
li a0, 0
|
||||
li v0, __NR_exit
|
||||
syscall
|
||||
// The exit syscall does not return.
|
||||
END(_exit_with_stack_teardown)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2002 Opsycon AB (www.opsycon.se / www.opsycon.com)
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
|
@ -29,7 +29,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/regnum.h>
|
||||
#include <machine/signal.h>
|
||||
|
||||
|
@ -48,13 +48,13 @@ GPOFF= FRAMESZ-2*REGSZ
|
|||
swc1 FPR, OFF(BASE) ; \
|
||||
mfhc1 t0, FPR ; \
|
||||
sw t0, OFF+4(BASE) ;
|
||||
|
||||
|
||||
#define FPREG64_L(FPR, OFF, BASE) \
|
||||
lw t0, OFF+4(BASE) ; \
|
||||
lw t1, OFF(BASE) ; \
|
||||
mtc1 t1, FPR ; \
|
||||
mthc1 t0, FPR ; \
|
||||
|
||||
|
||||
LEAF(_setjmp, FRAMESZ)
|
||||
PTR_SUBU sp, FRAMESZ
|
||||
SETUP_GP64(GPOFF, _setjmp)
|
||||
|
@ -185,4 +185,3 @@ botch:
|
|||
RESTORE_GP64
|
||||
PTR_ADDU sp, FRAMESZ
|
||||
END(_longjmp)
|
||||
|
||||
|
|
|
@ -25,9 +25,8 @@
|
|||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
.text
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* void bzero(void *s, size_t n);
|
||||
|
@ -40,4 +39,3 @@ LEAF(bzero,0)
|
|||
RESTORE_GP64
|
||||
j t9
|
||||
END(bzero)
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
.text
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* u4 __memcmp16(const u2* s0, const u2* s1, size_t count);
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/regnum.h>
|
||||
#include <machine/signal.h>
|
||||
|
||||
|
@ -49,13 +49,13 @@ RAOFF= FRAMESZ-1*REGSZ
|
|||
swc1 FPR, OFF(BASE) ; \
|
||||
mfhc1 t0, FPR ; \
|
||||
sw t0, OFF+4(BASE) ;
|
||||
|
||||
|
||||
#define FPREG64_L(FPR, OFF, BASE) \
|
||||
lw t0, OFF+4(BASE) ; \
|
||||
lw t1, OFF(BASE) ; \
|
||||
mtc1 t1, FPR ; \
|
||||
mthc1 t0, FPR ; \
|
||||
|
||||
|
||||
NON_LEAF(setjmp, FRAMESZ, ra)
|
||||
.mask 0x80000000, RAOFF
|
||||
PTR_SUBU sp, FRAMESZ # allocate stack frame
|
||||
|
@ -154,7 +154,7 @@ LEAF(longjmp, FRAMESZ)
|
|||
lw a0, A0OFF(sp)
|
||||
lw a1, A1OFF(sp)
|
||||
|
||||
.set noreorder
|
||||
.set noreorder
|
||||
REG_L v0, SC_REGS+ZERO*REGSZ(a0)
|
||||
bne v0, 0xACEDBADE, botch # jump if error
|
||||
REG_L ra, SC_PC(a0)
|
||||
|
@ -169,9 +169,9 @@ LEAF(longjmp, FRAMESZ)
|
|||
REG_L s8, SC_REGS+S8*REGSZ(a0)
|
||||
REG_L gp, SC_REGS+GP*REGSZ(a0)
|
||||
REG_L sp, SC_REGS+SP*REGSZ(a0)
|
||||
|
||||
|
||||
#if !defined(SOFTFLOAT)
|
||||
REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0)
|
||||
REG_L v0, SC_FPREGS+((FSR-F0)*REGSZ)(a0)
|
||||
ctc1 v0, $31
|
||||
#if _MIPS_FPSET == 32
|
||||
FPREG64_L($f20, SC_FPREGS+((F20-F0)*REGSZ_FP), a0)
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/regnum.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
|
|
|
@ -26,8 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32)
|
||||
FRAMESZ = MKFSIZ(6,0)
|
||||
|
|
|
@ -26,8 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
// TODO: mips' uapi signal.h is missing #ifndef __ASSEMBLY__.
|
||||
|
@ -46,7 +45,7 @@ LEAF(vfork,FRAMESZ)
|
|||
#if FRAMESZ!=0
|
||||
PTR_SUBU sp, FRAMESZ
|
||||
#endif
|
||||
SETUP_GP64(a5,vfork)
|
||||
SETUP_GP64(a5, vfork)
|
||||
LI a0, (CLONE_VM | CLONE_VFORK | SIGCHLD)
|
||||
move a1, $0
|
||||
move a2, $0
|
||||
|
|
|
@ -28,25 +28,24 @@
|
|||
#ifndef _MIPS64_ASM_H
|
||||
#define _MIPS64_ASM_H
|
||||
|
||||
#include <machine/regdef.h>
|
||||
|
||||
#ifdef NEED_OLD_RM7KFIX
|
||||
#define ITLBNOPFIX nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
|
||||
#else
|
||||
#define ITLBNOPFIX nop;nop;nop;nop
|
||||
#ifndef _ALIGN_TEXT
|
||||
# define _ALIGN_TEXT .align 4
|
||||
#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_MIPS2 2 /* R4000/R6000 */
|
||||
#define _MIPS_ISA_MIPS3 3 /* R4000 */
|
||||
#define _MIPS_ISA_MIPS4 4 /* TFP (R1x000) */
|
||||
#ifdef __linux__
|
||||
#define _MIPS_ISA_MIPS5 5
|
||||
#define _MIPS_ISA_MIPS32 6
|
||||
#define _MIPS_ISA_MIPS64 7
|
||||
#else
|
||||
#define _MIPS_ISA_MIPS32 32 /* MIPS32 */
|
||||
#endif
|
||||
|
||||
#if !defined(ABICALLS) && !defined(_NO_ABICALLS)
|
||||
#define ABICALLS .abicalls
|
||||
|
@ -56,8 +55,6 @@
|
|||
ABICALLS
|
||||
#endif
|
||||
|
||||
#define _C_LABEL(x) x /* XXX Obsolete but keep for a while */
|
||||
|
||||
#if !defined(__MIPSEL__) && !defined(__MIPSEB__)
|
||||
#error "__MIPSEL__ or __MIPSEB__ must be defined"
|
||||
#endif
|
||||
|
@ -90,15 +87,6 @@
|
|||
*/
|
||||
#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)
|
||||
#define NARGSAVE 4
|
||||
|
||||
|
@ -189,28 +177,6 @@
|
|||
#define PTR_VAL .dword
|
||||
#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)
|
||||
*
|
||||
|
@ -221,26 +187,9 @@
|
|||
.globl x; \
|
||||
.ent x, 0; \
|
||||
x: ; \
|
||||
.cfi_startproc; \
|
||||
.frame sp, fsize, ra; \
|
||||
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)
|
||||
|
@ -252,54 +201,8 @@ x: ; \
|
|||
.globl x; \
|
||||
.ent x, 0; \
|
||||
x: ; \
|
||||
.cfi_startproc; \
|
||||
.frame sp, fsize, retpc; \
|
||||
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 */
|
||||
|
|
|
@ -37,8 +37,6 @@
|
|||
#ifndef _MIPS_SIGNAL_H_
|
||||
#define _MIPS_SIGNAL_H_
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define SC_REGMASK (0*REGSZ)
|
||||
#define SC_STATUS (1*REGSZ)
|
||||
#define SC_PC (2*REGSZ)
|
||||
|
|
|
@ -39,13 +39,13 @@
|
|||
* Include files
|
||||
************************************************************************/
|
||||
|
||||
#include "machine/asm.h"
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
|
||||
/*
|
||||
/*
|
||||
* This routine could be optimized for MIPS64. The current code only
|
||||
* uses MIPS32 instructions.
|
||||
*/
|
||||
*/
|
||||
#if defined(__MIPSEB__)
|
||||
# define LWHI lwl /* high part is left in big-endian */
|
||||
# define SWHI swl /* high part is left in big-endian */
|
||||
|
|
|
@ -39,12 +39,12 @@
|
|||
* Include files
|
||||
************************************************************************/
|
||||
|
||||
#include "machine/asm.h"
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
/*
|
||||
* This routine could be optimized for MIPS64. The current code only
|
||||
* uses MIPS32 instructions.
|
||||
*/
|
||||
*/
|
||||
|
||||
#if defined(__MIPSEB__)
|
||||
# define SWHI swl /* high part is left in big-endian */
|
||||
|
@ -220,7 +220,7 @@ LEAF(memset,0)
|
|||
sw a1,-36(a0)
|
||||
nop
|
||||
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 # and 8 evict cycles, i.e. at least 32 instr.
|
||||
nop
|
||||
|
@ -320,4 +320,3 @@ END(memset)
|
|||
/************************************************************************
|
||||
* Implementation : Static functions
|
||||
************************************************************************/
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#include <asm/unistd.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_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);
|
||||
ENTRY(__bionic_clone)
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(__get_sp)
|
||||
mov %esp, %eax
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* C library -- _setjmp, _longjmp
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* C library -- setjmp, longjmp
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(sigsetjmp)
|
||||
movl 4(%esp),%ecx
|
||||
|
|
|
@ -37,10 +37,6 @@
|
|||
#ifndef _I386_ASM_H_
|
||||
#define _I386_ASM_H_
|
||||
|
||||
#ifdef _KERNEL_OPT
|
||||
#include "opt_multiprocessor.h"
|
||||
#endif
|
||||
|
||||
#ifdef PIC
|
||||
#define PIC_PROLOGUE \
|
||||
pushl %ebx; \
|
||||
|
@ -61,27 +57,6 @@
|
|||
#define PIC_GOTOFF(x) x
|
||||
#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 */
|
||||
#if !defined(_ALIGN_TEXT) && !defined(_KERNEL)
|
||||
# ifdef _STANDALONE
|
||||
|
@ -93,126 +68,4 @@
|
|||
# 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_ */
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* (ov)bcopy (src,dst,cnt)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(memcmp)
|
||||
pushl %edi
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
#if defined(APIWARN)
|
||||
#APP
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* NOTE: I've unrolled the loop eight times: large enough to make a
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* NOTE: I've unrolled the loop eight times: large enough to make a
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
/*
|
||||
* On the i486, this code is negligibly faster than the code generated
|
||||
|
|
|
@ -26,8 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_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);
|
||||
ENTRY(__bionic_clone)
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(__get_sp)
|
||||
mov %rsp, %rax
|
||||
|
|
|
@ -26,11 +26,9 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(__rt_sigreturn)
|
||||
.hidden _C_LABEL(__rt_sigreturn) // TODO: add an ENTRY_PRIVATE macro for x86_64.
|
||||
ENTRY_PRIVATE(__rt_sigreturn)
|
||||
movl $__NR_rt_sigreturn, %eax
|
||||
syscall
|
||||
END(__rt_sigreturn)
|
||||
|
|
|
@ -36,8 +36,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -36,8 +36,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -37,8 +37,6 @@
|
|||
#ifndef _AMD64_ASM_H_
|
||||
#define _AMD64_ASM_H_
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
#ifdef __PIC__
|
||||
#define PIC_PLT(x) x@PLT
|
||||
#define PIC_GOT(x) x@GOTPCREL(%rip)
|
||||
|
@ -47,19 +45,6 @@
|
|||
#define PIC_GOT(x) x
|
||||
#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 */
|
||||
#ifndef _ALIGN_TEXT
|
||||
# ifdef _STANDALONE
|
||||
|
@ -69,78 +54,4 @@
|
|||
# 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_ */
|
||||
|
|
|
@ -29,20 +29,32 @@
|
|||
#ifndef _PRIVATE_BIONIC_ASM_H_
|
||||
#define _PRIVATE_BIONIC_ASM_H_
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#include <asm/unistd.h> /* For system call numbers. */
|
||||
#define MAX_ERRNO 4095 /* For recognizing system call error returns. */
|
||||
|
||||
#if __mips__
|
||||
/* mips/mips64 don't have ENTRY like the others. */
|
||||
#define ENTRY(f) .text; .globl f; .align 4; .type f, @function; .ent f; f: .cfi_startproc
|
||||
/* 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
|
||||
#define __bionic_asm_custom_entry(f)
|
||||
#define __bionic_asm_custom_end(f)
|
||||
#define __bionic_asm_function_type @function
|
||||
|
||||
/* TODO: add ENTRY_PRIVATE. */
|
||||
/* TODO: add ASM_ALIAS macro. */
|
||||
#include <machine/asm.h>
|
||||
|
||||
#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_ */
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(_start)
|
||||
mov x0, sp
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32)
|
||||
#define ELF_DYNSZ 8
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
ENTRY(_start)
|
||||
/* Pass elfdata to __linker_init. */
|
||||
|
|
Loading…
Reference in a new issue