mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00: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! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184469 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6525e92b32
commit
e38f640b22
@ -58,6 +58,8 @@ struct Symbol {
|
|||||||
ELF_STB Binding;
|
ELF_STB Binding;
|
||||||
ELF_STT Type;
|
ELF_STT Type;
|
||||||
StringRef Section;
|
StringRef Section;
|
||||||
|
llvm::yaml::Hex64 Value;
|
||||||
|
llvm::yaml::Hex64 Size;
|
||||||
};
|
};
|
||||||
struct Section {
|
struct Section {
|
||||||
StringRef Name;
|
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("Binding", Symbol.Binding, ELFYAML::ELF_STB(0));
|
||||||
IO.mapOptional("Type", Symbol.Type, ELFYAML::ELF_STT(0));
|
IO.mapOptional("Type", Symbol.Type, ELFYAML::ELF_STT(0));
|
||||||
IO.mapOptional("Section", Symbol.Section, StringRef());
|
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,
|
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-readobj -symbols - | FileCheck %s
|
||||||
|
# RUN: yaml2obj -format=elf %s | llvm-objdump -d -no-show-raw-insn - | FileCheck %s --check-prefix=DISASSEMBLY
|
||||||
!ELF
|
!ELF
|
||||||
FileHeader:
|
FileHeader:
|
||||||
Class: ELFCLASS64
|
Class: ELFCLASS64
|
||||||
@ -9,6 +10,13 @@ Sections:
|
|||||||
- Name: .text
|
- Name: .text
|
||||||
Type: SHT_PROGBITS
|
Type: SHT_PROGBITS
|
||||||
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
|
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
|
- Name: .symtab
|
||||||
Type: SHT_SYMTAB
|
Type: SHT_SYMTAB
|
||||||
Symbols:
|
Symbols:
|
||||||
@ -16,12 +24,20 @@ Sections:
|
|||||||
Binding: STB_GLOBAL
|
Binding: STB_GLOBAL
|
||||||
Type: STT_FUNC
|
Type: STT_FUNC
|
||||||
Section: .text
|
Section: .text
|
||||||
|
Value: 0x1
|
||||||
|
Size: 2
|
||||||
|
|
||||||
# CHECK: Symbols [
|
# CHECK: Symbols [
|
||||||
# CHECK-NEXT: Symbol {
|
# CHECK-NEXT: Symbol {
|
||||||
# CHECK-NEXT: Name: (0)
|
# CHECK-NEXT: Name: (0)
|
||||||
# CHECK: Symbol {
|
# CHECK: Symbol {
|
||||||
# CHECK-NEXT: Name: main
|
# CHECK-NEXT: Name: main
|
||||||
|
# CHECK-NEXT: Value: 0x1
|
||||||
|
# CHECK-NEXT: Size: 2
|
||||||
# CHECK: Binding: Global
|
# CHECK: Binding: Global
|
||||||
# CHECK-NEXT: Type: Function
|
# CHECK-NEXT: Type: Function
|
||||||
# CHECK: Section: .text
|
# 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);
|
exit(1);
|
||||||
}
|
}
|
||||||
Symbol.st_shndx = Index;
|
Symbol.st_shndx = Index;
|
||||||
|
Symbol.st_value = Sym.Value;
|
||||||
|
Symbol.st_size = Sym.Size;
|
||||||
Syms.push_back(Symbol);
|
Syms.push_back(Symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user