|
Message-ID: <20240909134733.GV10433@brightrain.aerifal.cx> Date: Mon, 9 Sep 2024 09:47:33 -0400 From: Rich Felker <dalias@...c.org> To: lixing <lixing@...ngson.cn> Cc: musl@...ts.openwall.com, wanghongliang@...ngson.cn Subject: Re: [patch] loongarch64 add TLSDESC support On Mon, Sep 09, 2024 at 04:04:57PM +0800, lixing wrote: > arch/loongarch64/reloc.h | 1 + > > include/elf.h | 1 + > src/ldso/loongarch64/tlsdesc.s | 37 ++++++++++++++++++++++++++++++++++ > 3 files changed, 39 insertions(+) > create mode 100644 src/ldso/loongarch64/tlsdesc.s > > diff --git a/arch/loongarch64/reloc.h b/arch/loongarch64/reloc.h > index 61eaca9e..a4db6a9c 100644 > --- a/arch/loongarch64/reloc.h > +++ b/arch/loongarch64/reloc.h > @@ -17,6 +17,7 @@ > #define REL_TPOFF R_LARCH_TLS_TPREL64 > #define REL_RELATIVE R_LARCH_RELATIVE > #define REL_SYMBOLIC R_LARCH_64 > +#define REL_TLSDESC R_LARCH_TLS_DESC64 > > #define CRTJMP(pc,sp) __asm__ __volatile__( \ > "move $sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" ) > diff --git a/include/elf.h b/include/elf.h > index 3d5e13e4..8b622f63 100644 > --- a/include/elf.h > +++ b/include/elf.h > @@ -3329,6 +3329,7 @@ enum > #define R_LARCH_TLS_TPREL32 10 > #define R_LARCH_TLS_TPREL64 11 > #define R_LARCH_IRELATIVE 12 > +#define R_LARCH_TLS_DESC64 14 > #define R_LARCH_MARK_LA 20 > #define R_LARCH_MARK_PCREL 21 > #define R_LARCH_SOP_PUSH_PCREL 22 > diff --git a/src/ldso/loongarch64/tlsdesc.s b/src/ldso/loongarch64/tlsdesc.s > new file mode 100644 > index 00000000..4b6ea0e5 > --- /dev/null > +++ b/src/ldso/loongarch64/tlsdesc.s > @@ -0,0 +1,37 @@ > +.text > +.global __tlsdesc_static > +.hidden __tlsdesc_static > +.type __tlsdesc_static,%function > +__tlsdesc_static: > + ld.d $a0, $a0, 8 > + jr $ra > +# size_t __tlsdesc_dynamic(size_t *a) > +# { > +# struct {size_t modidx,off;} *p = (void*)a[1]; > +# size_t *dtv = *(size_t**)(tp - 8); > +# return dtv[p->modidx] + p->off - tp; > +# } > +.global __tlsdesc_dynamic > +.hidden __tlsdesc_dynamic > +.type __tlsdesc_dynamic,%function > +__tlsdesc_dynamic: > + addi.d $sp, $sp, -16 > + st.d $t1, $sp, 0 > + st.d $t2, $sp, 8 > + > + ld.d $t2, $tp, -8 # t2=dtv > + > + ld.d $a0, $a0, 8 # a0=&{modidx,off} > + ld.d $t1, $a0, 8 # t1=off > + ld.d $a0, $a0, 0 # a0=modidx > + slli.d $a0, $a0, 3 # a0=8*modidx > + > + add.d $a0, $a0, $t2 # a0=dtv+8*modidx > + ld.d $a0, $a0, 0 # a0=dtv[modidx] > + add.d $a0, $a0, $t1 # a0=dtv[modidx]+off > + sub.d $a0, $a0, $tp # a0=dtv[modidx]+off-tp > + > + ld.d $t1, $sp, 0 > + ld.d $t2, $sp, 8 > + addi.d $sp, $sp, 16 > + jr $ra I haven't read the asm in detail but at least structurally this patch looks right. However, your mail application has completely botched the patch contents, replacing spaces and tabs with U+00A0 nonbreaking space characters. This makes it impossible to apply except by manually fixing everything. If you can't configure it not to do that, can you please send patches as plaintext attachments instead of inline, so they don't get changed by the mailer? Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.