File tree Expand file tree Collapse file tree 5 files changed +64
-3
lines changed Expand file tree Collapse file tree 5 files changed +64
-3
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -481,7 +481,11 @@ void ELFState<ELFT>::writeELFHeader(raw_ostream &OS) {
481481
482482 Header.e_version = EV_CURRENT;
483483 Header.e_entry = Doc.Header .Entry ;
484- Header.e_flags = Doc.Header .Flags ;
484+ if (Doc.Header .Flags )
485+ Header.e_flags = *Doc.Header .Flags ;
486+ else
487+ Header.e_flags = 0 ;
488+
485489 Header.e_ehsize = sizeof (Elf_Ehdr);
486490
487491 if (Doc.Header .EPhOff )
Original file line number Diff line number Diff line change 1+ # # Check how obj2yaml dumps e_flags field.
2+
3+ --- !ELF
4+ FileHeader :
5+ Class : ELFCLASS64
6+ Data : ELFDATA2MSB
7+ Type : ET_EXEC
8+ Machine : EM_SPARC32PLUS
9+ Flags : [ [[FLAGS]] ]
10+
11+ # RUN: yaml2obj -DFLAGS="EF_SPARC_32PLUS " %s -o %t2
12+ # RUN: obj2yaml %t2 | FileCheck %s --check-prefix=FLAG
13+
14+ # FLAG: --- !ELF
15+ # FLAG-NEXT: FileHeader:
16+ # FLAG-NEXT: Class: ELFCLASS64
17+ # FLAG-NEXT: Data: ELFDATA2MSB
18+ # FLAG-NEXT: Type: ET_EXEC
19+ # FLAG-NEXT: Machine: EM_SPARC32PLUS
20+ # FLAG-NEXT: Flags: [ EF_SPARC_32PLUS ]
21+
22+ # RUN: yaml2obj -DFLAGS="EF_SPARC_HAL_R1 " %s -o %t3
23+ # RUN: obj2yaml %t3 | FileCheck %s --check-prefix=FLAG2
24+
25+ # FLAG2: --- !ELF
26+ # FLAG2-NEXT: FileHeader:
27+ # FLAG2-NEXT: Class: ELFCLASS64
28+ # FLAG2-NEXT: Data: ELFDATA2MSB
29+ # FLAG2-NEXT: Type: ET_EXEC
30+ # FLAG2-NEXT: Machine: EM_SPARC32PLUS
31+ # FLAG2-NEXT: Flags: [ EF_SPARC_HAL_R1 ]
Original file line number Diff line number Diff line change 1+ # # Test for FileHeader Flags.
2+
3+ # # When FLAGS variable isn't defined, the e_flags value is 0.
4+ # # Otherwise, it's the specified value.
5+
6+ # RUN: yaml2obj %s -o %t
7+ # RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=NO-FLAG
8+
9+ # RUN: yaml2obj %s -o %t -DFLAGS=[EF_SPARC_32PLUS]
10+ # RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=FLAG
11+
12+ !ELF
13+ FileHeader :
14+ Class : ELFCLASS32
15+ Data : ELFDATA2LSB
16+ Type : ET_EXEC
17+ Machine : EM_SPARC32PLUS
18+ Flags : [[FLAGS=<none>]]
19+
20+ # NO-FLAG: Flags [ (0x0)
21+ # NO-FLAG-NEXT: ]
22+
23+ # FLAG: Flags [ (0x100)
24+ # FLAG-NEXT: EF_SPARC_32PLUS (0x100)
25+ # FLAG-NEXT: ]
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments