<div dir="ltr"><div style>Hi Sean,</div><div style><br></div><div style>I think this test needs proper target/triple handling, or move it to an x86 specific directory:</div><div><br></div><a href="http://lab.llvm.org:8011/builders/clang-native-arm-cortex-a9/builds/8946/steps/check-all/logs/LLVM%3A%3Ayaml2obj-elf-symbol-basic.yaml">http://lab.llvm.org:8011/builders/clang-native-arm-cortex-a9/builds/8946/steps/check-all/logs/LLVM%3A%3Ayaml2obj-elf-symbol-basic.yaml</a><br>
<div><br></div><div style>thanks,</div><div style>--renato</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 20 June 2013 21:59, Sean Silva <span dir="ltr"><<a href="mailto:silvas@purdue.edu" target="_blank">silvas@purdue.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: silvas<br>
Date: Thu Jun 20 15:59:47 2013<br>
New Revision: 184469<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=184469&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=184469&view=rev</a><br>
Log:<br>
[yaml2obj][ELF] Add support for st_value and st_size.<br>
<br>
After this patch, the ELF file produced by<br>
`yaml2obj-elf-symbol-basic.yaml`, when linked and executed on x86_64<br>
(under SysV ABI, obviously; I tested on Linux), produces a working<br>
executable that goes into an infinite loop!<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/Object/ELFYAML.h<br>
    llvm/trunk/lib/Object/ELFYAML.cpp<br>
    llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml<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=184469&r1=184468&r2=184469&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFYAML.h?rev=184469&r1=184468&r2=184469&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/Object/ELFYAML.h (original)<br>
+++ llvm/trunk/include/llvm/Object/ELFYAML.h Thu Jun 20 15:59:47 2013<br>
@@ -58,6 +58,8 @@ struct Symbol {<br>
   ELF_STB Binding;<br>
   ELF_STT Type;<br>
   StringRef Section;<br>
+  llvm::yaml::Hex64 Value;<br>
+  llvm::yaml::Hex64 Size;<br>
 };<br>
 struct Section {<br>
   StringRef Name;<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=184469&r1=184468&r2=184469&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFYAML.cpp?rev=184469&r1=184468&r2=184469&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Object/ELFYAML.cpp (original)<br>
+++ llvm/trunk/lib/Object/ELFYAML.cpp Thu Jun 20 15:59:47 2013<br>
@@ -316,6 +316,8 @@ void MappingTraits<ELFYAML::Symbol>::map<br>
   IO.mapOptional("Binding", Symbol.Binding, ELFYAML::ELF_STB(0));<br>
   IO.mapOptional("Type", Symbol.Type, ELFYAML::ELF_STT(0));<br>
   IO.mapOptional("Section", Symbol.Section, StringRef());<br>
+  IO.mapOptional("Value", Symbol.Value, Hex64(0));<br>
+  IO.mapOptional("Size", Symbol.Size, Hex64(0));<br>
 }<br>
<br>
 void MappingTraits<ELFYAML::Section>::mapping(IO &IO,<br>
<br>
Modified: llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml?rev=184469&r1=184468&r2=184469&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml?rev=184469&r1=184468&r2=184469&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml (original)<br>
+++ llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml Thu Jun 20 15:59:47 2013<br>
@@ -1,4 +1,5 @@<br>
 # RUN: yaml2obj -format=elf %s | llvm-readobj -symbols - | FileCheck %s<br>
+# RUN: yaml2obj -format=elf %s | llvm-objdump -d -no-show-raw-insn - | FileCheck %s --check-prefix=DISASSEMBLY<br>
 !ELF<br>
 FileHeader:<br>
   Class: ELFCLASS64<br>
@@ -9,6 +10,13 @@ Sections:<br>
   - Name: .text<br>
     Type: SHT_PROGBITS<br>
     Flags: [ SHF_ALLOC, SHF_EXECINSTR ]<br>
+    Content: "90EBFE" # x86 machine code<br>
+                      #   NOP ; To make main's `Value` non-zero (for testing).<br>
+                      # main:<br>
+                      #   JMP -2 ; (infloop)<br>
+                      # This YAML file is a valid relocatable object that,<br>
+                      # when linked and run on x86_64, will go into an<br>
+                      # infloop.<br>
   - Name: .symtab<br>
     Type: SHT_SYMTAB<br>
     Symbols:<br>
@@ -16,12 +24,20 @@ Sections:<br>
       Binding: STB_GLOBAL<br>
       Type: STT_FUNC<br>
       Section: .text<br>
+      Value: 0x1<br>
+      Size: 2<br>
<br>
 # CHECK:      Symbols [<br>
 # CHECK-NEXT:   Symbol {<br>
 # CHECK-NEXT:     Name:  (0)<br>
 # CHECK:        Symbol {<br>
 # CHECK-NEXT:     Name: main<br>
+# CHECK-NEXT:     Value: 0x1<br>
+# CHECK-NEXT:     Size: 2<br>
 # CHECK:          Binding: Global<br>
 # CHECK-NEXT:     Type: Function<br>
 # CHECK:          Section: .text<br>
+<br>
+# DISASSEMBLY:      Disassembly of section .text:<br>
+# DISASSEMBLY-NEXT: main:<br>
+# DISASSEMBLY-NEXT:        1:       jmp     -2<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=184469&r1=184468&r2=184469&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=184469&r1=184468&r2=184469&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/tools/yaml2obj/yaml2elf.cpp (original)<br>
+++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp Thu Jun 20 15:59:47 2013<br>
@@ -206,6 +206,8 @@ static void handleSymtabSectionHeader(<br>
       exit(1);<br>
     }<br>
     Symbol.st_shndx = Index;<br>
+    Symbol.st_value = Sym.Value;<br>
+    Symbol.st_size = Sym.Size;<br>
     Syms.push_back(Symbol);<br>
   }<br>
<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>