LLD removes empty output sections otherwise specified in the linker script. Prior to this change however, if section descriptions included ANY kind of symbol assignment, then the consequent output section would not be removed, even if the assignment was marked with PROVIDE and not actually triggered (i.e. the symbol was never referenced). This change modifies the isDiscarable function to ignore such directives when determining whether a section should be discarded, in keeping with bfd's behaviour. Symbol assignments that do result in a symbol definition will continue to result in a kept section (this is not actually the same as bfd's behaviour, but it is simpler, and probably makes more sense). Reviewed By: grimar Differential Revision: https://reviews.llvm.org/D48771 llvm-svn: 336184
31 lines
1.3 KiB
ArmAsm
31 lines
1.3 KiB
ArmAsm
# REQUIRES: x86
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %tundefined.o
|
|
# RUN: echo "foo=42" | llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o %tdefined.o
|
|
# RUN: echo "call foo" | llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o %treference.o
|
|
|
|
# RUN: echo "SECTIONS { .bar : { PROVIDE(foo = .); } }" > %t.script
|
|
|
|
# Case 1: Provided symbol is undefined and not referenced - empty section should be removed.
|
|
# RUN: ld.lld %tundefined.o -T %t.script -o %t1.elf
|
|
# RUN: llvm-readobj -sections %t1.elf | FileCheck %s --check-prefix=NOSECTION
|
|
|
|
# Case 2: Provided symbol is undefined and referenced - empty section should not be removed.
|
|
# RUN: ld.lld %tundefined.o %treference.o -T %t.script -o %t2.elf
|
|
# RUN: llvm-readobj -sections %t2.elf | FileCheck %s --check-prefix=SECTION
|
|
|
|
# Case 3: Provided symbol is defined and not referenced - empty section should be removed.
|
|
# RUN: ld.lld %tdefined.o -T %t.script -o %t3.elf
|
|
# RUN: llvm-readobj -sections %t3.elf | FileCheck %s --check-prefix=NOSECTION
|
|
|
|
# Case 4: Provided symbol is defined and referenced - empty section should not be removed.
|
|
# RUN: ld.lld %tdefined.o %treference.o -T %t.script -o %t4.elf
|
|
# RUN: llvm-readobj -sections %t4.elf | FileCheck %s --check-prefix=SECTION
|
|
|
|
.global _start
|
|
_start:
|
|
ret
|
|
|
|
# SECTION: .bar
|
|
# NOSECTION-NOT: .bar
|