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 {
117
117
llvm::yaml::Hex8 ABIVersion;
118
118
ELF_ET Type;
119
119
std::optional<ELF_EM> Machine;
120
- ELF_EF Flags;
120
+ std::optional< ELF_EF> Flags;
121
121
llvm::yaml::Hex64 Entry;
122
122
std::optional<StringRef> SectionHeaderStringTable;
123
123
Original file line number Diff line number Diff line change @@ -481,7 +481,11 @@ void ELFState<ELFT>::writeELFHeader(raw_ostream &OS) {
481
481
482
482
Header.e_version = EV_CURRENT;
483
483
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
+
485
489
Header.e_ehsize = sizeof (Elf_Ehdr);
486
490
487
491
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() {
281
281
Y->Header .Type = Obj.getHeader ().e_type ;
282
282
if (Obj.getHeader ().e_machine != 0 )
283
283
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 ;
285
286
Y->Header .Entry = Obj.getHeader ().e_entry ;
286
287
287
288
// Dump sections
You can’t perform that action at this time.
0 commit comments