Issue 184757
Summary [lld][LoongArch][RISCV] Crash when relaxation pass encounters synthetic sections
Labels
Assignees
Reporter wangleiat
    ```
# REQUIRES: loongarch, riscv
# RUN: rm -rf %t && split-file %s %t

## Test LoongArch
# RUN: llvm-mc --filetype=obj -triple=loongarch64 %t/la.s -o %t/la.o
# RUN: ld.lld -T %t/a.ld %t/la.o -o %t/la.out

## Test RISC-V
# RUN: llvm-mc --filetype=obj -triple=riscv64 %t/rv.s -o %t/rv.o
# RUN: ld.lld -T %t/a.ld %t/rv.o -o %t/rv.out

#--- la.s
.global _start
_start:
  pcalau12i $a0, %got_pc_hi20(sym)
  ld.d $a0, $a0, %got_pc_lo12(sym)

.data
sym:
  .word 0

#--- rv.s
.global _start
_start:
1:
  auipc a0, %got_pcrel_hi(sym)
  ld a0, %pcrel_lo(1b)(a0)

.data
sym:
  .word 0

#--- a.ld
SECTIONS {
  .text : {
    *(.text)
    *(.got)
  }
}
```
error message:
```
 #0 0x00007fee135405a8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/wanglei/llvm-clang/22.x/_build/bin/../lib/libLLVM.so.22.1+0x5b405a8)
 #1 0x00007fee1353dbc5 llvm::sys::RunSignalHandlers() (/home/wanglei/llvm-clang/22.x/_build/bin/../lib/libLLVM.so.22.1+0x5b3dbc5)
 #2 0x00007fee13541381 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007fee0d45a050 (/lib/x86_64-linux-gnu/libc.so.6+0x3c050)
 #4 0x00007fee0d570a22 __memcpy_avx_unaligned_erms ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:350:0
 #5 0x00005639ff7d4b4b (anonymous namespace)::RISCV::finalizeRelax(int) const RISCV.cpp:0:0
 #6 0x00005639ff9ba071 (anonymous namespace)::Writer<llvm::object::ELFType<(llvm::endianness)1, true>>::finalizeSections() Writer.cpp:0:0
 #7 0x00005639ff991845 void lld::elf::writeResult<llvm::object::ELFType<(llvm::endianness)1, true>>(lld::elf::Ctx&) (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x55d845)
 #8 0x00005639ff78462c void lld::elf::LinkerDriver::link<llvm::object::ELFType<(llvm::endianness)1, true>>(llvm::opt::InputArgList&) (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x35062c)
 #9 0x00005639ff765a65 lld::elf::LinkerDriver::linkerMain(llvm::ArrayRef<char const*>) (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x331a65)
#10 0x00005639ff762077 lld::elf::link(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x32e077)
#11 0x00005639ff672fad lld::unsafeLldMain(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, llvm::ArrayRef<lld::DriverDef>, bool) (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x23efad)
#12 0x00005639ff67215d lld_main(int, char**, llvm::ToolContext const&) (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x23e15d)
#13 0x00005639ff6726d7 main (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x23e6d7)
#14 0x00007fee0d44524a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#15 0x00007fee0d445305 call_init ./csu/../csu/libc-start.c:128:20
#16 0x00007fee0d445305 __libc_start_main ./csu/../csu/libc-start.c:347:5
#17 0x00005639ff671d81 _start (/home/wanglei/llvm-clang/22.x/_build/bin/ld.lld+0x23dd81)
[1]    2267788 segmentation fault  /home/wanglei/llvm-clang/22.x/_build/bin/ld.lld -T   -o 
```
Note:Such a linker script layout—merging .text and .got into a single output section—is typically used in bootloaders or standalone bare-metal binaries where a simple memory layout is required.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to