
Add an unique suffix to .sbss/.sdata if -fdata-sections. Without assigning an unique .sbss/.sdata section to each symbols, a linker may not be able to remove unused part when gc-section since all used and unused symbols are all mixed in the same .sbss/.sdata section. I believe this also matches the behavior of gcc.
39 lines
1.5 KiB
LLVM
39 lines
1.5 KiB
LLVM
; RUN: llc -mtriple=riscv32 -data-sections < %s | FileCheck -check-prefix=RV32 %s
|
|
; RUN: llc -mtriple=riscv64 -data-sections < %s | FileCheck -check-prefix=RV64 %s
|
|
|
|
; Append an unique name to each sdata/sbss section when -data-section.
|
|
|
|
@v = dso_local global i32 0, align 4
|
|
@r = dso_local global i64 7, align 8
|
|
|
|
; If a symbol has an explicit section name, we should honor it.
|
|
@vv = dso_local global i32 0, section ".sbss", align 4
|
|
@rr = dso_local global i64 7, section ".sdata", align 8
|
|
@bb = dso_local global i32 0, section ".sbss_like", align 4
|
|
@tt = dso_local global i64 7, section ".sdata_like", align 8
|
|
@nn = dso_local global i32 0, section ".custom_a", align 4
|
|
@yy = dso_local global i64 7, section ".custom_b", align 8
|
|
|
|
; SmallDataLimit set to 8, so we expect @v will be put in sbss
|
|
; and @r will be put in sdata.
|
|
!llvm.module.flags = !{!0}
|
|
!0 = !{i32 8, !"SmallDataLimit", i32 8}
|
|
|
|
; RV32: .section .sbss.v,"aw"
|
|
; RV32: .section .sdata.r,"aw"
|
|
; RV32: .section .sbss,"aw"
|
|
; RV32: .section .sdata,"aw"
|
|
; RV32: .section .sbss_like,"aw"
|
|
; RV32: .section .sdata_like,"aw"
|
|
; RV32: .section .custom_a,"aw"
|
|
; RV32: .section .custom_b,"aw"
|
|
|
|
; RV64: .section .sbss.v,"aw"
|
|
; RV64: .section .sdata.r,"aw"
|
|
; RV64: .section .sbss,"aw"
|
|
; RV64: .section .sdata,"aw"
|
|
; RV64: .section .sbss_like,"aw"
|
|
; RV64: .section .sdata_like,"aw"
|
|
; RV64: .section .custom_a,"aw"
|
|
; RV64: .section .custom_b,"aw"
|