mirror of
git://git.musl-libc.org/musl
synced 2025-01-10 08:39:56 +00:00
0beb9dfbec
unlike other asm where the baseline ISA is used, these functions are hot paths and use ISA-level specializations. call-clobbered vfp registers are saved before calling __tls_get_new, since there is no guarantee it won't use them. while setjmp/longjmp have to use hwcap to decide whether to the fpu is in use, since application code could be using vfp registers even if libc was compiled as pure softfloat, __tls_get_new is part of libc and can be assumed not to have access to vfp registers if tlsdesc.S does not. thus it suffices just to check the predefined preprocessor macros. the check for __ARM_PCS_VFP is redundant; !__SOFTFP__ must always be true if the target ISA level includes fpu instructions/registers.
35 lines
777 B
C
35 lines
777 B
C
#include <endian.h>
|
|
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
#define ENDIAN_SUFFIX "eb"
|
|
#else
|
|
#define ENDIAN_SUFFIX ""
|
|
#endif
|
|
|
|
#if __ARM_PCS_VFP
|
|
#define FP_SUFFIX "hf"
|
|
#else
|
|
#define FP_SUFFIX ""
|
|
#endif
|
|
|
|
#define LDSO_ARCH "arm" ENDIAN_SUFFIX FP_SUFFIX
|
|
|
|
#define NO_LEGACY_INITFINI
|
|
|
|
#define TPOFF_K 0
|
|
|
|
#define REL_SYMBOLIC R_ARM_ABS32
|
|
#define REL_GOT R_ARM_GLOB_DAT
|
|
#define REL_PLT R_ARM_JUMP_SLOT
|
|
#define REL_RELATIVE R_ARM_RELATIVE
|
|
#define REL_COPY R_ARM_COPY
|
|
#define REL_DTPMOD R_ARM_TLS_DTPMOD32
|
|
#define REL_DTPOFF R_ARM_TLS_DTPOFF32
|
|
#define REL_TPOFF R_ARM_TLS_TPOFF32
|
|
#define REL_TLSDESC R_ARM_TLS_DESC
|
|
|
|
#define TLSDESC_BACKWARDS
|
|
|
|
#define CRTJMP(pc,sp) __asm__ __volatile__( \
|
|
"mov sp,%1 ; bx %0" : : "r"(pc), "r"(sp) : "memory" )
|