//===- 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);
  f_pGNUHashTab   = pBuilder.CreateSection(".gnu.hash",
                                           LDFileFormat::NamePool,
                                           llvm::ELF::SHT_GNU_HASH,
                                           llvm::ELF::SHF_ALLOC,
                                           pBitClass / 8);
}
