1*fdd31965SFangrui Song# REQUIRES: x86 2*fdd31965SFangrui Song# RUN: split-file %s %t 3*fdd31965SFangrui Song# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/t.s -o %t.o 4*fdd31965SFangrui Song 5*fdd31965SFangrui Song## PR52534: https://bugs.llvm.org/show_bug.cgi?id=52534 6*fdd31965SFangrui Song## Check case where .preinit_array would be discarded in the absence of the 7*fdd31965SFangrui Song## start/stop symbols. 8*fdd31965SFangrui Song## Link should succeed without causing an out of range relocation error. 9*fdd31965SFangrui Song# RUN: ld.lld -T %t/discarded.script %t.o -o %t1 --image-base=0x80000000 10*fdd31965SFangrui Song# RUN: llvm-readelf -s %t1 | FileCheck --check-prefixes=CHECK,DISCARDED %s 11*fdd31965SFangrui Song 12*fdd31965SFangrui Song## Check case where .preinit_array is emitted but empty. 13*fdd31965SFangrui Song# RUN: ld.lld -T %t/empty.script %t.o -o %t2 14*fdd31965SFangrui Song# RUN: llvm-readelf -s %t2 | FileCheck --check-prefixes=CHECK,EMPTY %s 15*fdd31965SFangrui Song 16*fdd31965SFangrui Song# CHECK: [[#%x,ADDR:]] 0 NOTYPE LOCAL HIDDEN [[#]] __preinit_array_start 17*fdd31965SFangrui Song# CHECK-NEXT: [[#ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __preinit_array_end 18*fdd31965SFangrui Song 19*fdd31965SFangrui Song# DISCARDED-NEXT: {{0*}}[[#ADDR-14]] 0 NOTYPE GLOBAL DEFAULT [[#]] _start 20*fdd31965SFangrui Song 21*fdd31965SFangrui Song# EMPTY-NOT: [[#ADDR]] 0 NOTYPE GLOBAL DEFAULT [[#]] _start 22*fdd31965SFangrui Song# EMPTY: [[#ADDR]] 0 NOTYPE GLOBAL DEFAULT [[#]] ADDR 23*fdd31965SFangrui Song 24*fdd31965SFangrui Song#--- t.s 25*fdd31965SFangrui Song.global _start 26*fdd31965SFangrui Song_start: 27*fdd31965SFangrui Song movq __preinit_array_start@GOTPCREL(%rip),%rax 28*fdd31965SFangrui Song movq __preinit_array_end@GOTPCREL(%rip),%rax 29*fdd31965SFangrui Song 30*fdd31965SFangrui Song.section .rodata,"a" 31*fdd31965SFangrui Song.byte 0 32*fdd31965SFangrui Song 33*fdd31965SFangrui Song#--- discarded.script 34*fdd31965SFangrui SongSECTIONS { 35*fdd31965SFangrui Song .rodata : { *(.rodata); } 36*fdd31965SFangrui Song .text : { *(.text); } 37*fdd31965SFangrui Song .preinit_array : { *(.preinit_array); } 38*fdd31965SFangrui Song} 39*fdd31965SFangrui Song 40*fdd31965SFangrui Song#--- empty.script 41*fdd31965SFangrui SongSECTIONS { 42*fdd31965SFangrui Song .text : { *(.text); } 43*fdd31965SFangrui Song .preinit_array : { ADDR = .; *(.preinit_array); } 44*fdd31965SFangrui Song} 45