Unify our assembler macros.
Our <machine/asm.h> files were modified from upstream, to the extent
that no architecture was actually using the upstream ENTRY or END macros,
assuming that architecture even had such a macro upstream. This patch moves
everyone to the same macros, with just a few tweaks remaining in the
<machine/asm.h> files, which no one should now use directly.
I've removed most of the unused cruft from the <machine/asm.h> files, though
there's still rather a lot in the mips/mips64 ones.
Bug: 12229603
Change-Id: I2fff287dc571ac1087abe9070362fb9420d85d6d
diff --git a/libc/arch-arm/bionic/__get_sp.S b/libc/arch-arm/bionic/__get_sp.S
index 2a7e7b7..aabec6d 100644
--- a/libc/arch-arm/bionic/__get_sp.S
+++ b/libc/arch-arm/bionic/__get_sp.S
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(__get_sp)
mov r0, sp
diff --git a/libc/arch-arm/bionic/_setjmp.S b/libc/arch-arm/bionic/_setjmp.S
index 239947e..64a0a31 100644
--- a/libc/arch-arm/bionic/_setjmp.S
+++ b/libc/arch-arm/bionic/_setjmp.S
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
#include <machine/cpu-features.h>
diff --git a/libc/arch-arm/bionic/abort_arm.S b/libc/arch-arm/bionic/abort_arm.S
index 1d01ed2..6b181ef 100644
--- a/libc/arch-arm/bionic/abort_arm.S
+++ b/libc/arch-arm/bionic/abort_arm.S
@@ -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
diff --git a/libc/arch-arm/bionic/memcmp.S b/libc/arch-arm/bionic/memcmp.S
index 0dc3af0..70a2a58 100644
--- a/libc/arch-arm/bionic/memcmp.S
+++ b/libc/arch-arm/bionic/memcmp.S
@@ -27,7 +27,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#ifdef HAVE_32_BYTE_CACHE_LINE
diff --git a/libc/arch-arm/bionic/memcmp16.S b/libc/arch-arm/bionic/memcmp16.S
index afbb1b0..3f2f2f1 100644
--- a/libc/arch-arm/bionic/memcmp16.S
+++ b/libc/arch-arm/bionic/memcmp16.S
@@ -27,7 +27,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
/*
* Optimized memcmp16() for ARM9.
diff --git a/libc/arch-arm/bionic/memcpy.S b/libc/arch-arm/bionic/memcpy.S
index f25b3e3..2c9b10c 100644
--- a/libc/arch-arm/bionic/memcpy.S
+++ b/libc/arch-arm/bionic/memcpy.S
@@ -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)
diff --git a/libc/arch-arm/bionic/memcpy.a9.S b/libc/arch-arm/bionic/memcpy.a9.S
index 2ba1ff5..259701d 100644
--- a/libc/arch-arm/bionic/memcpy.a9.S
+++ b/libc/arch-arm/bionic/memcpy.a9.S
@@ -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. */
diff --git a/libc/arch-arm/bionic/setjmp.S b/libc/arch-arm/bionic/setjmp.S
index 8927086..ed59d07 100644
--- a/libc/arch-arm/bionic/setjmp.S
+++ b/libc/arch-arm/bionic/setjmp.S
@@ -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 @@
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
diff --git a/libc/arch-arm/bionic/sigsetjmp.S b/libc/arch-arm/bionic/sigsetjmp.S
index 59ab9da..7016f50 100644
--- a/libc/arch-arm/bionic/sigsetjmp.S
+++ b/libc/arch-arm/bionic/sigsetjmp.S
@@ -35,7 +35,7 @@
#define _ALIGN_TEXT .align 0
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
/*
diff --git a/libc/arch-arm/bionic/strcmp.S b/libc/arch-arm/bionic/strcmp.S
index 42d41d1..6dba942 100644
--- a/libc/arch-arm/bionic/strcmp.S
+++ b/libc/arch-arm/bionic/strcmp.S
@@ -28,7 +28,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
.text
diff --git a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
index dc86150..36da2d9 100644
--- a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
+++ b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
@@ -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
diff --git a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
index 95aaf4f..c3e3e14 100644
--- a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
@@ -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
diff --git a/libc/arch-arm/cortex-a15/bionic/memcpy.S b/libc/arch-arm/cortex-a15/bionic/memcpy.S
index badc93b..da4f3dd 100644
--- a/libc/arch-arm/cortex-a15/bionic/memcpy.S
+++ b/libc/arch-arm/cortex-a15/bionic/memcpy.S
@@ -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
diff --git a/libc/arch-arm/cortex-a15/bionic/memset.S b/libc/arch-arm/cortex-a15/bionic/memset.S
index 4e6d322..12c68d6 100644
--- a/libc/arch-arm/cortex-a15/bionic/memset.S
+++ b/libc/arch-arm/cortex-a15/bionic/memset.S
@@ -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.
diff --git a/libc/arch-arm/cortex-a15/bionic/strcat.S b/libc/arch-arm/cortex-a15/bionic/strcat.S
index 72d4e9e..b95be94 100644
--- a/libc/arch-arm/cortex-a15/bionic/strcat.S
+++ b/libc/arch-arm/cortex-a15/bionic/strcat.S
@@ -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
diff --git a/libc/arch-arm/cortex-a15/bionic/strcmp.S b/libc/arch-arm/cortex-a15/bionic/strcmp.S
index 0cccf06..12da115 100644
--- a/libc/arch-arm/cortex-a15/bionic/strcmp.S
+++ b/libc/arch-arm/cortex-a15/bionic/strcmp.S
@@ -27,7 +27,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#ifdef __ARMEB__
#define S2LOMEM lsl
diff --git a/libc/arch-arm/cortex-a15/bionic/strcpy.S b/libc/arch-arm/cortex-a15/bionic/strcpy.S
index 5773540..cb878c4 100644
--- a/libc/arch-arm/cortex-a15/bionic/strcpy.S
+++ b/libc/arch-arm/cortex-a15/bionic/strcpy.S
@@ -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
diff --git a/libc/arch-arm/cortex-a15/bionic/strlen.S b/libc/arch-arm/cortex-a15/bionic/strlen.S
index 08f6d19..9a0ce62 100644
--- a/libc/arch-arm/cortex-a15/bionic/strlen.S
+++ b/libc/arch-arm/cortex-a15/bionic/strlen.S
@@ -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
diff --git a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
index 7009168..651aefc 100644
--- a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
+++ b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
@@ -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
diff --git a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
index 908eec4..2447780 100644
--- a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
@@ -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
diff --git a/libc/arch-arm/cortex-a9/bionic/memcpy.S b/libc/arch-arm/cortex-a9/bionic/memcpy.S
index 72c1a66..8dcd937 100644
--- a/libc/arch-arm/cortex-a9/bionic/memcpy.S
+++ b/libc/arch-arm/cortex-a9/bionic/memcpy.S
@@ -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
diff --git a/libc/arch-arm/cortex-a9/bionic/memset.S b/libc/arch-arm/cortex-a9/bionic/memset.S
index 7f77dad..a5057eb 100644
--- a/libc/arch-arm/cortex-a9/bionic/memset.S
+++ b/libc/arch-arm/cortex-a9/bionic/memset.S
@@ -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
diff --git a/libc/arch-arm/cortex-a9/bionic/strcat.S b/libc/arch-arm/cortex-a9/bionic/strcat.S
index 0f5baef..f5a855e 100644
--- a/libc/arch-arm/cortex-a9/bionic/strcat.S
+++ b/libc/arch-arm/cortex-a9/bionic/strcat.S
@@ -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
diff --git a/libc/arch-arm/cortex-a9/bionic/strcmp.S b/libc/arch-arm/cortex-a9/bionic/strcmp.S
index eacdb89..2411c65 100644
--- a/libc/arch-arm/cortex-a9/bionic/strcmp.S
+++ b/libc/arch-arm/cortex-a9/bionic/strcmp.S
@@ -27,7 +27,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#ifdef __ARMEB__
#define S2LOMEM lsl
diff --git a/libc/arch-arm/cortex-a9/bionic/strcpy.S b/libc/arch-arm/cortex-a9/bionic/strcpy.S
index 9aa4f88..9e9610b 100644
--- a/libc/arch-arm/cortex-a9/bionic/strcpy.S
+++ b/libc/arch-arm/cortex-a9/bionic/strcpy.S
@@ -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
diff --git a/libc/arch-arm/cortex-a9/bionic/strlen.S b/libc/arch-arm/cortex-a9/bionic/strlen.S
index 259eda0..b92b043 100644
--- a/libc/arch-arm/cortex-a9/bionic/strlen.S
+++ b/libc/arch-arm/cortex-a9/bionic/strlen.S
@@ -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
diff --git a/libc/arch-arm/generic/bionic/memcpy.S b/libc/arch-arm/generic/bionic/memcpy.S
index 699b88d..cd4a13d 100644
--- a/libc/arch-arm/generic/bionic/memcpy.S
+++ b/libc/arch-arm/generic/bionic/memcpy.S
@@ -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.
diff --git a/libc/arch-arm/generic/bionic/memset.S b/libc/arch-arm/generic/bionic/memset.S
index baeb519..be35de9 100644
--- a/libc/arch-arm/generic/bionic/memset.S
+++ b/libc/arch-arm/generic/bionic/memset.S
@@ -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.
diff --git a/libc/arch-arm/generic/bionic/strcmp.S b/libc/arch-arm/generic/bionic/strcmp.S
index 42d41d1..6dba942 100644
--- a/libc/arch-arm/generic/bionic/strcmp.S
+++ b/libc/arch-arm/generic/bionic/strcmp.S
@@ -28,7 +28,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
.text
diff --git a/libc/arch-arm/generic/bionic/strcpy.S b/libc/arch-arm/generic/bionic/strcpy.S
index cc997f4..802a62d 100644
--- a/libc/arch-arm/generic/bionic/strcpy.S
+++ b/libc/arch-arm/generic/bionic/strcpy.S
@@ -30,7 +30,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(strcpy)
pld [r1, #0]
diff --git a/libc/arch-arm/include/machine/asm.h b/libc/arch-arm/include/machine/asm.h
index f16baf8..7954f05 100644
--- a/libc/arch-arm/include/machine/asm.h
+++ b/libc/arch-arm/include/machine/asm.h
@@ -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_ */
diff --git a/libc/arch-arm/krait/bionic/__strcat_chk.S b/libc/arch-arm/krait/bionic/__strcat_chk.S
index a5d06f3..34becdb 100644
--- a/libc/arch-arm/krait/bionic/__strcat_chk.S
+++ b/libc/arch-arm/krait/bionic/__strcat_chk.S
@@ -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
diff --git a/libc/arch-arm/krait/bionic/__strcpy_chk.S b/libc/arch-arm/krait/bionic/__strcpy_chk.S
index 95aaf4f..c3e3e14 100644
--- a/libc/arch-arm/krait/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/krait/bionic/__strcpy_chk.S
@@ -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
diff --git a/libc/arch-arm/krait/bionic/memcpy.S b/libc/arch-arm/krait/bionic/memcpy.S
index 54405fa..0b7b276 100644
--- a/libc/arch-arm/krait/bionic/memcpy.S
+++ b/libc/arch-arm/krait/bionic/memcpy.S
@@ -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
diff --git a/libc/arch-arm/krait/bionic/memset.S b/libc/arch-arm/krait/bionic/memset.S
index 1563327..5d1943b 100644
--- a/libc/arch-arm/krait/bionic/memset.S
+++ b/libc/arch-arm/krait/bionic/memset.S
@@ -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
diff --git a/libc/arch-arm/krait/bionic/strcmp.S b/libc/arch-arm/krait/bionic/strcmp.S
index f735fb5..eacb82a 100644
--- a/libc/arch-arm/krait/bionic/strcmp.S
+++ b/libc/arch-arm/krait/bionic/strcmp.S
@@ -27,7 +27,7 @@
*/
#include <machine/cpu-features.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#ifdef __ARMEB__
#define S2LOMEM lsl
diff --git a/libc/arch-arm64/bionic/__get_sp.S b/libc/arch-arm64/bionic/__get_sp.S
index 3cd4ceb..d495b6a 100644
--- a/libc/arch-arm64/bionic/__get_sp.S
+++ b/libc/arch-arm64/bionic/__get_sp.S
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(__get_sp)
mov x0, sp
diff --git a/libc/arch-arm64/bionic/__rt_sigreturn.S b/libc/arch-arm64/bionic/__rt_sigreturn.S
index d176ea3..8fb6f0c 100644
--- a/libc/arch-arm64/bionic/__rt_sigreturn.S
+++ b/libc/arch-arm64/bionic/__rt_sigreturn.S
@@ -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
diff --git a/libc/arch-arm64/bionic/_setjmp.S b/libc/arch-arm64/bionic/_setjmp.S
index 6cbf5c6..dfa861b 100644
--- a/libc/arch-arm64/bionic/_setjmp.S
+++ b/libc/arch-arm64/bionic/_setjmp.S
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
/*
diff --git a/libc/arch-arm64/bionic/setjmp.S b/libc/arch-arm64/bionic/setjmp.S
index 2d8631b..9a68d86 100644
--- a/libc/arch-arm64/bionic/setjmp.S
+++ b/libc/arch-arm64/bionic/setjmp.S
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
/*
diff --git a/libc/arch-arm64/bionic/sigsetjmp.S b/libc/arch-arm64/bionic/sigsetjmp.S
index cde1cbb..4fdb367 100644
--- a/libc/arch-arm64/bionic/sigsetjmp.S
+++ b/libc/arch-arm64/bionic/sigsetjmp.S
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
/*
diff --git a/libc/arch-arm64/include/machine/asm.h b/libc/arch-arm64/include/machine/asm.h
index 3f8b908..4bfabaf 100644
--- a/libc/arch-arm64/include/machine/asm.h
+++ b/libc/arch-arm64/include/machine/asm.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_ */
-
diff --git a/libc/arch-mips/bionic/__bionic_clone.S b/libc/arch-mips/bionic/__bionic_clone.S
index 8970b6e..9273134 100644
--- a/libc/arch-mips/bionic/__bionic_clone.S
+++ b/libc/arch-mips/bionic/__bionic_clone.S
@@ -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)
diff --git a/libc/arch-mips/bionic/__get_sp.S b/libc/arch-mips/bionic/__get_sp.S
index 834c89d..d4b278b 100644
--- a/libc/arch-mips/bionic/__get_sp.S
+++ b/libc/arch-mips/bionic/__get_sp.S
@@ -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)
diff --git a/libc/arch-mips/bionic/_exit_with_stack_teardown.S b/libc/arch-mips/bionic/_exit_with_stack_teardown.S
index 8f624c3..129e3f9 100644
--- a/libc/arch-mips/bionic/_exit_with_stack_teardown.S
+++ b/libc/arch-mips/bionic/_exit_with_stack_teardown.S
@@ -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)
diff --git a/libc/arch-mips/bionic/_setjmp.S b/libc/arch-mips/bionic/_setjmp.S
index e7083ae..4465cd2 100644
--- a/libc/arch-mips/bionic/_setjmp.S
+++ b/libc/arch-mips/bionic/_setjmp.S
@@ -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 @@
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 @@
RESTORE_GP64
PTR_ADDU sp, FRAMESZ
END(_longjmp)
-
diff --git a/libc/arch-mips/bionic/bzero.S b/libc/arch-mips/bionic/bzero.S
index 6739345..6e5d294 100644
--- a/libc/arch-mips/bionic/bzero.S
+++ b/libc/arch-mips/bionic/bzero.S
@@ -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)
diff --git a/libc/arch-mips/bionic/futex_mips.S b/libc/arch-mips/bionic/futex_mips.S
index 285beac..7626a7c 100644
--- a/libc/arch-mips/bionic/futex_mips.S
+++ b/libc/arch-mips/bionic/futex_mips.S
@@ -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 @@
.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 @@
.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 @@
.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 @@
.set reorder
addu sp,4*6
j ra
- .end __futex_syscall4
+END(__futex_syscall4)
diff --git a/libc/arch-mips/bionic/memcmp16.S b/libc/arch-mips/bionic/memcmp16.S
index a2b2544..f9d14a9 100644
--- a/libc/arch-mips/bionic/memcmp16.S
+++ b/libc/arch-mips/bionic/memcmp16.S
@@ -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)
diff --git a/libc/arch-mips/bionic/setjmp.S b/libc/arch-mips/bionic/setjmp.S
index 7c21195..2af1fbd 100644
--- a/libc/arch-mips/bionic/setjmp.S
+++ b/libc/arch-mips/bionic/setjmp.S
@@ -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 @@
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 @@
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 @@
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)
diff --git a/libc/arch-mips/bionic/sigsetjmp.S b/libc/arch-mips/bionic/sigsetjmp.S
index b05454c..9d2e5ea 100644
--- a/libc/arch-mips/bionic/sigsetjmp.S
+++ b/libc/arch-mips/bionic/sigsetjmp.S
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/regnum.h>
#include <machine/setjmp.h>
diff --git a/libc/arch-mips/bionic/syscall.S b/libc/arch-mips/bionic/syscall.S
index af5bcc9..db477a5 100644
--- a/libc/arch-mips/bionic/syscall.S
+++ b/libc/arch-mips/bionic/syscall.S
@@ -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)
diff --git a/libc/arch-mips/bionic/vfork.S b/libc/arch-mips/bionic/vfork.S
index 414caaf..96de69e 100644
--- a/libc/arch-mips/bionic/vfork.S
+++ b/libc/arch-mips/bionic/vfork.S
@@ -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)
diff --git a/libc/arch-mips/include/machine/asm.h b/libc/arch-mips/include/machine/asm.h
index 43dbc09..5eacde3 100644
--- a/libc/arch-mips/include/machine/asm.h
+++ b/libc/arch-mips/include/machine/asm.h
@@ -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
@@ -190,28 +178,6 @@
#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)
*
* Declare a leaf routine.
@@ -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 @@
.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 */
diff --git a/libc/arch-mips/include/machine/signal.h b/libc/arch-mips/include/machine/signal.h
index f02ec0d..b31715c 100644
--- a/libc/arch-mips/include/machine/signal.h
+++ b/libc/arch-mips/include/machine/signal.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)
diff --git a/libc/arch-mips/string/memcpy.S b/libc/arch-mips/string/memcpy.S
index aabdfcf..dc91096 100644
--- a/libc/arch-mips/string/memcpy.S
+++ b/libc/arch-mips/string/memcpy.S
@@ -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 */
diff --git a/libc/arch-mips/string/memset.S b/libc/arch-mips/string/memset.S
index a1c5055..3e630ca 100644
--- a/libc/arch-mips/string/memset.S
+++ b/libc/arch-mips/string/memset.S
@@ -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 @@
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 @@
/************************************************************************
* Implementation : Static functions
************************************************************************/
-
diff --git a/libc/arch-mips64/bionic/__bionic_clone.S b/libc/arch-mips64/bionic/__bionic_clone.S
index 2a9a2b0..e1ade30 100644
--- a/libc/arch-mips64/bionic/__bionic_clone.S
+++ b/libc/arch-mips64/bionic/__bionic_clone.S
@@ -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 @@
#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)
diff --git a/libc/arch-mips64/bionic/__get_sp.S b/libc/arch-mips64/bionic/__get_sp.S
index 834c89d..8488102 100644
--- a/libc/arch-mips64/bionic/__get_sp.S
+++ b/libc/arch-mips64/bionic/__get_sp.S
@@ -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)
diff --git a/libc/arch-mips64/bionic/_exit_with_stack_teardown.S b/libc/arch-mips64/bionic/_exit_with_stack_teardown.S
index 8f624c3..3b537eb 100644
--- a/libc/arch-mips64/bionic/_exit_with_stack_teardown.S
+++ b/libc/arch-mips64/bionic/_exit_with_stack_teardown.S
@@ -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)
diff --git a/libc/arch-mips64/bionic/_setjmp.S b/libc/arch-mips64/bionic/_setjmp.S
index e7083ae..4465cd2 100644
--- a/libc/arch-mips64/bionic/_setjmp.S
+++ b/libc/arch-mips64/bionic/_setjmp.S
@@ -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 @@
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 @@
RESTORE_GP64
PTR_ADDU sp, FRAMESZ
END(_longjmp)
-
diff --git a/libc/arch-mips64/bionic/bzero.S b/libc/arch-mips64/bionic/bzero.S
index d0b5c84..76c6bc2 100644
--- a/libc/arch-mips64/bionic/bzero.S
+++ b/libc/arch-mips64/bionic/bzero.S
@@ -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 @@
RESTORE_GP64
j t9
END(bzero)
-
diff --git a/libc/arch-mips64/bionic/memcmp16.S b/libc/arch-mips64/bionic/memcmp16.S
index b70c078..1c58c1b 100644
--- a/libc/arch-mips64/bionic/memcmp16.S
+++ b/libc/arch-mips64/bionic/memcmp16.S
@@ -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);
diff --git a/libc/arch-mips64/bionic/setjmp.S b/libc/arch-mips64/bionic/setjmp.S
index 7c21195..2af1fbd 100644
--- a/libc/arch-mips64/bionic/setjmp.S
+++ b/libc/arch-mips64/bionic/setjmp.S
@@ -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 @@
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 @@
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 @@
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)
diff --git a/libc/arch-mips64/bionic/sigsetjmp.S b/libc/arch-mips64/bionic/sigsetjmp.S
index b05454c..9d2e5ea 100644
--- a/libc/arch-mips64/bionic/sigsetjmp.S
+++ b/libc/arch-mips64/bionic/sigsetjmp.S
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/regnum.h>
#include <machine/setjmp.h>
diff --git a/libc/arch-mips64/bionic/syscall.S b/libc/arch-mips64/bionic/syscall.S
index 08aa705..c4fd009 100644
--- a/libc/arch-mips64/bionic/syscall.S
+++ b/libc/arch-mips64/bionic/syscall.S
@@ -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)
diff --git a/libc/arch-mips64/bionic/vfork.S b/libc/arch-mips64/bionic/vfork.S
index c936945..911a264 100644
--- a/libc/arch-mips64/bionic/vfork.S
+++ b/libc/arch-mips64/bionic/vfork.S
@@ -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 @@
#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
diff --git a/libc/arch-mips64/include/machine/asm.h b/libc/arch-mips64/include/machine/asm.h
index eabb1bf..5eacde3 100644
--- a/libc/arch-mips64/include/machine/asm.h
+++ b/libc/arch-mips64/include/machine/asm.h
@@ -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
@@ -190,28 +178,6 @@
#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)
*
* Declare a leaf routine.
@@ -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 @@
.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 */
diff --git a/libc/arch-mips64/include/machine/signal.h b/libc/arch-mips64/include/machine/signal.h
index f02ec0d..b31715c 100644
--- a/libc/arch-mips64/include/machine/signal.h
+++ b/libc/arch-mips64/include/machine/signal.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)
diff --git a/libc/arch-mips64/string/memcpy.S b/libc/arch-mips64/string/memcpy.S
index aabdfcf..dc91096 100644
--- a/libc/arch-mips64/string/memcpy.S
+++ b/libc/arch-mips64/string/memcpy.S
@@ -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 */
diff --git a/libc/arch-mips64/string/memset.S b/libc/arch-mips64/string/memset.S
index a1c5055..3e630ca 100644
--- a/libc/arch-mips64/string/memset.S
+++ b/libc/arch-mips64/string/memset.S
@@ -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 @@
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 @@
/************************************************************************
* Implementation : Static functions
************************************************************************/
-
diff --git a/libc/arch-x86/bionic/__bionic_clone.S b/libc/arch-x86/bionic/__bionic_clone.S
index 3823ecc..e6ddaaa 100644
--- a/libc/arch-x86/bionic/__bionic_clone.S
+++ b/libc/arch-x86/bionic/__bionic_clone.S
@@ -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)
diff --git a/libc/arch-x86/bionic/__get_sp.S b/libc/arch-x86/bionic/__get_sp.S
index 0739d79..31ec6bc 100644
--- a/libc/arch-x86/bionic/__get_sp.S
+++ b/libc/arch-x86/bionic/__get_sp.S
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(__get_sp)
mov %esp, %eax
diff --git a/libc/arch-x86/bionic/_setjmp.S b/libc/arch-x86/bionic/_setjmp.S
index 9221138..0b256a2 100644
--- a/libc/arch-x86/bionic/_setjmp.S
+++ b/libc/arch-x86/bionic/_setjmp.S
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
/*
* C library -- _setjmp, _longjmp
diff --git a/libc/arch-x86/bionic/setjmp.S b/libc/arch-x86/bionic/setjmp.S
index e149d42..5b94311 100644
--- a/libc/arch-x86/bionic/setjmp.S
+++ b/libc/arch-x86/bionic/setjmp.S
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
/*
* C library -- setjmp, longjmp
diff --git a/libc/arch-x86/bionic/sigsetjmp.S b/libc/arch-x86/bionic/sigsetjmp.S
index 69494b4..7ef732e 100644
--- a/libc/arch-x86/bionic/sigsetjmp.S
+++ b/libc/arch-x86/bionic/sigsetjmp.S
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(sigsetjmp)
movl 4(%esp),%ecx
diff --git a/libc/arch-x86/include/machine/asm.h b/libc/arch-x86/include/machine/asm.h
index 5ccf78f..913e6c8 100644
--- a/libc/arch-x86/include/machine/asm.h
+++ b/libc/arch-x86/include/machine/asm.h
@@ -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_ */
diff --git a/libc/arch-x86/string/bcopy.S b/libc/arch-x86/string/bcopy.S
index 40df1d0..f425c58 100644
--- a/libc/arch-x86/string/bcopy.S
+++ b/libc/arch-x86/string/bcopy.S
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
/*
* (ov)bcopy (src,dst,cnt)
diff --git a/libc/arch-x86/string/memcmp.S b/libc/arch-x86/string/memcmp.S
index 3b50530..ef36b4f 100644
--- a/libc/arch-x86/string/memcmp.S
+++ b/libc/arch-x86/string/memcmp.S
@@ -4,7 +4,7 @@
* Public domain.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(memcmp)
pushl %edi
diff --git a/libc/arch-x86/string/strcat.S b/libc/arch-x86/string/strcat.S
index c75f38a..49e8eee 100644
--- a/libc/arch-x86/string/strcat.S
+++ b/libc/arch-x86/string/strcat.S
@@ -4,7 +4,7 @@
* Public domain.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#if defined(APIWARN)
#APP
diff --git a/libc/arch-x86/string/strcmp.S b/libc/arch-x86/string/strcmp.S
index 5d3f4fc..580f4d5 100644
--- a/libc/arch-x86/string/strcmp.S
+++ b/libc/arch-x86/string/strcmp.S
@@ -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
diff --git a/libc/arch-x86/string/strncmp.S b/libc/arch-x86/string/strncmp.S
index 6649473..9ba83a1 100644
--- a/libc/arch-x86/string/strncmp.S
+++ b/libc/arch-x86/string/strncmp.S
@@ -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
diff --git a/libc/arch-x86/string/swab.S b/libc/arch-x86/string/swab.S
index 2f6cfb2..b44d134 100644
--- a/libc/arch-x86/string/swab.S
+++ b/libc/arch-x86/string/swab.S
@@ -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
diff --git a/libc/arch-x86_64/bionic/__bionic_clone.S b/libc/arch-x86_64/bionic/__bionic_clone.S
index 7692013..cf98d76 100644
--- a/libc/arch-x86_64/bionic/__bionic_clone.S
+++ b/libc/arch-x86_64/bionic/__bionic_clone.S
@@ -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)
diff --git a/libc/arch-x86_64/bionic/__get_sp.S b/libc/arch-x86_64/bionic/__get_sp.S
index 0c693b3..9cc18a9 100644
--- a/libc/arch-x86_64/bionic/__get_sp.S
+++ b/libc/arch-x86_64/bionic/__get_sp.S
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(__get_sp)
mov %rsp, %rax
diff --git a/libc/arch-x86_64/bionic/__rt_sigreturn.S b/libc/arch-x86_64/bionic/__rt_sigreturn.S
index e03bb88..eddceb1 100644
--- a/libc/arch-x86_64/bionic/__rt_sigreturn.S
+++ b/libc/arch-x86_64/bionic/__rt_sigreturn.S
@@ -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)
diff --git a/libc/arch-x86_64/bionic/_setjmp.S b/libc/arch-x86_64/bionic/_setjmp.S
index e9b8dbb..c617030 100644
--- a/libc/arch-x86_64/bionic/_setjmp.S
+++ b/libc/arch-x86_64/bionic/_setjmp.S
@@ -36,8 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
/*
diff --git a/libc/arch-x86_64/bionic/setjmp.S b/libc/arch-x86_64/bionic/setjmp.S
index 3f4a432..c81b573 100644
--- a/libc/arch-x86_64/bionic/setjmp.S
+++ b/libc/arch-x86_64/bionic/setjmp.S
@@ -36,8 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
/*
diff --git a/libc/arch-x86_64/bionic/sigsetjmp.S b/libc/arch-x86_64/bionic/sigsetjmp.S
index 174222f..718743f 100644
--- a/libc/arch-x86_64/bionic/sigsetjmp.S
+++ b/libc/arch-x86_64/bionic/sigsetjmp.S
@@ -37,7 +37,7 @@
*/
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
#include <machine/setjmp.h>
/*
diff --git a/libc/arch-x86_64/include/machine/asm.h b/libc/arch-x86_64/include/machine/asm.h
index 310b230..0af6dae 100644
--- a/libc/arch-x86_64/include/machine/asm.h
+++ b/libc/arch-x86_64/include/machine/asm.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_ */
diff --git a/libc/private/bionic_asm.h b/libc/private/bionic_asm.h
index be22b75..7c2686f 100644
--- a/libc/private/bionic_asm.h
+++ b/libc/private/bionic_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_ */