aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Object/ELFYAML.h2
-rw-r--r--lib/Object/ELFYAML.cpp2
-rw-r--r--test/Object/yaml2obj-elf-symbol-basic.yaml16
-rw-r--r--tools/yaml2obj/yaml2elf.cpp2
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);
}