This reverts a side effect introduced in the code cleanup patch D43571: LLD started to emit empty output sections that are explicitly assigned to a segment. This patch fixes the issue by removing the !sec.phdrs.empty() special case from isDiscardable. As compensation, we add an early phdrs propagation step (see the inline comment). This is similar to one that we do in adjustSectionsAfterSorting. Differential revision: https://reviews.llvm.org/D92301
35 lines
763 B
ArmAsm
35 lines
763 B
ArmAsm
# REQUIRES: x86
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
|
|
# RUN: echo "PHDRS { \
|
|
# RUN: exec PT_LOAD FLAGS(0x4 | 0x1); \
|
|
# RUN: rw PT_LOAD FLAGS(0x4 | 0x2); \
|
|
# RUN: } \
|
|
# RUN: SECTIONS { \
|
|
# RUN: .text : { *(.text) } :exec \
|
|
# RUN: .empty : { *(.empty) } :rw \
|
|
# RUN: .rw : { *(.rw) } \
|
|
# RUN: }" > %t.script
|
|
# RUN: ld.lld -o %t --script %t.script %t.o
|
|
# RUN: llvm-readelf -S -l %t | FileCheck %s
|
|
|
|
## Check that the orphan section is placed correctly and belongs to
|
|
## the correct segment.
|
|
|
|
# CHECK: Section Headers
|
|
# CHECK: .text
|
|
# CHECK-NEXT: .orphan
|
|
# CHECK-NEXT: .rw
|
|
|
|
# CHECK: Segment Sections
|
|
# CHECK-NEXT: .text .orphan
|
|
# CHECK-NEXT: .rw
|
|
|
|
.section .text,"ax"
|
|
ret
|
|
|
|
.section .rw,"aw"
|
|
.quad 0
|
|
|
|
.section .orphan,"ax"
|
|
ret
|