The INPUT_SECTION_FLAGS linker script command is used to constrain the
section pattern matching to sections that match certain combinations of
flags.
There are two ways to express the constraint.
withFlags: Section must have these flags.
withoutFlags: Section must not have these flags.
The syntax of the command is:
INPUT_SECTION_FLAGS '(' sect_flag_list ')'
sect_flag_list: NAME
| sect_flag_list '&' NAME
Where NAME matches a section flag name such as SHF_EXECINSTR, or the
integer value of a section flag. If the first character of NAME is ! then
it means must not contain flag.
We do not support the rare case of { INPUT_SECTION_FLAGS(flags) filespec }
where filespec has no input section description like (.text).
As an example from the ld man page:
SECTIONS {
.text : { INPUT_SECTION_FLAGS (SHF_MERGE & SHF_STRINGS) *(.text) }
.text2 : { INPUT_SECTION_FLAGS (!SHF_WRITE) *(.text) }
}
.text will match sections called .text that have both the SHF_MERGE and
SHF_STRINGS flag.
.text2 will match sections called .text that don't have the SHF_WRITE flag.
The flag names accepted are the generic to all targets and SHF_ARM_PURECODE
as it is very useful to filter all the pure code sections into a single
program header that can be marked execute never.
fixes PR44265
Differential Revision: https://reviews.llvm.org/D72756
28 lines
605 B
ArmAsm
28 lines
605 B
ArmAsm
# REQUIRES: x86
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
|
|
# RUN: echo "SECTIONS { \
|
|
# RUN: . = SIZEOF_HEADERS; \
|
|
# RUN: .keep : { KEEP( INPUT_SECTION_FLAGS(!SHF_WRITE) *(.sec*)) } \
|
|
# RUN: }" > %t.script
|
|
# RUN: ld.lld --gc-sections -o %t --script %t.script %t.o
|
|
# RUN: llvm-readobj --symbols %t | FileCheck %s
|
|
|
|
## Check that INPUT_SECTION_FLAGS can be used within KEEP, and affects what
|
|
## is kept.
|
|
# CHECK: Name: keep
|
|
# CHECK-NOT: NAME: collect
|
|
.text
|
|
.global _start
|
|
_start:
|
|
.long 0
|
|
|
|
.section .sec1, "a"
|
|
.global keep
|
|
keep:
|
|
.long 1
|
|
|
|
.section .sec2, "aw"
|
|
.global collect
|
|
collect:
|
|
.long 2
|