ELFFileFormat.cpp revision 22add6ff3426df1a85089fe6a6e1597ee3b6f300
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- ELFFileFormat.cpp --------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/ELFFileFormat.h>
1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Object/ObjectBuilder.h>
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Target/GNULDBackend.h>
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/Support/ELF.h>
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld;
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoELFFileFormat::ELFFileFormat()
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  : f_pNULLSection(NULL),
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pGOT(NULL),
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pPLT(NULL),
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pRelDyn(NULL),
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pRelPlt(NULL),
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pRelaDyn(NULL),
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pRelaPlt(NULL),
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pComment(NULL),
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pData1(NULL),
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pDebug(NULL),
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pDynamic(NULL),
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pDynStrTab(NULL),
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pDynSymTab(NULL),
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pFini(NULL),
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pFiniArray(NULL),
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pHashTab(NULL),
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pInit(NULL),
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pInitArray(NULL),
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pInterp(NULL),
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pLine(NULL),
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pNote(NULL),
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pPreInitArray(NULL),
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pROData1(NULL),
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pShStrTab(NULL),
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pStrTab(NULL),
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pSymTab(NULL),
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pTBSS(NULL),
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pTData(NULL),
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pCtors(NULL),
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pDataRelRo(NULL),
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pDtors(NULL),
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pEhFrame(NULL),
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pEhFrameHdr(NULL),
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pGCCExceptTable(NULL),
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pGNUVersion(NULL),
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pGNUVersionD(NULL),
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pGNUVersionR(NULL),
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pGOTPLT(NULL),
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pJCR(NULL),
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pNoteABITag(NULL),
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    f_pStab(NULL),
59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    f_pStabStr(NULL),
6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    f_pStack(NULL),
6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    f_pStackNote(NULL),
6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    f_pDataRelRoLocal(NULL) {
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid ELFFileFormat::initStdSections(ObjectBuilder& pBuilder, unsigned int pBitClass)
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pTextSection     = pBuilder.CreateSection(".text",
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR,
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pNULLSection     = pBuilder.CreateSection("",
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Null,
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_NULL,
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0);
7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pReadOnlySection = pBuilder.CreateSection(".rodata",
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC,
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
8322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pBSSSection      = pBuilder.CreateSection(".bss",
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::BSS,
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_NOBITS,
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
8822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pComment         = pBuilder.CreateSection(".comment",
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::MetaData,
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pDataSection     = pBuilder.CreateSection(".data",
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pData1           = pBuilder.CreateSection(".data1",
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
10322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pDebug           = pBuilder.CreateSection(".debug",
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Debug,
1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
10822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pInit            = pBuilder.CreateSection(".init",
1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR,
1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
11322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pInitArray       = pBuilder.CreateSection(".init_array",
1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_INIT_ARRAY,
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
11822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pFini            = pBuilder.CreateSection(".fini",
1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR,
1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
12322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pFiniArray       = pBuilder.CreateSection(".fini_array",
1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_FINI_ARRAY,
1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
12822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pLine            = pBuilder.CreateSection(".line",
1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Debug,
1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
13322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pPreInitArray    = pBuilder.CreateSection(".preinit_array",
1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PREINIT_ARRAY,
1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // the definition of SHF_XXX attributes of rodata in Linux Standard Base
1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // conflicts with System V standard. We follow System V standard.
14022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pROData1         = pBuilder.CreateSection(".rodata1",
1415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC,
1445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
14522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pShStrTab        = pBuilder.CreateSection(".shstrtab",
1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::NamePool,
1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_STRTAB,
1485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
1495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
1505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // In ELF Spec Book I, p1-16. If symbol table and string table are in
1515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // loadable segments, set the attribute to SHF_ALLOC bit. But in the
1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // real world, this bit always turn off.
15322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pSymTab          = pBuilder.CreateSection(".symtab",
1545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::NamePool,
1555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_SYMTAB,
1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
15722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              pBitClass / 8);
15822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pStrTab          = pBuilder.CreateSection(".strtab",
1595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::NamePool,
1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_STRTAB,
1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
16322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pTBSS            = pBuilder.CreateSection(".tbss",
1645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::BSS,
1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_NOBITS,
1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC |
1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_WRITE |
1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_TLS,
1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
17022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pTData           = pBuilder.CreateSection(".tdata",
1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC |
1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_WRITE |
1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_TLS,
1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref 10.3.1.2, ISO/IEC 23360, Part 1:2010(E), p. 24.
17922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pCtors           = pBuilder.CreateSection(".ctors",
1805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
18422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pDataRelRo       = pBuilder.CreateSection(".data.rel.ro",
1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
187affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
18922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pDtors           = pBuilder.CreateSection(".dtors",
1905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
1915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
19422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pEhFrame         = pBuilder.CreateSection(".eh_frame",
195affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                              LDFileFormat::EhFrame,
1965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
1975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC,
198affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                              0x4);
19922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pGCCExceptTable  = pBuilder.CreateSection(".gcc_except_table",
200affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                              LDFileFormat::GCCExceptTable,
2015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
2025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC,
203affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                              0x4);
20422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pGNUVersion      = pBuilder.CreateSection(".gnu.version",
2055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Version,
2065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_GNU_versym,
2075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC,
2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
20922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pGNUVersionD     = pBuilder.CreateSection(".gnu.version_d",
2105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Version,
2115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_GNU_verdef,
2125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC,
2135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
21422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pGNUVersionR     = pBuilder.CreateSection(".gnu.version_r",
2155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Version,
2165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_GNU_verneed,
2175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC,
2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
21922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pJCR             = pBuilder.CreateSection(".jcr",
2205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Regular,
2215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
2225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
2235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
22422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pStab            = pBuilder.CreateSection(".stab",
2255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Debug,
2265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
2275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
2285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
22922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pStabStr         = pBuilder.CreateSection(".stabstr",
2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              LDFileFormat::Debug,
2315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              llvm::ELF::SHT_STRTAB,
2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x0,
2335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                              0x1);
23422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pStackNote       = pBuilder.CreateSection(".note.GNU-stack",
23522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              LDFileFormat::StackNote,
23622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
23722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              0x0,
23822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              0x1);
23922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
24022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// @ref GCC convention, see http://www.airs.com/blog/archives/189
24122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  f_pDataRelRoLocal  = pBuilder.CreateSection(".data.rel.ro.local",
24222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              LDFileFormat::Regular,
24322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              llvm::ELF::SHT_PROGBITS,
24422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE,
24522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                              0x1);
24622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// Initialize format dependent sections. (sections for executable and shared
24722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// objects)
24822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  initObjectFormat(pBuilder, pBitClass);
2495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
2505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
251