Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lld/ELF/Relocations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2526,7 +2526,8 @@ void elf::hexagonTLSSymbolUpdate(Ctx &ctx) {
for (Relocation &rel : isec->relocs())
if (rel.sym->type == llvm::ELF::STT_TLS && rel.expr == R_PLT_PC) {
if (needEntry) {
sym->allocateAux(ctx);
if (sym->auxIdx == 0)
sym->allocateAux(ctx);
addPltEntry(ctx, *ctx.in.plt, *ctx.in.gotPlt, *ctx.in.relaPlt,
ctx.target->pltRel, *sym);
needEntry = false;
Expand Down
36 changes: 36 additions & 0 deletions lld/test/ELF/hexagon-tls-allocateaux-multiple.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# REQUIRES: hexagon
# RUN: rm -rf %t && split-file %s %t && cd %t
# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf one.s -o one.o
# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf two.s -o two.o
# RUN: ld.lld -shared one.o two.o -o %t.so
Copy link
Member

@MaskRay MaskRay Jul 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With split-file and cd, we can use out.so instead of %t.so (ensure all output files are within %t)

# RUN: llvm-readobj -r %t.so | FileCheck --check-prefix=RELOC %s

#--- one.s
.globl _start
.type _start, @function

_start:
r2 = add(pc,##_GLOBAL_OFFSET_TABLE_@PCREL)
r0 = add(r2,##tls_var@GDGOT)
call tls_var@GDPLT
jumpr r31

.section .tdata,"awT",@progbits
.globl tls_var
.type tls_var, @object
tls_var:
.word 0x1234

#--- two.s
.globl other_func
.type other_func, @function

other_func:
## Direct call to __tls_get_addr - this creates another path that may
## try to allocate auxiliary data for the same symbol
call __tls_get_addr
jumpr r31

# RELOC: Section ({{.*}}) .rela.plt {
# RELOC: R_HEX_JMP_SLOT __tls_get_addr 0x0
# RELOC: }
Loading