[PATCH] D138135: [lld][ELF] Support LoongArch

WÁNG Xuěruì via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 3 00:50:33 PDT 2023


xen0n marked 3 inline comments as done.
xen0n added inline comments.


================
Comment at: lld/ELF/InputSection.cpp:653
+    // duplicate some logic here.
+    if (sym.isTls()) {
+      if (sym.hasFlag(NEEDS_TLSGD))
----------------
MQ-mengqing wrote:
> xen0n wrote:
> > MQ-mengqing wrote:
> > > xen0n wrote:
> > > > MQ-mengqing wrote:
> > > > > xen0n wrote:
> > > > > > MQ-mengqing wrote:
> > > > > > > How about the "la.tls.ie" and "la.tls.gd" do the same symbol?
> > > > > > > How about the "la.tls.ie" and "la.tls.gd" do the same symbol?
> > > > > > 
> > > > > > What do you mean by "do the same symbol" here? Maybe you can tell me in a bit of Chinese if it's easier to explain that way... for now honestly I can't understand. (If you do attach some Chinese phrase I'll take care of translating it.)
> > > > > Sorry for the ambiguity words. I just care about the follows things,
> > > > > ```
> > > > > la.tls.ie $r4, y
> > > > > la.tls.gd $r5, y
> > > > > 
> > > > > .section .tbss
> > > > > .globl y
> > > > > y:
> > > > > .word   0
> > > > > .size   y, 4
> > > > > ```
> > > > > It plays differently with gnu as-ld.
> > > > I've located the TLS IE offset logic in the BFD code (IE symbol = offset by 2 GOT entries) and tried to do the same in LLD, but unfortunately the output was broken so I have to revert most of it. Sadly I won't have enough time to investigate before end of year.
> > > Ping for not getting reply about here for a long time.
> > > 
> > > File: test.s
> > > ```
> > > la.tls.ie $r4, y
> > > la.tls.gd $r5, y
> > > 
> > > .section .tbss
> > > .globl y
> > > y:
> > > .word   0
> > > .size   y, 4
> > > ```
> > > 
> > > Pre-cmd: 
> > >      $ llvm-mc -filetype=obj --triple=loongarch64 test.s -o test.o
> > >      $ ld.lld test.o -shared -o test.lld
> > >      $ ld test.o -shared -o test.ld
> > > 
> > > Compare1:
> > >     $ readelf -Wr test.{ld, lld}
> > > ```
> > > test.ld:
> > > 0000000000008008  0000000300000007 R_LARCH_TLS_DTPMOD64   0000000000000000 y + 0
> > > 0000000000008010  0000000300000009 R_LARCH_TLS_DTPREL64   0000000000000000 y + 0
> > > 0000000000008018  000000030000000b R_LARCH_TLS_TPREL64    0000000000000000 y + 0
> > > 
> > > test.lld:
> > > 0000000000020398  0000000100000002 R_LARCH_64             0000000000000000 y + 0
> > > 00000000000203a0  0000000100000007 R_LARCH_TLS_DTPMOD64   0000000000000000 y + 0
> > > 00000000000203a8  0000000100000009 R_LARCH_TLS_DTPREL64   0000000000000000 y + 0
> > > 00000000000203b0  000000010000000b R_LARCH_TLS_TPREL64    0000000000000000 y + 0
> > > ```
> > > Compare2:
> > >     $ objdump -d test.{ld, lld}
> > > ```
> > > test.ld:
> > > 0000000000000250 <.text>:
> > >  250:	1a000104 	pcalau12i   	$a0, 8(0x8)
> > >  254:	28c06084 	ld.d        	$a0, $a0, 24(0x18)
> > >  258:	1a000105 	pcalau12i   	$a1, 8(0x8)
> > >  25c:	02c020a5 	addi.d      	$a1, $a1, 8(0x8)
> > > 
> > > test.lld:
> > > 00000000000102d0 <.text>:
> > >    102d0:	1a000204 	pcalau12i   	$a0, 16(0x10)
> > >    102d4:	28ce8084 	ld.d        	$a0, $a0, 928(0x3a0)
> > >    102d8:	1a000205 	pcalau12i   	$a1, 16(0x10)
> > >    102dc:	02ce80a5 	addi.d      	$a1, $a1, 928(0x3a0)
> > > ```
> > Actually I'm not sure if the behavior difference is mission-critical, as things fully work (or at least seems to) when I bootstrapped Gentoo with LLVM/Clang. Do you want me to take care of this before merging the whole thing?
> It not matters, it is hard to happen, maybe. It is a hidden danger
> and developers should notice something may wrong if that occurs.
> But, I also think it is not mission-critical. It can be documented and
> fixed later.
Okay, I'll soon add the test case but note the current behavioral difference so we can get to fix it later.

Sorry for not handling this as promptly as I'd like to; real life and other reasons kick in.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138135/new/

https://reviews.llvm.org/D138135



More information about the llvm-commits mailing list