Apple assembler support; fixed most gas/ELF-isms.
This commit is contained in:
@@ -39,7 +39,11 @@
|
|||||||
#else
|
#else
|
||||||
#define CNAME(x) x
|
#define CNAME(x) x
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#define ENTRY(x) .globl CNAME(x); CNAME(x):
|
||||||
|
#else
|
||||||
#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
|
#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
|
||||||
|
#endif /* __APPLE__ */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __ELF__
|
#ifdef __ELF__
|
||||||
@@ -111,43 +115,37 @@
|
|||||||
.align 0
|
.align 0
|
||||||
.thumb
|
.thumb
|
||||||
.thumb_func
|
.thumb_func
|
||||||
|
#ifdef __APPLE__
|
||||||
|
ENTRY($0)
|
||||||
|
#else
|
||||||
ENTRY(\name)
|
ENTRY(\name)
|
||||||
|
#endif
|
||||||
bx pc
|
bx pc
|
||||||
nop
|
nop
|
||||||
.arm
|
.arm
|
||||||
UNWIND .fnstart
|
UNWIND .fnstart
|
||||||
/* A hook to tell gdb that we've switched to ARM mode. Also used to call
|
/* A hook to tell gdb that we've switched to ARM mode. Also used to call
|
||||||
directly from other local arm routines. */
|
directly from other local arm routines. */
|
||||||
|
#ifdef __APPLE__
|
||||||
|
_L__$0:
|
||||||
|
#else
|
||||||
_L__\name:
|
_L__\name:
|
||||||
|
#endif
|
||||||
.endm
|
.endm
|
||||||
#else
|
#else
|
||||||
.macro ARM_FUNC_START name
|
.macro ARM_FUNC_START name
|
||||||
.text
|
.text
|
||||||
.align 0
|
.align 0
|
||||||
.arm
|
.arm
|
||||||
|
#ifdef __APPLE__
|
||||||
|
ENTRY($0)
|
||||||
|
#else
|
||||||
ENTRY(\name)
|
ENTRY(\name)
|
||||||
|
#endif
|
||||||
UNWIND .fnstart
|
UNWIND .fnstart
|
||||||
.endm
|
.endm
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.macro RETLDM regs=, cond=, dirn=ia
|
|
||||||
#if defined (__INTERWORKING__)
|
|
||||||
.ifc "\regs",""
|
|
||||||
ldr\cond lr, [sp], #4
|
|
||||||
.else
|
|
||||||
ldm\cond\dirn sp!, {\regs, lr}
|
|
||||||
.endif
|
|
||||||
bx\cond lr
|
|
||||||
#else
|
|
||||||
.ifc "\regs",""
|
|
||||||
ldr\cond pc, [sp], #4
|
|
||||||
.else
|
|
||||||
ldm\cond\dirn sp!, {\regs, pc}
|
|
||||||
.endif
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
|
|
||||||
@ r0: ffi_prep_args
|
@ r0: ffi_prep_args
|
||||||
@ r1: &ecif
|
@ r1: &ecif
|
||||||
@ r2: cif->bytes
|
@ r2: cif->bytes
|
||||||
@@ -230,11 +228,18 @@ ARM_FUNC_START ffi_call_SYSV
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
LSYM(Lepilogue):
|
LSYM(Lepilogue):
|
||||||
RETLDM "r0-r3,fp"
|
#if defined (__INTERWORKING__)
|
||||||
|
ldmia sp!, {r0-r3,fp, lr}
|
||||||
|
bx lr
|
||||||
|
#else
|
||||||
|
ldmia sp!, {r0-r3,fp, pc}
|
||||||
|
#endif
|
||||||
|
|
||||||
.ffi_call_SYSV_end:
|
.ffi_call_SYSV_end:
|
||||||
UNWIND .fnend
|
UNWIND .fnend
|
||||||
|
#ifdef __ELF__
|
||||||
.size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
|
.size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
unsigned int FFI_HIDDEN
|
unsigned int FFI_HIDDEN
|
||||||
@@ -306,7 +311,9 @@ ARM_FUNC_START ffi_closure_SYSV
|
|||||||
|
|
||||||
.ffi_closure_SYSV_end:
|
.ffi_closure_SYSV_end:
|
||||||
UNWIND .fnend
|
UNWIND .fnend
|
||||||
|
#ifdef __ELF__
|
||||||
.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
|
.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined __ELF__ && defined __linux__
|
#if defined __ELF__ && defined __linux__
|
||||||
.section .note.GNU-stack,"",%progbits
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
|||||||
Reference in New Issue
Block a user