Changeset View
Changeset View
Standalone View
Standalone View
ELF/Writer.cpp
Show First 20 Lines • Show All 492 Lines • ▼ Show 20 Lines | |||||
EHdr->e_ident[EI_MAG1] = 0x45; | EHdr->e_ident[EI_MAG1] = 0x45; | ||||
EHdr->e_ident[EI_MAG2] = 0x4C; | EHdr->e_ident[EI_MAG2] = 0x4C; | ||||
EHdr->e_ident[EI_MAG3] = 0x46; | EHdr->e_ident[EI_MAG3] = 0x46; | ||||
EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; | EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; | ||||
EHdr->e_ident[EI_DATA] = ELFT::TargetEndianness == llvm::support::little | EHdr->e_ident[EI_DATA] = ELFT::TargetEndianness == llvm::support::little | ||||
? ELFDATA2LSB | ? ELFDATA2LSB | ||||
: ELFDATA2MSB; | : ELFDATA2MSB; | ||||
EHdr->e_ident[EI_VERSION] = EV_CURRENT; | EHdr->e_ident[EI_VERSION] = EV_CURRENT; | ||||
EHdr->e_ident[EI_OSABI] = ELFOSABI_NONE; | |||||
const SymbolTable &Symtab = SymTabSec.getSymTable(); | |||||
auto &FirstObj = cast<ObjectFile<ELFT>>(*Symtab.getFirstELF()); | |||||
uint8_t ABI = FirstObj.getOSABI(); | |||||
switch (ABI) { | |||||
default: | |||||
error("Unsupported ABI"); | |||||
case ELFOSABI_FREEBSD: | |||||
case ELFOSABI_NONE: | |||||
break; | |||||
case ELFOSABI_LINUX: | |||||
ABI = ELFOSABI_NONE; | |||||
} | |||||
EHdr->e_ident[EI_OSABI] = ABI; | |||||
// FIXME: Generalize the segment construction similar to how we create | // FIXME: Generalize the segment construction similar to how we create | ||||
// output sections. | // output sections. | ||||
const SymbolTable &Symtab = SymTabSec.getSymTable(); | |||||
EHdr->e_type = Config->Shared ? ET_DYN : ET_EXEC; | EHdr->e_type = Config->Shared ? ET_DYN : ET_EXEC; | ||||
auto &FirstObj = cast<ObjectFile<ELFT>>(*Symtab.getFirstELF()); | |||||
EHdr->e_machine = FirstObj.getEMachine(); | EHdr->e_machine = FirstObj.getEMachine(); | ||||
EHdr->e_version = EV_CURRENT; | EHdr->e_version = EV_CURRENT; | ||||
SymbolBody *Entry = Symtab.getEntrySym(); | SymbolBody *Entry = Symtab.getEntrySym(); | ||||
EHdr->e_entry = Entry ? getSymVA(cast<DefinedRegular<ELFT>>(Entry)) : 0; | EHdr->e_entry = Entry ? getSymVA(cast<DefinedRegular<ELFT>>(Entry)) : 0; | ||||
EHdr->e_phoff = ProgramHeaderOff; | EHdr->e_phoff = ProgramHeaderOff; | ||||
EHdr->e_shoff = SectionHeaderOff; | EHdr->e_shoff = SectionHeaderOff; | ||||
EHdr->e_ehsize = sizeof(Elf_Ehdr); | EHdr->e_ehsize = sizeof(Elf_Ehdr); | ||||
EHdr->e_phentsize = sizeof(Elf_Phdr); | EHdr->e_phentsize = sizeof(Elf_Phdr); | ||||
▲ Show 20 Lines • Show All 41 Lines • Show Last 20 Lines |