[PATCH] D138135: [lld][ELF] Support LoongArch
Jinyang He via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 9 18:16:38 PST 2023
MQ-mengqing added a comment.
================
Comment at: lld/ELF/InputSection.cpp:653
+ // duplicate some logic here.
+ if (sym.isTls()) {
+ if (sym.hasFlag(NEEDS_TLSGD))
----------------
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)
```
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