Skip to content

Commit f00daeb

Browse files
committed
Add a test for ELF Fileheader Flag
Also, do not print Flags value when e_flags is 0
1 parent a2ec8d6 commit f00daeb

File tree

5 files changed

+54
-4
lines changed

5 files changed

+54
-4
lines changed

llvm/include/llvm/ObjectYAML/ELFYAML.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ struct FileHeader {
117117
llvm::yaml::Hex8 ABIVersion;
118118
ELF_ET Type;
119119
std::optional<ELF_EM> Machine;
120-
ELF_EF Flags;
120+
std::optional<ELF_EF> Flags;
121121
llvm::yaml::Hex64 Entry;
122122
std::optional<StringRef> SectionHeaderStringTable;
123123

llvm/lib/ObjectYAML/ELFEmitter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,9 +482,10 @@ void ELFState<ELFT>::writeELFHeader(raw_ostream &OS) {
482482
Header.e_version = EV_CURRENT;
483483
Header.e_entry = Doc.Header.Entry;
484484
if (Doc.Header.Flags)
485-
Header.e_flags = Doc.Header.Flags;
485+
Header.e_flags = *Doc.Header.Flags;
486486
else
487487
Header.e_flags = 0;
488+
488489
Header.e_ehsize = sizeof(Elf_Ehdr);
489490

490491
if (Doc.Header.EPhOff)

llvm/test/tools/llvm-objcopy/MachO/remove-swift-symbols.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ FileHeader:
112112
filetype: 0x00000002
113113
ncmds: 4
114114
sizeofcmds: 400
115-
flags: [[FLAGS=<none>]]
115+
flags: [[FLAGS]]
116116
reserved: 0x00000000
117117
LoadCommands:
118118
- cmd: LC_SEGMENT_64
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
## Test for FileHeader Flags; when FLAGS variable isn't defined, the e_flags value is 0, otherwise it's the specified value
2+
3+
# RUN: yaml2obj %s -o %t
4+
# RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=CHECK,NO-FLAG
5+
6+
# RUN: yaml2obj %s -o %t -DFLAGS=[EF_AMDGPU_MACH_AMDGCN_GFX900]
7+
# RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=CHECK,FLAG
8+
9+
!ELF
10+
FileHeader:
11+
Class: ELFCLASS64
12+
Data: ELFDATA2LSB
13+
OSABI: ELFOSABI_AMDGPU_HSA
14+
Type: ET_EXEC
15+
Machine: EM_AMDGPU
16+
Flags: [[FLAGS=<none>]]
17+
18+
# CHECK: Format: elf64-amdgpu
19+
# CHECK-NEXT: Arch: {{(unknown|amdgcn)}}
20+
# CHECK-NEXT: AddressSize: 64bit
21+
# CHECK-NEXT: LoadName: <Not found>
22+
# CHECK-NEXT: ElfHeader {
23+
# CHECK-NEXT: Ident {
24+
# CHECK-NEXT: Magic: (7F 45 4C 46)
25+
# CHECK-NEXT: Class: 64-bit (0x2)
26+
# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
27+
# CHECK-NEXT: FileVersion: 1
28+
# CHECK-NEXT: OS/ABI: AMDGPU_HSA (0x40)
29+
# CHECK-NEXT: ABIVersion: 0
30+
# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
31+
# CHECK-NEXT: }
32+
# CHECK-NEXT: Type: Executable (0x2)
33+
# CHECK-NEXT: Machine: EM_AMDGPU (0xE0)
34+
# CHECK-NEXT: Version: 1
35+
# CHECK-NEXT: Entry: 0x0
36+
# CHECK-NEXT: ProgramHeaderOffset: 0x0
37+
# CHECK-NEXT: SectionHeaderOffset: 0x58
38+
# NO-FLAG-NEXT: Flags [ (0x0)
39+
# FLAG-NEXT: Flags [ (0x2C)
40+
# FLAG-NEXT: EF_AMDGPU_MACH_AMDGCN_GFX900 (0x2C)
41+
# CHECK-NEXT: ]
42+
# CHECK-NEXT: HeaderSize: 64
43+
# CHECK-NEXT: ProgramHeaderEntrySize: 0
44+
# CHECK-NEXT: ProgramHeaderCount: 0
45+
# CHECK-NEXT: SectionHeaderEntrySize: 64
46+
# CHECK-NEXT: SectionHeaderCount: 3
47+
# CHECK-NEXT: StringTableSectionIndex: 2
48+
# CHECK-NEXT: }

llvm/tools/obj2yaml/elf2yaml.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ template <class ELFT> Expected<ELFYAML::Object *> ELFDumper<ELFT>::dump() {
281281
Y->Header.Type = Obj.getHeader().e_type;
282282
if (Obj.getHeader().e_machine != 0)
283283
Y->Header.Machine = ELFYAML::ELF_EM(Obj.getHeader().e_machine);
284-
Y->Header.Flags = Obj.getHeader().e_flags;
284+
if (Obj.getHeader().e_flags != 0)
285+
Y->Header.Flags = Obj.getHeader().e_flags;
285286
Y->Header.Entry = Obj.getHeader().e_entry;
286287

287288
// Dump sections

0 commit comments

Comments
 (0)