mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
[yaml2obj][ELF] Don't explicitly set Binding
with STB_*
Instead, just have 3 sub-lists, one for each of {STB_LOCAL,STB_GLOBAL,STB_WEAK}. This allows us to be a lot more explicit w.r.t. the symbol ordering in the object file, because if we allowed explicitly setting the STB_* `Binding` key for the symbol, then we might have ended up having to shuffle STB_LOCAL symbols to the front of the list, which is likely to cause confusion and potential for error. Also, this new approach is simpler ;) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184506 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -40,7 +40,6 @@ LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_ELFOSABI)
|
||||
LLVM_YAML_STRONG_TYPEDEF(uint32_t, ELF_SHT)
|
||||
// Just use 64, since it can hold 32-bit values too.
|
||||
LLVM_YAML_STRONG_TYPEDEF(uint64_t, ELF_SHF)
|
||||
LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STB)
|
||||
LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STT)
|
||||
|
||||
// For now, hardcode 64 bits everywhere that 32 or 64 would be needed
|
||||
@@ -55,12 +54,16 @@ struct FileHeader {
|
||||
};
|
||||
struct Symbol {
|
||||
StringRef Name;
|
||||
ELF_STB Binding;
|
||||
ELF_STT Type;
|
||||
StringRef Section;
|
||||
llvm::yaml::Hex64 Value;
|
||||
llvm::yaml::Hex64 Size;
|
||||
};
|
||||
struct LocalGlobalWeakSymbols {
|
||||
std::vector<Symbol> Local;
|
||||
std::vector<Symbol> Global;
|
||||
std::vector<Symbol> Weak;
|
||||
};
|
||||
struct Section {
|
||||
StringRef Name;
|
||||
ELF_SHT Type;
|
||||
@@ -70,7 +73,7 @@ struct Section {
|
||||
StringRef Link;
|
||||
llvm::yaml::Hex64 AddressAlign;
|
||||
// For SHT_SYMTAB; should be empty otherwise.
|
||||
std::vector<Symbol> Symbols;
|
||||
LocalGlobalWeakSymbols Symbols;
|
||||
};
|
||||
struct Object {
|
||||
FileHeader Header;
|
||||
@@ -121,11 +124,6 @@ struct ScalarBitSetTraits<ELFYAML::ELF_SHF> {
|
||||
static void bitset(IO &IO, ELFYAML::ELF_SHF &Value);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct ScalarEnumerationTraits<ELFYAML::ELF_STB> {
|
||||
static void enumeration(IO &IO, ELFYAML::ELF_STB &Value);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct ScalarEnumerationTraits<ELFYAML::ELF_STT> {
|
||||
static void enumeration(IO &IO, ELFYAML::ELF_STT &Value);
|
||||
@@ -141,6 +139,11 @@ struct MappingTraits<ELFYAML::Symbol> {
|
||||
static void mapping(IO &IO, ELFYAML::Symbol &Symbol);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct MappingTraits<ELFYAML::LocalGlobalWeakSymbols> {
|
||||
static void mapping(IO &IO, ELFYAML::LocalGlobalWeakSymbols &Symbols);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct MappingTraits<ELFYAML::Section> {
|
||||
static void mapping(IO &IO, ELFYAML::Section &Section);
|
||||
|
Reference in New Issue
Block a user