| ## Check incompatible options. |
| # RUN: not llvm-objcopy --remove-note=1 --remove-section=.test - 2>&1 | FileCheck %s --check-prefix=ERR-REMSEC |
| # RUN: not llvm-objcopy --remove-note=1 --add-section=.test=%s - 2>&1 | FileCheck %s --check-prefix=ERR-ADDSEC |
| # RUN: not llvm-objcopy --remove-note=1 --update-section=.test=%s - 2>&1 | FileCheck %s --check-prefix=ERR-UPDSEC |
| |
| # ERR-REMSEC: error: cannot specify both --remove-note and --remove-section |
| # ERR-ADDSEC: error: cannot specify both --remove-note and --add-section |
| # ERR-UPDSEC: error: cannot specify both --remove-note and --update-section |
| |
| ## Check invalid argument formats. |
| # RUN: not llvm-objcopy --remove-note= - 2>&1 | FileCheck %s --check-prefix=ERR-NOTYPEID |
| # RUN: not llvm-objcopy --remove-note=CORE/ - 2>&1 | FileCheck %s --check-prefix=ERR-NOTYPEID |
| # RUN: not llvm-objcopy --remove-note=/1 - 2>&1 | FileCheck %s --check-prefix=ERR-EMPTYNAME |
| # RUN: not llvm-objcopy --remove-note=CORE/1/2 - 2>&1 | FileCheck %s --check-prefix=ERR-INVNUM1 |
| # RUN: not llvm-objcopy --remove-note=Notanumber - 2>&1 | FileCheck %s --check-prefix=ERR-INVNUM2 |
| # RUN: not llvm-objcopy --remove-note=CORE/Notanumber - 2>&1 | FileCheck %s --check-prefix=ERR-INVNUM2 |
| |
| # ERR-NOTYPEID: error: bad format for --remove-note, missing type_id |
| # ERR-EMPTYNAME: error: bad format for --remove-note, note name is empty |
| # ERR-INVNUM1: error: bad note type_id for --remove-note: '1/2' |
| # ERR-INVNUM2: error: bad note type_id for --remove-note: 'Notanumber' |
| |
| ## Check deleting notes: |
| ## * --remove-note=1 will remove note "CORE/1" and "LINUX/1", |
| ## * --remove-note=DUMMY/2 will not remove any notes because there are no notes with this owner, |
| ## * --remove-note=CORE/3 will remove "CORE/3" but preserve "LINUX/3". |
| # RUN: yaml2obj --docnum=1 -D ALIGN=8 -D ELFCLASS=64 -D ENDIANNESS=LSB %s -o %t8.64.lsb |
| # RUN: llvm-objcopy --remove-note=0x01 --remove-note=DUMMY/2 --remove-note=CORE/0x03 %t8.64.lsb %t8.64.lsb.o |
| # RUN: llvm-readobj --segments --sections --notes %t8.64.lsb.o | \ |
| # RUN: FileCheck %s -D#SIZE0=32 -D#SIZE1=64 |
| |
| # RUN: yaml2obj --docnum=1 -D ALIGN=4 -D ELFCLASS=64 -D ENDIANNESS=MSB %s -o %t4.64.msb |
| # RUN: llvm-objcopy --remove-note=0x01 --remove-note=DUMMY/0x02 --remove-note=CORE/3 %t4.64.msb %t4.64.msb.o |
| # RUN: llvm-readobj --segments --sections --notes %t4.64.msb.o | \ |
| # RUN: FileCheck %s -D#SIZE0=24 -D#SIZE1=48 |
| |
| # RUN: yaml2obj --docnum=1 -D ALIGN=4 -D ELFCLASS=32 -D ENDIANNESS=LSB %s -o %t4.32.lsb |
| # RUN: llvm-objcopy --remove-note=1 --remove-note=DUMMY/0x02 --remove-note=CORE/3 %t4.32.lsb %t4.32.lsb.o |
| # RUN: llvm-readobj --segments --sections --notes %t4.32.lsb.o | \ |
| # RUN: FileCheck %s -D#SIZE0=24 -D#SIZE1=48 |
| |
| # CHECK: Sections [ |
| # CHECK: Section { |
| # CHECK: Name: .note0 |
| # CHECK-NEXT: Type: SHT_NOTE |
| # CHECK-NEXT: Flags [ |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Address: |
| # CHECK-NEXT: Offset: |
| # CHECK-NEXT: Size: [[#%d,SIZE0]] |
| # CHECK: Name: .note1 |
| # CHECK-NEXT: Type: SHT_NOTE |
| # CHECK-NEXT: Flags [ |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Address: |
| # CHECK-NEXT: Offset: |
| # CHECK-NEXT: Size: [[#%d,SIZE1]] |
| # CHECK: Name: .note2 |
| # CHECK-NEXT: Type: SHT_NOTE |
| # CHECK-NEXT: Flags [ |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Address: |
| # CHECK-NEXT: Offset: |
| # CHECK-NEXT: Size: 0 |
| |
| # CHECK: NoteSections [ |
| # CHECK-NEXT: NoteSection { |
| # CHECK-NEXT: Name: .note0 |
| # CHECK-NEXT: Offset: |
| # CHECK-NEXT: Size: 0x[[#%X,SIZE0]] |
| # CHECK-NEXT: Notes [ |
| # CHECK-NEXT: { |
| # CHECK-NEXT: Owner: CORE |
| # CHECK-NEXT: Data size: 0x2 |
| # CHECK-NEXT: Type: NT_ARCH |
| # CHECK-NEXT: Description data ( |
| # CHECK-NEXT: 0000: 0201 |
| # CHECK-NEXT: ) |
| # CHECK-NEXT: } |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: } |
| # CHECK-NEXT: NoteSection { |
| # CHECK-NEXT: Name: .note1 |
| # CHECK-NEXT: Offset: |
| # CHECK-NEXT: Size: 0x[[#%X,SIZE1]] |
| # CHECK-NEXT: Notes [ |
| # CHECK-NEXT: { |
| # CHECK-NEXT: Owner: LINUX |
| # CHECK-NEXT: Data size: 0x2 |
| # CHECK-NEXT: Type: Unknown (0x00000003) |
| # CHECK-NEXT: Description data ( |
| # CHECK-NEXT: 0000: 0301 |
| # CHECK-NEXT: ) |
| # CHECK-NEXT: } |
| # CHECK-NEXT: { |
| # CHECK-NEXT: Owner: CORE |
| # CHECK-NEXT: Data size: 0x2 |
| # CHECK-NEXT: Type: Unknown (0x00000004) |
| # CHECK-NEXT: Description data ( |
| # CHECK-NEXT: 0000: 0401 |
| # CHECK-NEXT: ) |
| # CHECK-NEXT: } |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: } |
| # CHECK-NEXT: NoteSection { |
| # CHECK-NEXT: Name: .note2 |
| # CHECK-NEXT: Offset: |
| # CHECK-NEXT: Size: 0x0 |
| # CHECK-NEXT: Notes [ |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: } |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS[[ELFCLASS]] |
| Data: ELFDATA2[[ENDIANNESS]] |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .note0 |
| Type: SHT_NOTE |
| AddressAlign: [[ALIGN]] |
| Notes: |
| - Name: CORE |
| Type: 0x01 |
| Desc: 0101 |
| - Name: CORE |
| Type: 0x02 |
| Desc: 0201 |
| - Name: .note1 |
| Type: SHT_NOTE |
| AddressAlign: [[ALIGN]] |
| Notes: |
| - Name: LINUX |
| Type: 0x03 |
| Desc: 0301 |
| - Name: CORE |
| Type: 0x03 |
| Desc: 0302 |
| - Name: CORE |
| Type: 0x04 |
| Desc: 0401 |
| - Name: .note2 |
| Type: SHT_NOTE |
| AddressAlign: [[ALIGN]] |
| Notes: |
| - Name: LINUX |
| Type: 0x01 |
| Desc: 0102 |
| |
| # RUN: yaml2obj --docnum=2 %s -o %t2 |
| # RUN: llvm-objcopy --remove-note=1 %t2 %t2o 2>&1 | FileCheck %s --check-prefix=TEST2 |
| # TEST2: warning: note segments are not supported |
| # TEST2-NOT: note segments are not supported |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_CORE |
| Machine: EM_X86_64 |
| ProgramHeaders: |
| - Type: PT_NOTE |
| FirstSec: .data0 |
| LastSec: .data0 |
| - Type: PT_NOTE |
| FirstSec: .data1 |
| LastSec: .data1 |
| Sections: |
| - Name: .data0 |
| Type: Fill |
| Size: 8 |
| - Name: .data1 |
| Type: Fill |
| Size: 8 |
| |
| # RUN: yaml2obj --docnum=3 %s -o %t3 |
| # RUN: llvm-objcopy --remove-note=1 %t3 %t3o 2>&1 | FileCheck %s --check-prefix=TEST3 |
| # TEST3: warning: cannot remove note(s) from .note: sections in segments are not supported |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| ProgramHeaders: |
| - Type: PT_LOAD |
| FirstSec: .note |
| LastSec: .note |
| Sections: |
| - Name: .note |
| Type: SHT_NOTE |
| AddressAlign: 4 |
| Notes: |
| - Name: ABC |
| Type: 1 |
| Desc: 0102 |