1*c9945492SAndroid Build Coastguard Worker #if __mips_isa_rev >= 6 2*c9945492SAndroid Build Coastguard Worker #define ISA_SUFFIX "r6" 3*c9945492SAndroid Build Coastguard Worker #else 4*c9945492SAndroid Build Coastguard Worker #define ISA_SUFFIX "" 5*c9945492SAndroid Build Coastguard Worker #endif 6*c9945492SAndroid Build Coastguard Worker 7*c9945492SAndroid Build Coastguard Worker #if __BYTE_ORDER == __LITTLE_ENDIAN 8*c9945492SAndroid Build Coastguard Worker #define ENDIAN_SUFFIX "el" 9*c9945492SAndroid Build Coastguard Worker #else 10*c9945492SAndroid Build Coastguard Worker #define ENDIAN_SUFFIX "" 11*c9945492SAndroid Build Coastguard Worker #endif 12*c9945492SAndroid Build Coastguard Worker 13*c9945492SAndroid Build Coastguard Worker #ifdef __mips_soft_float 14*c9945492SAndroid Build Coastguard Worker #define FP_SUFFIX "-sf" 15*c9945492SAndroid Build Coastguard Worker #else 16*c9945492SAndroid Build Coastguard Worker #define FP_SUFFIX "" 17*c9945492SAndroid Build Coastguard Worker #endif 18*c9945492SAndroid Build Coastguard Worker 19*c9945492SAndroid Build Coastguard Worker #define LDSO_ARCH "mips64" ISA_SUFFIX ENDIAN_SUFFIX FP_SUFFIX 20*c9945492SAndroid Build Coastguard Worker 21*c9945492SAndroid Build Coastguard Worker #define TPOFF_K (-0x7000) 22*c9945492SAndroid Build Coastguard Worker 23*c9945492SAndroid Build Coastguard Worker #define REL_SYM_OR_REL 4611 24*c9945492SAndroid Build Coastguard Worker #define REL_PLT R_MIPS_JUMP_SLOT 25*c9945492SAndroid Build Coastguard Worker #define REL_COPY R_MIPS_COPY 26*c9945492SAndroid Build Coastguard Worker #define REL_DTPMOD R_MIPS_TLS_DTPMOD64 27*c9945492SAndroid Build Coastguard Worker #define REL_DTPOFF R_MIPS_TLS_DTPREL64 28*c9945492SAndroid Build Coastguard Worker #define REL_TPOFF R_MIPS_TLS_TPREL64 29*c9945492SAndroid Build Coastguard Worker 30*c9945492SAndroid Build Coastguard Worker #include <endian.h> 31*c9945492SAndroid Build Coastguard Worker 32*c9945492SAndroid Build Coastguard Worker #undef R_TYPE 33*c9945492SAndroid Build Coastguard Worker #undef R_SYM 34*c9945492SAndroid Build Coastguard Worker #undef R_INFO 35*c9945492SAndroid Build Coastguard Worker #define R_TYPE(x) (be64toh(x)&0x7fffffff) 36*c9945492SAndroid Build Coastguard Worker #define R_SYM(x) (be32toh(be64toh(x)>>32)) 37*c9945492SAndroid Build Coastguard Worker #define R_INFO(s,t) (htobe64((uint64_t)htobe32(s)<<32 | (uint64_t)t)) 38*c9945492SAndroid Build Coastguard Worker 39*c9945492SAndroid Build Coastguard Worker #define NEED_MIPS_GOT_RELOCS 1 40*c9945492SAndroid Build Coastguard Worker #define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP 41*c9945492SAndroid Build Coastguard Worker #define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL 42*c9945492SAndroid Build Coastguard Worker #define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT)) 43*c9945492SAndroid Build Coastguard Worker 44*c9945492SAndroid Build Coastguard Worker #define CRTJMP(pc,sp) __asm__ __volatile__( \ 45*c9945492SAndroid Build Coastguard Worker "move $sp,%1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" ) 46*c9945492SAndroid Build Coastguard Worker 47*c9945492SAndroid Build Coastguard Worker #define GETFUNCSYM(fp, sym, got) __asm__ ( \ 48*c9945492SAndroid Build Coastguard Worker ".hidden " #sym "\n" \ 49*c9945492SAndroid Build Coastguard Worker ".set push \n" \ 50*c9945492SAndroid Build Coastguard Worker ".set noreorder \n" \ 51*c9945492SAndroid Build Coastguard Worker ".align 8 \n" \ 52*c9945492SAndroid Build Coastguard Worker " bal 1f \n" \ 53*c9945492SAndroid Build Coastguard Worker " nop \n" \ 54*c9945492SAndroid Build Coastguard Worker " .gpdword . \n" \ 55*c9945492SAndroid Build Coastguard Worker " .gpdword " #sym " \n" \ 56*c9945492SAndroid Build Coastguard Worker "1: ld %0, ($ra) \n" \ 57*c9945492SAndroid Build Coastguard Worker " dsubu %0, $ra, %0 \n" \ 58*c9945492SAndroid Build Coastguard Worker " ld $ra, 8($ra) \n" \ 59*c9945492SAndroid Build Coastguard Worker " daddu %0, %0, $ra \n" \ 60*c9945492SAndroid Build Coastguard Worker ".set pop \n" \ 61*c9945492SAndroid Build Coastguard Worker : "=r"(*(fp)) : : "memory", "ra" ) 62