# RUN: yaml2obj %s -o %t # RUN: llvm-objcopy --set-section-type=.foo=14 --set-section-type .bar=0xf %t %t.1 # RUN: llvm-readobj --sections %t.1 | FileCheck %s # RUN: llvm-objcopy --set-section-type=.foo=13 --set-section-type=.foo=14 --set-section-type .bar=0xf %t %t.1 # RUN: llvm-readobj --sections %t.1 | FileCheck %s # CHECK: Name: .foo # CHECK-NEXT: Type: SHT_INIT_ARRAY (0xE) # CHECK-NEXT: Flags [ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: ] # CHECK: Name: .bar # CHECK-NEXT: Type: SHT_FINI_ARRAY (0xF) # CHECK-NEXT: Flags [ # CHECK-NEXT: ] ## --set-section-flags does not specify "readonly", so the output gets SHF_WRITE. ## "contents" changes SHT_NOBITS to SHT_PROGBITS, but this is overridden by --set-section-type. ## sh_type is a uint32_t. There is no diagnostic for an overflow value. # RUN: llvm-objcopy --set-section-flags=.foo=alloc,contents --set-section-type=.foo=0x10000000a %t %t.2 2>&1 | count 0 # RUN: llvm-readobj --sections %t.2 | FileCheck %s --check-prefix=CHECK2 # CHECK2: Name: .foo # CHECK2-NEXT: Type: SHT_SHLIB # CHECK2-NEXT: Flags [ # CHECK2-NEXT: SHF_ALLOC # CHECK2-NEXT: SHF_WRITE # CHECK2-NEXT: ] # RUN: not llvm-objcopy --set-section-type=.foo %t /dev/null 2>&1 | FileCheck %s --check-prefix=BAD-FORMAT # BAD-FORMAT: bad format for --set-section-type: missing '=' # RUN: not llvm-objcopy --set-section-type==4 %t /dev/null 2>&1 | FileCheck %s --check-prefix=MISSING-SECTION # MISSING-SECTION: error: bad format for --set-section-type: missing section name # RUN: not llvm-objcopy --set-section-type=.foo=aaa %t /dev/null 2>&1 | FileCheck %s --check-prefix=INVALID-TYPE # INVALID-TYPE: error: invalid value for --set-section-type: 'aaa' !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .foo Type: SHT_NOBITS Flags: [ SHF_ALLOC ] - Name: .bar Type: SHT_PROGBITS Flags: [ ]