mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
[Object] Extract Elf_Ehdr. Patch by Hemant Kulkarni!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163532 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6165dba25f
commit
2c38a6615a
@ -387,11 +387,36 @@ struct Elf_Rel_Impl<target_endianness, false, isRela>
|
||||
}
|
||||
};
|
||||
|
||||
template<support::endianness target_endianness, bool is64Bits>
|
||||
struct Elf_Ehdr_Impl {
|
||||
LLVM_ELF_IMPORT_TYPES(target_endianness, is64Bits)
|
||||
unsigned char e_ident[ELF::EI_NIDENT]; // ELF Identification bytes
|
||||
Elf_Half e_type; // Type of file (see ET_*)
|
||||
Elf_Half e_machine; // Required architecture for this file (see EM_*)
|
||||
Elf_Word e_version; // Must be equal to 1
|
||||
Elf_Addr e_entry; // Address to jump to in order to start program
|
||||
Elf_Off e_phoff; // Program header table's file offset, in bytes
|
||||
Elf_Off e_shoff; // Section header table's file offset, in bytes
|
||||
Elf_Word e_flags; // Processor-specific flags
|
||||
Elf_Half e_ehsize; // Size of ELF header, in bytes
|
||||
Elf_Half e_phentsize;// Size of an entry in the program header table
|
||||
Elf_Half e_phnum; // Number of entries in the program header table
|
||||
Elf_Half e_shentsize;// Size of an entry in the section header table
|
||||
Elf_Half e_shnum; // Number of entries in the section header table
|
||||
Elf_Half e_shstrndx; // Section header table index of section name
|
||||
// string table
|
||||
bool checkMagic() const {
|
||||
return (memcmp(e_ident, ELF::ElfMagic, strlen(ELF::ElfMagic))) == 0;
|
||||
}
|
||||
unsigned char getFileClass() const { return e_ident[ELF::EI_CLASS]; }
|
||||
unsigned char getDataEncoding() const { return e_ident[ELF::EI_DATA]; }
|
||||
};
|
||||
|
||||
template<support::endianness target_endianness, bool is64Bits>
|
||||
class ELFObjectFile : public ObjectFile {
|
||||
LLVM_ELF_IMPORT_TYPES(target_endianness, is64Bits)
|
||||
|
||||
typedef Elf_Ehdr_Impl<target_endianness, is64Bits> Elf_Ehdr;
|
||||
typedef Elf_Shdr_Impl<target_endianness, is64Bits> Elf_Shdr;
|
||||
typedef Elf_Sym_Impl<target_endianness, is64Bits> Elf_Sym;
|
||||
typedef Elf_Dyn_Impl<target_endianness, is64Bits> Elf_Dyn;
|
||||
@ -406,28 +431,6 @@ class ELFObjectFile : public ObjectFile {
|
||||
typedef content_iterator<DynRef> dyn_iterator;
|
||||
|
||||
protected:
|
||||
struct Elf_Ehdr {
|
||||
unsigned char e_ident[ELF::EI_NIDENT]; // ELF Identification bytes
|
||||
Elf_Half e_type; // Type of file (see ET_*)
|
||||
Elf_Half e_machine; // Required architecture for this file (see EM_*)
|
||||
Elf_Word e_version; // Must be equal to 1
|
||||
Elf_Addr e_entry; // Address to jump to in order to start program
|
||||
Elf_Off e_phoff; // Program header table's file offset, in bytes
|
||||
Elf_Off e_shoff; // Section header table's file offset, in bytes
|
||||
Elf_Word e_flags; // Processor-specific flags
|
||||
Elf_Half e_ehsize; // Size of ELF header, in bytes
|
||||
Elf_Half e_phentsize;// Size of an entry in the program header table
|
||||
Elf_Half e_phnum; // Number of entries in the program header table
|
||||
Elf_Half e_shentsize;// Size of an entry in the section header table
|
||||
Elf_Half e_shnum; // Number of entries in the section header table
|
||||
Elf_Half e_shstrndx; // Section header table index of section name
|
||||
// string table
|
||||
bool checkMagic() const {
|
||||
return (memcmp(e_ident, ELF::ElfMagic, strlen(ELF::ElfMagic))) == 0;
|
||||
}
|
||||
unsigned char getFileClass() const { return e_ident[ELF::EI_CLASS]; }
|
||||
unsigned char getDataEncoding() const { return e_ident[ELF::EI_DATA]; }
|
||||
};
|
||||
// This flag is used for classof, to distinguish ELFObjectFile from
|
||||
// its subclass. If more subclasses will be created, this flag will
|
||||
// have to become an enum.
|
||||
|
@ -36,8 +36,7 @@ class DyldELFObject : public ELFObjectFile<target_endianness, is64Bits> {
|
||||
typedef Elf_Rel_Impl<target_endianness, is64Bits, false> Elf_Rel;
|
||||
typedef Elf_Rel_Impl<target_endianness, is64Bits, true> Elf_Rela;
|
||||
|
||||
typedef typename ELFObjectFile<target_endianness, is64Bits>::
|
||||
Elf_Ehdr Elf_Ehdr;
|
||||
typedef Elf_Ehdr_Impl<target_endianness, is64Bits> Elf_Ehdr;
|
||||
|
||||
typedef typename ELFDataTypeTypedefHelper<
|
||||
target_endianness, is64Bits>::value_type addr_type;
|
||||
|
Loading…
x
Reference in New Issue
Block a user