diff options
-rw-r--r-- | include/llvm/Object/ELFYAML.h | 2 | ||||
-rw-r--r-- | lib/Object/ELFYAML.cpp | 2 | ||||
-rw-r--r-- | test/Object/yaml2obj-elf-symbol-basic.yaml | 16 | ||||
-rw-r--r-- | tools/yaml2obj/yaml2elf.cpp | 2 |
4 files changed, 22 insertions, 0 deletions
diff --git a/include/llvm/Object/ELFYAML.h b/include/llvm/Object/ELFYAML.h index b007944..abf3693 100644 --- a/include/llvm/Object/ELFYAML.h +++ b/include/llvm/Object/ELFYAML.h @@ -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; diff --git a/lib/Object/ELFYAML.cpp b/lib/Object/ELFYAML.cpp index 39faf7d..7fa7756 100644 --- a/lib/Object/ELFYAML.cpp +++ b/lib/Object/ELFYAML.cpp @@ -316,6 +316,8 @@ void MappingTraits<ELFYAML::Symbol>::mapping(IO &IO, ELFYAML::Symbol &Symbol) { 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, diff --git a/test/Object/yaml2obj-elf-symbol-basic.yaml b/test/Object/yaml2obj-elf-symbol-basic.yaml index f3883bb..12acb7e 100644 --- a/test/Object/yaml2obj-elf-symbol-basic.yaml +++ b/test/Object/yaml2obj-elf-symbol-basic.yaml @@ -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 diff --git a/tools/yaml2obj/yaml2elf.cpp b/tools/yaml2obj/yaml2elf.cpp index 421781c..a8eeeea 100644 --- a/tools/yaml2obj/yaml2elf.cpp +++ b/tools/yaml2obj/yaml2elf.cpp @@ -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); } |