<div dir="ltr">Thanks for giving yaml2elf some love!</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Mar 31, 2014 at 5:44 AM, Daniel Sanders <span dir="ltr"><<a href="mailto:daniel.sanders@imgtec.com" target="_blank">daniel.sanders@imgtec.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dsanders<br>
Date: Mon Mar 31 04:44:05 2014<br>
New Revision: 205173<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=205173&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=205173&view=rev</a><br>
Log:<br>
[yaml2obj] Add support for ELF e_flags.<br>
<br>
Summary:<br>
The FileHeader mapping now accepts an optional Flags sequence that accepts<br>
the EF_<arch>_<flag> constants. When not given, Flags defaults to zero.<br>
<br>
Reviewers: atanasyan<br>
<br>
Reviewed By: atanasyan<br>
<br>
CC: llvm-commits<br>
<br>
Differential Revision: <a href="http://llvm-reviews.chandlerc.com/D3213" target="_blank">http://llvm-reviews.chandlerc.com/D3213</a><br>
<br>
Added:<br>
    llvm/trunk/test/Object/yaml2obj-elf-file-headers-with-e_flags.yaml<br>
Modified:<br>
    llvm/trunk/include/llvm/Object/ELFYAML.h<br>
    llvm/trunk/lib/Object/ELFYAML.cpp<br>
    llvm/trunk/tools/yaml2obj/yaml2elf.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/Object/ELFYAML.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFYAML.h?rev=205173&r1=205172&r2=205173&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFYAML.h?rev=205173&r1=205172&r2=205173&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/Object/ELFYAML.h (original)<br>
+++ llvm/trunk/include/llvm/Object/ELFYAML.h Mon Mar 31 04:44:05 2014<br>
@@ -37,6 +37,8 @@ LLVM_YAML_STRONG_TYPEDEF(uint32_t, ELF_E<br>
 LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_ELFCLASS)<br>
 LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_ELFDATA)<br>
 LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_ELFOSABI)<br>
+// Just use 64, since it can hold 32-bit values too.<br>
+LLVM_YAML_STRONG_TYPEDEF(uint64_t, ELF_EF)<br>
 LLVM_YAML_STRONG_TYPEDEF(uint32_t, ELF_SHT)<br>
 // Just use 64, since it can hold 32-bit values too.<br>
 LLVM_YAML_STRONG_TYPEDEF(uint64_t, ELF_SHF)<br>
@@ -50,6 +52,7 @@ struct FileHeader {<br>
   ELF_ELFOSABI OSABI;<br>
   ELF_ET Type;<br>
   ELF_EM Machine;<br>
+  ELF_EF Flags;<br>
   llvm::yaml::Hex64 Entry;<br>
 };<br>
 struct Symbol {<br>
@@ -118,6 +121,11 @@ struct ScalarEnumerationTraits<ELFYAML::<br>
 };<br>
<br>
 template <><br>
+struct ScalarBitSetTraits<ELFYAML::ELF_EF> {<br>
+  static void bitset(IO &IO, ELFYAML::ELF_EF &Value);<br>
+};<br>
+<br>
+template <><br>
 struct ScalarEnumerationTraits<ELFYAML::ELF_SHT> {<br>
   static void enumeration(IO &IO, ELFYAML::ELF_SHT &Value);<br>
 };<br>
<br>
Modified: llvm/trunk/lib/Object/ELFYAML.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFYAML.cpp?rev=205173&r1=205172&r2=205173&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFYAML.cpp?rev=205173&r1=205172&r2=205173&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Object/ELFYAML.cpp (original)<br>
+++ llvm/trunk/lib/Object/ELFYAML.cpp Mon Mar 31 04:44:05 2014<br>
@@ -237,6 +237,48 @@ void ScalarEnumerationTraits<ELFYAML::EL<br>
 #undef ECase<br>
 }<br>
<br>
+void ScalarBitSetTraits<ELFYAML::ELF_EF>::bitset(IO &IO,<br>
+                                                 ELFYAML::ELF_EF &Value) {<br>
+#define BCase(X) IO.bitSetCase(Value, #X, ELF::X);<br>
+  BCase(EF_ARM_SOFT_FLOAT)<br>
+  BCase(EF_ARM_VFP_FLOAT)<br>
+  BCase(EF_ARM_EABI_UNKNOWN)<br>
+  BCase(EF_ARM_EABI_VER1)<br>
+  BCase(EF_ARM_EABI_VER2)<br>
+  BCase(EF_ARM_EABI_VER3)<br>
+  BCase(EF_ARM_EABI_VER4)<br>
+  BCase(EF_ARM_EABI_VER5)<br>
+  BCase(EF_ARM_EABIMASK)<br>
+  BCase(EF_MIPS_NOREORDER)<br>
+  BCase(EF_MIPS_PIC)<br>
+  BCase(EF_MIPS_CPIC)<br>
+  BCase(EF_MIPS_ABI2)<br>
+  BCase(EF_MIPS_32BITMODE)<br>
+  BCase(EF_MIPS_ABI_O32)<br>
+  BCase(EF_MIPS_MICROMIPS)<br>
+  BCase(EF_MIPS_ARCH_ASE_M16)<br>
+  BCase(EF_MIPS_ARCH_1)<br>
+  BCase(EF_MIPS_ARCH_2)<br>
+  BCase(EF_MIPS_ARCH_3)<br>
+  BCase(EF_MIPS_ARCH_4)<br>
+  BCase(EF_MIPS_ARCH_5)<br>
+  BCase(EF_MIPS_ARCH_32)<br>
+  BCase(EF_MIPS_ARCH_64)<br>
+  BCase(EF_MIPS_ARCH_32R2)<br>
+  BCase(EF_MIPS_ARCH_64R2)<br>
+  BCase(EF_MIPS_ARCH)<br>
+  BCase(EF_HEXAGON_MACH_V2)<br>
+  BCase(EF_HEXAGON_MACH_V3)<br>
+  BCase(EF_HEXAGON_MACH_V4)<br>
+  BCase(EF_HEXAGON_MACH_V5)<br>
+  BCase(EF_HEXAGON_ISA_MACH)<br>
+  BCase(EF_HEXAGON_ISA_V2)<br>
+  BCase(EF_HEXAGON_ISA_V3)<br>
+  BCase(EF_HEXAGON_ISA_V4)<br>
+  BCase(EF_HEXAGON_ISA_V5)<br>
+#undef BCase<br>
+}<br>
+<br>
 void ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(<br>
     IO &IO, ELFYAML::ELF_SHT &Value) {<br>
 #define ECase(X) IO.enumCase(Value, #X, ELF::X);<br>
@@ -299,6 +341,7 @@ void MappingTraits<ELFYAML::FileHeader>:<br>
   IO.mapOptional("OSABI", FileHdr.OSABI, ELFYAML::ELF_ELFOSABI(0));<br>
   IO.mapRequired("Type", FileHdr.Type);<br>
   IO.mapRequired("Machine", FileHdr.Machine);<br>
+  IO.mapOptional("Flags", FileHdr.Flags, ELFYAML::ELF_EF(0));<br>
   IO.mapOptional("Entry", FileHdr.Entry, Hex64(0));<br>
 }<br>
<br>
<br>
Added: llvm/trunk/test/Object/yaml2obj-elf-file-headers-with-e_flags.yaml<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/yaml2obj-elf-file-headers-with-e_flags.yaml?rev=205173&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/yaml2obj-elf-file-headers-with-e_flags.yaml?rev=205173&view=auto</a><br>

==============================================================================<br>
--- llvm/trunk/test/Object/yaml2obj-elf-file-headers-with-e_flags.yaml (added)<br>
+++ llvm/trunk/test/Object/yaml2obj-elf-file-headers-with-e_flags.yaml Mon Mar 31 04:44:05 2014<br>
@@ -0,0 +1,16 @@<br>
+# RUN: yaml2obj -format=elf %s | llvm-readobj -file-headers - | FileCheck %s<br>
+!ELF<br>
+FileHeader:<br>
+  Class: ELFCLASS32<br>
+  Data: ELFDATA2LSB<br>
+  Type: ET_REL<br>
+  Machine: EM_MIPS<br>
+  Flags: [ EF_MIPS_NOREORDER, EF_MIPS_ABI_O32 ]<br>
+<br>
+# CHECK: Format: ELF32-mips<br>
+# CHECK: Arch: mipsel<br>
+# CHECK: Machine: EM_MIPS<br>
+# CHECK: Flags [ (0x1001)<br>
+# CHECK-NEXT: 0x1<br>
+# CHECK-NEXT: 0x1000<br>
+# CHECK-NEXT: ]<br>
<br>
Modified: llvm/trunk/tools/yaml2obj/yaml2elf.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=205173&r1=205172&r2=205173&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=205173&r1=205172&r2=205173&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/tools/yaml2obj/yaml2elf.cpp (original)<br>
+++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp Mon Mar 31 04:44:05 2014<br>
@@ -261,6 +261,7 @@ static int writeELF(raw_ostream &OS, con<br>
   Header.e_machine = Hdr.Machine;<br>
   Header.e_version = EV_CURRENT;<br>
   Header.e_entry = Hdr.Entry;<br>
+  Header.e_flags = Hdr.Flags;<br>
   Header.e_ehsize = sizeof(Elf_Ehdr);<br>
<br>
   // TODO: Flesh out section header support.<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>