mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[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! llvm-svn: 184469
This commit is contained in:
parent
b8315826cf
commit
873dafebc7
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user