1//===- ELFDynObjFileFormat.cpp --------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include "mcld/LD/ELFDynObjFileFormat.h" 10#include "mcld/LD/LDSection.h" 11#include "mcld/Object/ObjectBuilder.h" 12 13#include <llvm/Support/ELF.h> 14 15namespace mcld { 16 17void ELFDynObjFileFormat::initObjectFormat(ObjectBuilder& pBuilder, 18 unsigned int pBitClass) { 19 f_pDynSymTab = pBuilder.CreateSection(".dynsym", 20 LDFileFormat::NamePool, 21 llvm::ELF::SHT_DYNSYM, 22 llvm::ELF::SHF_ALLOC, 23 pBitClass / 8); 24 f_pDynStrTab = pBuilder.CreateSection(".dynstr", 25 LDFileFormat::NamePool, 26 llvm::ELF::SHT_STRTAB, 27 llvm::ELF::SHF_ALLOC, 28 0x1); 29 f_pInterp = pBuilder.CreateSection(".interp", 30 LDFileFormat::Note, 31 llvm::ELF::SHT_PROGBITS, 32 llvm::ELF::SHF_ALLOC, 33 0x1); 34 f_pHashTab = pBuilder.CreateSection(".hash", 35 LDFileFormat::NamePool, 36 llvm::ELF::SHT_HASH, 37 llvm::ELF::SHF_ALLOC, 38 pBitClass / 8); 39 f_pDynamic = 40 pBuilder.CreateSection(".dynamic", 41 LDFileFormat::NamePool, 42 llvm::ELF::SHT_DYNAMIC, 43 llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 44 pBitClass / 8); 45 f_pRelaDyn = pBuilder.CreateSection(".rela.dyn", 46 LDFileFormat::Relocation, 47 llvm::ELF::SHT_RELA, 48 llvm::ELF::SHF_ALLOC, 49 pBitClass / 8); 50 f_pRelaPlt = pBuilder.CreateSection(".rela.plt", 51 LDFileFormat::Relocation, 52 llvm::ELF::SHT_RELA, 53 llvm::ELF::SHF_ALLOC, 54 pBitClass / 8); 55 f_pRelDyn = pBuilder.CreateSection(".rel.dyn", 56 LDFileFormat::Relocation, 57 llvm::ELF::SHT_REL, 58 llvm::ELF::SHF_ALLOC, 59 pBitClass / 8); 60 f_pRelPlt = pBuilder.CreateSection(".rel.plt", 61 LDFileFormat::Relocation, 62 llvm::ELF::SHT_REL, 63 llvm::ELF::SHF_ALLOC, 64 pBitClass / 8); 65 f_pGOT = pBuilder.CreateSection(".got", 66 LDFileFormat::Target, 67 llvm::ELF::SHT_PROGBITS, 68 llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 69 pBitClass / 8); 70 f_pPLT = 71 pBuilder.CreateSection(".plt", 72 LDFileFormat::Target, 73 llvm::ELF::SHT_PROGBITS, 74 llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR, 75 pBitClass / 8); 76 f_pGOTPLT = 77 pBuilder.CreateSection(".got.plt", 78 LDFileFormat::Target, 79 llvm::ELF::SHT_PROGBITS, 80 llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 81 pBitClass / 8); 82 f_pEhFrameHdr = pBuilder.CreateSection(".eh_frame_hdr", 83 LDFileFormat::EhFrameHdr, 84 llvm::ELF::SHT_PROGBITS, 85 llvm::ELF::SHF_ALLOC, 86 0x4); 87 f_pGNUHashTab = pBuilder.CreateSection(".gnu.hash", 88 LDFileFormat::NamePool, 89 llvm::ELF::SHT_GNU_HASH, 90 llvm::ELF::SHF_ALLOC, 91 pBitClass / 8); 92} 93 94} // namespace mcld 95