xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/remove-note.test (revision 6805d7e8aa5f2ecea021acbb8c6b4c29ca432e78)
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