
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
14 lines
469 B
Plaintext
14 lines
469 B
Plaintext
# REQUIRES: x86
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o %t.o
|
|
# RUN: not ld.lld -shared %t.o -o /dev/null --script %s 2>&1 | FileCheck -strict-whitespace %s
|
|
|
|
## Check that flags are separated by &
|
|
|
|
SECTIONS {
|
|
.text : { INPUT_SECTION_FLAGS(SHF_ALLOC SHF_EXECINSTR) *(.text) }
|
|
}
|
|
|
|
// CHECK: expected & or )
|
|
// CHECK-NEXT: >>> .text : { INPUT_SECTION_FLAGS(SHF_ALLOC SHF_EXECINSTR) *(.text) }
|
|
// CHECK-NEXT: >>> ^
|