mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 06:33:21 +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>
|
template<support::endianness target_endianness, bool is64Bits>
|
||||||
class ELFObjectFile : public ObjectFile {
|
class ELFObjectFile : public ObjectFile {
|
||||||
LLVM_ELF_IMPORT_TYPES(target_endianness, is64Bits)
|
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_Shdr_Impl<target_endianness, is64Bits> Elf_Shdr;
|
||||||
typedef Elf_Sym_Impl<target_endianness, is64Bits> Elf_Sym;
|
typedef Elf_Sym_Impl<target_endianness, is64Bits> Elf_Sym;
|
||||||
typedef Elf_Dyn_Impl<target_endianness, is64Bits> Elf_Dyn;
|
typedef Elf_Dyn_Impl<target_endianness, is64Bits> Elf_Dyn;
|
||||||
@ -406,28 +431,6 @@ class ELFObjectFile : public ObjectFile {
|
|||||||
typedef content_iterator<DynRef> dyn_iterator;
|
typedef content_iterator<DynRef> dyn_iterator;
|
||||||
|
|
||||||
protected:
|
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
|
// This flag is used for classof, to distinguish ELFObjectFile from
|
||||||
// its subclass. If more subclasses will be created, this flag will
|
// its subclass. If more subclasses will be created, this flag will
|
||||||
// have to become an enum.
|
// 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, false> Elf_Rel;
|
||||||
typedef Elf_Rel_Impl<target_endianness, is64Bits, true> Elf_Rela;
|
typedef Elf_Rel_Impl<target_endianness, is64Bits, true> Elf_Rela;
|
||||||
|
|
||||||
typedef typename ELFObjectFile<target_endianness, is64Bits>::
|
typedef Elf_Ehdr_Impl<target_endianness, is64Bits> Elf_Ehdr;
|
||||||
Elf_Ehdr Elf_Ehdr;
|
|
||||||
|
|
||||||
typedef typename ELFDataTypeTypedefHelper<
|
typedef typename ELFDataTypeTypedefHelper<
|
||||||
target_endianness, is64Bits>::value_type addr_type;
|
target_endianness, is64Bits>::value_type addr_type;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user