void SVMELFProgramWriter::writeELFHeader(const MCAssembler &Asm, const MCAsmLayout &Layout) { // Debug-only section headers unsigned SHNum = ELFDebug ? 1 + Asm.getSectionList().size() : 0; unsigned Strtab = ELFDebug ? EMB.getShstrtabIndex() : 0; SHOffset = ELFDebug ? RoundUpToAlignment(ML.getSectionDiskOffset(SPS_END), 4) : 0; Write8(0x7f); // e_ident Write8('E'); Write8('L'); Write8('F'); Write8(ELF::ELFCLASS32); Write8(ELF::ELFDATA2LSB); Write8(ELF::EV_CURRENT); Write8(ELF::ELFOSABI_NONE); Write8(0); // ABI Version WriteZeros(ELF::EI_NIDENT - ELF::EI_PAD); Write16(ELF::ET_EXEC); // e_type Write16(ELF::EM_ARM); // e_machine Write32(ELF::EV_CURRENT); // e_version Write32(ML.getEntryAddress(Asm, Layout)); // e_entry Write32(SVMELF::PHOffset); // e_phoff Write32(SHOffset); // e_shoff Write32(0); // e_flags Write16(sizeof(ELF::Elf32_Ehdr)); // e_ehsize Write16(sizeof(ELF::Elf32_Phdr)); // e_phentsize Write16(SVMELF::PHNum); // e_phnum Write16(sizeof(ELF::Elf32_Shdr)); // e_shentsize Write16(SHNum); // e_shnum Write16(Strtab); // e_shstrndx }