[llvm] r184469 - [yaml2obj][ELF] Add support for st_value and st_size.

Sean Silva silvas at purdue.edu
Thu Jun 20 13:59:47 PDT 2013


Author: silvas
Date: Thu Jun 20 15:59:47 2013
New Revision: 184469

URL: http://llvm.org/viewvc/llvm-project?rev=184469&view=rev
Log:
[yaml2obj][ELF] Add support for st_value and st_size.

After this patch, the ELF file produced by
`yaml2obj-elf-symbol-basic.yaml`, when linked and executed on x86_64
(under SysV ABI, obviously; I tested on Linux), produces a working
executable that goes into an infinite loop!

Modified:
    llvm/trunk/include/llvm/Object/ELFYAML.h
    llvm/trunk/lib/Object/ELFYAML.cpp
    llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml
    llvm/trunk/tools/yaml2obj/yaml2elf.cpp

Modified: llvm/trunk/include/llvm/Object/ELFYAML.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFYAML.h?rev=184469&r1=184468&r2=184469&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELFYAML.h (original)
+++ llvm/trunk/include/llvm/Object/ELFYAML.h Thu Jun 20 15:59:47 2013
@@ -58,6 +58,8 @@ struct Symbol {
   ELF_STB Binding;
   ELF_STT Type;
   StringRef Section;
+  llvm::yaml::Hex64 Value;
+  llvm::yaml::Hex64 Size;
 };
 struct Section {
   StringRef Name;

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

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

Modified: llvm/trunk/tools/yaml2obj/yaml2elf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=184469&r1=184468&r2=184469&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2elf.cpp (original)
+++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp Thu Jun 20 15:59:47 2013
@@ -206,6 +206,8 @@ static void handleSymtabSectionHeader(
       exit(1);
     }
     Symbol.st_shndx = Index;
+    Symbol.st_value = Sym.Value;
+    Symbol.st_size = Sym.Size;
     Syms.push_back(Symbol);
   }
 





More information about the llvm-commits mailing list