diff options
author | Landon Fuller <landonf@bikemonkey.org> | 2010-09-18 16:21:32 -0700 |
---|---|---|
committer | Landon Fuller <landonf@bikemonkey.org> | 2010-09-18 16:21:32 -0700 |
commit | 6b452bafaec498df975ba8ac4c99de174e5f74f7 (patch) | |
tree | 809b488f7f0c33327f0a576753def636d07c7639 /src | |
parent | 8ddac835b6f8b54ede764d0ea977dee4c82e2d67 (diff) | |
download | libffi-6b452bafaec498df975ba8ac4c99de174e5f74f7.tar.gz |
Apple assembler support; fixed most gas/ELF-isms.
Diffstat (limited to 'src')
-rw-r--r-- | src/arm/sysv.S | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/src/arm/sysv.S b/src/arm/sysv.S index 5ffb101..2593c48 100644 --- a/src/arm/sysv.S +++ b/src/arm/sysv.S @@ -39,7 +39,11 @@ #else #define CNAME(x) x #endif +#ifdef __APPLE__ +#define ENTRY(x) .globl CNAME(x); CNAME(x): +#else #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): +#endif /* __APPLE__ */ #endif #ifdef __ELF__ @@ -111,43 +115,37 @@ .align 0 .thumb .thumb_func +#ifdef __APPLE__ + ENTRY($0) +#else ENTRY(\name) +#endif bx pc nop .arm UNWIND .fnstart /* A hook to tell gdb that we've switched to ARM mode. Also used to call directly from other local arm routines. */ -_L__\name: +#ifdef __APPLE__ +_L__$0: +#else +_L__\name: +#endif .endm #else .macro ARM_FUNC_START name .text .align 0 .arm +#ifdef __APPLE__ + ENTRY($0) +#else ENTRY(\name) +#endif UNWIND .fnstart .endm #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 @ r1: &ecif @ r2: cif->bytes @@ -230,11 +228,18 @@ ARM_FUNC_START ffi_call_SYSV #endif 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: UNWIND .fnend +#ifdef __ELF__ .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) +#endif /* unsigned int FFI_HIDDEN @@ -306,7 +311,9 @@ ARM_FUNC_START ffi_closure_SYSV .ffi_closure_SYSV_end: UNWIND .fnend +#ifdef __ELF__ .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#endif #if defined __ELF__ && defined __linux__ .section .note.GNU-stack,"",%progbits |