Merge "Unify our assembler macros."

This commit is contained in:
Elliott Hughes 2014-02-20 22:13:17 +00:00 committed by Gerrit Code Review
commit cb43f8474d
94 changed files with 298 additions and 963 deletions

View file

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

View file

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

View file

@ -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

View file

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

View file

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

View file

@ -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)

View file

@ -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. */

View file

@ -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

View file

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

View file

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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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

View file

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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

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

View file

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

View file

@ -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_ */

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

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

View file

@ -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

View file

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

View file

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

View file

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

View file

@ -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_ */

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

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

View file

@ -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)

View file

@ -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)

View file

@ -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 */

View file

@ -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)

View file

@ -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 */

View file

@ -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
************************************************************************/

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

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

View file

@ -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)

View file

@ -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

View file

@ -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 */

View file

@ -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)

View file

@ -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 */

View file

@ -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
************************************************************************/

View file

@ -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)

View file

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

View file

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

View file

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

View file

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

View file

@ -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_ */

View file

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

View file

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

View file

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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

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

View file

@ -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)

View file

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

View file

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

View file

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

View file

@ -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_ */

View file

@ -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_ */

View file

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

View file

@ -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

View file

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