//===- ELFExecFileFormat.cpp ----------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <mcld/LD/ELFExecFileFormat.h>
#include <mcld/LD/LDSection.h>
#include <mcld/Object/ObjectBuilder.h>

#include <llvm/Support/ELF.h>

using namespace mcld;

void ELFExecFileFormat::initObjectFormat(ObjectBuilder& pBuilder,
                                         unsigned int pBitClass)
{
  // FIXME: make sure ELF executable files has these sections.
  f_pDynSymTab    = pBuilder.CreateSection(".dynsym",
                                           LDFileFormat::NamePool,
                                           llvm::ELF::SHT_DYNSYM,
                                           llvm::ELF::SHF_ALLOC,
                                           pBitClass / 8);
  f_pDynStrTab    = pBuilder.CreateSection(".dynstr",
                                           LDFileFormat::NamePool,
                                           llvm::ELF::SHT_STRTAB,
                                           llvm::ELF::SHF_ALLOC,
                                           0x1);
  f_pInterp       = pBuilder.CreateSection(".interp",
                                           LDFileFormat::Note,
                                           llvm::ELF::SHT_PROGBITS,
                                           llvm::ELF::SHF_ALLOC,
                                           0x1);
  f_pHashTab      = pBuilder.CreateSection(".hash",
                                           LDFileFormat::NamePool,
                                           llvm::ELF::SHT_HASH,
                                           llvm::ELF::SHF_ALLOC,
                                           pBitClass / 8);
  f_pDynamic      = pBuilder.CreateSection(".dynamic",
                                           LDFileFormat::NamePool,
                                           llvm::ELF::SHT_DYNAMIC,
                                           llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
                                           pBitClass / 8);
  f_pRelaDyn      = pBuilder.CreateSection(".rela.dyn",
                                           LDFileFormat::Relocation,
                                           llvm::ELF::SHT_RELA,
                                           llvm::ELF::SHF_ALLOC,
                                           pBitClass / 8);
  f_pRelaPlt      = pBuilder.CreateSection(".rela.plt",
                                           LDFileFormat::Relocation,
                                           llvm::ELF::SHT_RELA,
                                           llvm::ELF::SHF_ALLOC,
                                           pBitClass / 8);
  f_pRelDyn      = pBuilder.CreateSection(".rel.dyn",
                                           LDFileFormat::Relocation,
                                           llvm::ELF::SHT_REL,
                                           llvm::ELF::SHF_ALLOC,
                                           pBitClass / 8);
  f_pRelPlt      = pBuilder.CreateSection(".rel.plt",
                                           LDFileFormat::Relocation,
                                           llvm::ELF::SHT_REL,
                                           llvm::ELF::SHF_ALLOC,
                                           pBitClass / 8);
  f_pGOT          = pBuilder.CreateSection(".got",
                                           LDFileFormat::Target,
                                           llvm::ELF::SHT_PROGBITS,
                                           llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
                                           pBitClass / 8);
  f_pPLT          = pBuilder.CreateSection(".plt",
                                           LDFileFormat::Target,
                                           llvm::ELF::SHT_PROGBITS,
                                           llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR,
                                           pBitClass / 8);
  f_pGOTPLT       = pBuilder.CreateSection(".got.plt",
                                           LDFileFormat::Target,
                                           llvm::ELF::SHT_PROGBITS,
                                           llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
                                           pBitClass / 8);
  f_pEhFrameHdr   = pBuilder.CreateSection(".eh_frame_hdr",
                                           LDFileFormat::EhFrameHdr,
                                           llvm::ELF::SHT_PROGBITS,
                                           llvm::ELF::SHF_ALLOC,
                                           0x4);
}
