mirror of git://git.musl-libc.org/musl
riscv: add TLSDESC support
This commit is contained in:
parent
2e1bb87af2
commit
407aea628a
|
@ -17,6 +17,7 @@
|
||||||
#define REL_DTPMOD R_RISCV_TLS_DTPMOD64
|
#define REL_DTPMOD R_RISCV_TLS_DTPMOD64
|
||||||
#define REL_DTPOFF R_RISCV_TLS_DTPREL64
|
#define REL_DTPOFF R_RISCV_TLS_DTPREL64
|
||||||
#define REL_TPOFF R_RISCV_TLS_TPREL64
|
#define REL_TPOFF R_RISCV_TLS_TPREL64
|
||||||
|
#define REL_TLSDESC R_RISCV_TLSDESC
|
||||||
|
|
||||||
#define CRTJMP(pc,sp) __asm__ __volatile__( \
|
#define CRTJMP(pc,sp) __asm__ __volatile__( \
|
||||||
"mv sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" )
|
"mv sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" )
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
.text
|
||||||
|
.global __tlsdesc_static
|
||||||
|
.hidden __tlsdesc_static
|
||||||
|
.type __tlsdesc_static,%function
|
||||||
|
__tlsdesc_static:
|
||||||
|
ld a0,8(a0)
|
||||||
|
jr t0
|
||||||
|
|
||||||
|
.global __tlsdesc_dynamic
|
||||||
|
.hidden __tlsdesc_dynamic
|
||||||
|
.type __tlsdesc_dynamic,%function
|
||||||
|
__tlsdesc_dynamic:
|
||||||
|
add sp,sp,-16
|
||||||
|
sd t1,(sp)
|
||||||
|
sd t2,8(sp)
|
||||||
|
|
||||||
|
ld t2,-8(tp) # t2=dtv
|
||||||
|
|
||||||
|
ld a0,8(a0) # a0=&{modidx,off}
|
||||||
|
ld t1,8(a0) # t1=off
|
||||||
|
ld a0,(a0) # a0=modidx
|
||||||
|
sll a0,a0,3 # a0=8*modidx
|
||||||
|
|
||||||
|
add a0,a0,t2 # a0=dtv+8*modidx
|
||||||
|
ld a0,(a0) # a0=dtv[modidx]
|
||||||
|
add a0,a0,t1 # a0=dtv[modidx]+off
|
||||||
|
sub a0,a0,tp # a0=dtv[modidx]+off-tp
|
||||||
|
|
||||||
|
ld t1,(sp)
|
||||||
|
ld t2,8(sp)
|
||||||
|
add sp,sp,16
|
||||||
|
jr t0
|
Loading…
Reference in New Issue