1## Check incompatible options. 2# RUN: not llvm-objcopy --remove-note=1 --remove-section=.test - 2>&1 | FileCheck %s --check-prefix=ERR-REMSEC 3# RUN: not llvm-objcopy --remove-note=1 --add-section=.test=%s - 2>&1 | FileCheck %s --check-prefix=ERR-ADDSEC 4# RUN: not llvm-objcopy --remove-note=1 --update-section=.test=%s - 2>&1 | FileCheck %s --check-prefix=ERR-UPDSEC 5 6# ERR-REMSEC: error: cannot specify both --remove-note and --remove-section 7# ERR-ADDSEC: error: cannot specify both --remove-note and --add-section 8# ERR-UPDSEC: error: cannot specify both --remove-note and --update-section 9 10## Check invalid argument formats. 11# RUN: not llvm-objcopy --remove-note= - 2>&1 | FileCheck %s --check-prefix=ERR-NOTYPEID 12# RUN: not llvm-objcopy --remove-note=CORE/ - 2>&1 | FileCheck %s --check-prefix=ERR-NOTYPEID 13# RUN: not llvm-objcopy --remove-note=/1 - 2>&1 | FileCheck %s --check-prefix=ERR-EMPTYNAME 14# RUN: not llvm-objcopy --remove-note=CORE/1/2 - 2>&1 | FileCheck %s --check-prefix=ERR-INVNUM1 15# RUN: not llvm-objcopy --remove-note=Notanumber - 2>&1 | FileCheck %s --check-prefix=ERR-INVNUM2 16# RUN: not llvm-objcopy --remove-note=CORE/Notanumber - 2>&1 | FileCheck %s --check-prefix=ERR-INVNUM2 17 18# ERR-NOTYPEID: error: bad format for --remove-note, missing type_id 19# ERR-EMPTYNAME: error: bad format for --remove-note, note name is empty 20# ERR-INVNUM1: error: bad note type_id for --remove-note: '1/2' 21# ERR-INVNUM2: error: bad note type_id for --remove-note: 'Notanumber' 22 23## Check deleting notes: 24## * --remove-note=1 will remove note "CORE/1" and "LINUX/1", 25## * --remove-note=DUMMY/2 will not remove any notes because there are no notes with this owner, 26## * --remove-note=CORE/3 will remove "CORE/3" but preserve "LINUX/3". 27# RUN: yaml2obj --docnum=1 -D ALIGN=8 -D ELFCLASS=64 -D ENDIANNESS=LSB %s -o %t8.64.lsb 28# RUN: llvm-objcopy --remove-note=0x01 --remove-note=DUMMY/2 --remove-note=CORE/0x03 %t8.64.lsb %t8.64.lsb.o 29# RUN: llvm-readobj --segments --sections --notes %t8.64.lsb.o | \ 30# RUN: FileCheck %s -D#SIZE0=32 -D#SIZE1=64 31 32# RUN: yaml2obj --docnum=1 -D ALIGN=4 -D ELFCLASS=64 -D ENDIANNESS=MSB %s -o %t4.64.msb 33# RUN: llvm-objcopy --remove-note=0x01 --remove-note=DUMMY/0x02 --remove-note=CORE/3 %t4.64.msb %t4.64.msb.o 34# RUN: llvm-readobj --segments --sections --notes %t4.64.msb.o | \ 35# RUN: FileCheck %s -D#SIZE0=24 -D#SIZE1=48 36 37# RUN: yaml2obj --docnum=1 -D ALIGN=4 -D ELFCLASS=32 -D ENDIANNESS=LSB %s -o %t4.32.lsb 38# RUN: llvm-objcopy --remove-note=1 --remove-note=DUMMY/0x02 --remove-note=CORE/3 %t4.32.lsb %t4.32.lsb.o 39# RUN: llvm-readobj --segments --sections --notes %t4.32.lsb.o | \ 40# RUN: FileCheck %s -D#SIZE0=24 -D#SIZE1=48 41 42# CHECK: Sections [ 43# CHECK: Section { 44# CHECK: Name: .note0 45# CHECK-NEXT: Type: SHT_NOTE 46# CHECK-NEXT: Flags [ 47# CHECK-NEXT: ] 48# CHECK-NEXT: Address: 49# CHECK-NEXT: Offset: 50# CHECK-NEXT: Size: [[#%d,SIZE0]] 51# CHECK: Name: .note1 52# CHECK-NEXT: Type: SHT_NOTE 53# CHECK-NEXT: Flags [ 54# CHECK-NEXT: ] 55# CHECK-NEXT: Address: 56# CHECK-NEXT: Offset: 57# CHECK-NEXT: Size: [[#%d,SIZE1]] 58# CHECK: Name: .note2 59# CHECK-NEXT: Type: SHT_NOTE 60# CHECK-NEXT: Flags [ 61# CHECK-NEXT: ] 62# CHECK-NEXT: Address: 63# CHECK-NEXT: Offset: 64# CHECK-NEXT: Size: 0 65 66# CHECK: NoteSections [ 67# CHECK-NEXT: NoteSection { 68# CHECK-NEXT: Name: .note0 69# CHECK-NEXT: Offset: 70# CHECK-NEXT: Size: 0x[[#%X,SIZE0]] 71# CHECK-NEXT: Notes [ 72# CHECK-NEXT: { 73# CHECK-NEXT: Owner: CORE 74# CHECK-NEXT: Data size: 0x2 75# CHECK-NEXT: Type: NT_ARCH 76# CHECK-NEXT: Description data ( 77# CHECK-NEXT: 0000: 0201 78# CHECK-NEXT: ) 79# CHECK-NEXT: } 80# CHECK-NEXT: ] 81# CHECK-NEXT: } 82# CHECK-NEXT: NoteSection { 83# CHECK-NEXT: Name: .note1 84# CHECK-NEXT: Offset: 85# CHECK-NEXT: Size: 0x[[#%X,SIZE1]] 86# CHECK-NEXT: Notes [ 87# CHECK-NEXT: { 88# CHECK-NEXT: Owner: LINUX 89# CHECK-NEXT: Data size: 0x2 90# CHECK-NEXT: Type: Unknown (0x00000003) 91# CHECK-NEXT: Description data ( 92# CHECK-NEXT: 0000: 0301 93# CHECK-NEXT: ) 94# CHECK-NEXT: } 95# CHECK-NEXT: { 96# CHECK-NEXT: Owner: CORE 97# CHECK-NEXT: Data size: 0x2 98# CHECK-NEXT: Type: Unknown (0x00000004) 99# CHECK-NEXT: Description data ( 100# CHECK-NEXT: 0000: 0401 101# CHECK-NEXT: ) 102# CHECK-NEXT: } 103# CHECK-NEXT: ] 104# CHECK-NEXT: } 105# CHECK-NEXT: NoteSection { 106# CHECK-NEXT: Name: .note2 107# CHECK-NEXT: Offset: 108# CHECK-NEXT: Size: 0x0 109# CHECK-NEXT: Notes [ 110# CHECK-NEXT: ] 111# CHECK-NEXT: } 112 113--- !ELF 114FileHeader: 115 Class: ELFCLASS[[ELFCLASS]] 116 Data: ELFDATA2[[ENDIANNESS]] 117 Type: ET_REL 118 Machine: EM_X86_64 119Sections: 120 - Name: .note0 121 Type: SHT_NOTE 122 AddressAlign: [[ALIGN]] 123 Notes: 124 - Name: CORE 125 Type: 0x01 126 Desc: 0101 127 - Name: CORE 128 Type: 0x02 129 Desc: 0201 130 - Name: .note1 131 Type: SHT_NOTE 132 AddressAlign: [[ALIGN]] 133 Notes: 134 - Name: LINUX 135 Type: 0x03 136 Desc: 0301 137 - Name: CORE 138 Type: 0x03 139 Desc: 0302 140 - Name: CORE 141 Type: 0x04 142 Desc: 0401 143 - Name: .note2 144 Type: SHT_NOTE 145 AddressAlign: [[ALIGN]] 146 Notes: 147 - Name: LINUX 148 Type: 0x01 149 Desc: 0102 150 151# RUN: yaml2obj --docnum=2 %s -o %t2 152# RUN: llvm-objcopy --remove-note=1 %t2 %t2o 2>&1 | FileCheck %s --check-prefix=TEST2 153# TEST2: warning: note segments are not supported 154# TEST2-NOT: note segments are not supported 155 156--- !ELF 157FileHeader: 158 Class: ELFCLASS64 159 Data: ELFDATA2LSB 160 Type: ET_CORE 161 Machine: EM_X86_64 162ProgramHeaders: 163 - Type: PT_NOTE 164 FirstSec: .data0 165 LastSec: .data0 166 - Type: PT_NOTE 167 FirstSec: .data1 168 LastSec: .data1 169Sections: 170 - Name: .data0 171 Type: Fill 172 Size: 8 173 - Name: .data1 174 Type: Fill 175 Size: 8 176 177# RUN: yaml2obj --docnum=3 %s -o %t3 178# RUN: llvm-objcopy --remove-note=1 %t3 %t3o 2>&1 | FileCheck %s --check-prefix=TEST3 179# TEST3: warning: cannot remove note(s) from .note: sections in segments are not supported 180 181--- !ELF 182FileHeader: 183 Class: ELFCLASS64 184 Data: ELFDATA2LSB 185 Type: ET_EXEC 186 Machine: EM_X86_64 187ProgramHeaders: 188 - Type: PT_LOAD 189 FirstSec: .note 190 LastSec: .note 191Sections: 192 - Name: .note 193 Type: SHT_NOTE 194 AddressAlign: 4 195 Notes: 196 - Name: ABC 197 Type: 1 198 Desc: 0102 199