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//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/ELFFileFormat.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Object/ObjectBuilder.h" 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Target/GNULDBackend.h" 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/Support/ELF.h> 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoELFFileFormat::ELFFileFormat() 1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines : f_pNULLSection(NULL), 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGOT(NULL), 2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pPLT(NULL), 2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pRelDyn(NULL), 2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pRelPlt(NULL), 2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pRelaDyn(NULL), 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pRelaPlt(NULL), 2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pComment(NULL), 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pData1(NULL), 2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDebug(NULL), 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDynamic(NULL), 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDynStrTab(NULL), 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDynSymTab(NULL), 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pFini(NULL), 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pFiniArray(NULL), 3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pHashTab(NULL), 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pInit(NULL), 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pInitArray(NULL), 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pInterp(NULL), 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pLine(NULL), 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pNote(NULL), 3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pPreInitArray(NULL), 4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pROData1(NULL), 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pShStrTab(NULL), 4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStrTab(NULL), 4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pSymTab(NULL), 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pTBSS(NULL), 4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pTData(NULL), 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pCtors(NULL), 4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDataRelRo(NULL), 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDtors(NULL), 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pEhFrame(NULL), 5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pEhFrameHdr(NULL), 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGCCExceptTable(NULL), 5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGNUVersion(NULL), 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGNUVersionD(NULL), 5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGNUVersionR(NULL), 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGOTPLT(NULL), 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pJCR(NULL), 5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pNoteABITag(NULL), 5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStab(NULL), 5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStabStr(NULL), 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStack(NULL), 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStackNote(NULL), 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDataRelRoLocal(NULL), 6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGNUHashTab(NULL) { 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid ELFFileFormat::initStdSections(ObjectBuilder& pBuilder, 6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines unsigned int pBitClass) { 6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pTextSection = 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".text", 7037b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::TEXT, 7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR, 7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pNULLSection = 7537b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection("", LDFileFormat::Null, llvm::ELF::SHT_NULL, 0x0); 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pReadOnlySection = pBuilder.CreateSection(".rodata", 770dea6bc96bb52346737966839ac68644f7939f58Stephen Hines LDFileFormat::TEXT, 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pBSSSection = 8337b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".bss", 8437b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::BSS, 8537b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_NOBITS, 8637b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 8737b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 8837b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pComment = pBuilder.CreateSection( 8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".comment", LDFileFormat::MetaData, llvm::ELF::SHT_PROGBITS, 0x0, 0x1); 9037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDataSection = 9137b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".data", 9237b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 9537b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 9637b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pData1 = pBuilder.CreateSection(".data1", 9737b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 9837b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 9937b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 10037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 10137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDebug = pBuilder.CreateSection( 10237b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".debug", LDFileFormat::Debug, llvm::ELF::SHT_PROGBITS, 0x0, 0x1); 10337b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pInit = 10437b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".init", 10537b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::TEXT, 10637b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 10737b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR, 10837b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 10937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pInitArray = 11037b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".init_array", 11137b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 11237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_INIT_ARRAY, 11337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 11437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 11537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pFini = 11637b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".fini", 11737b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::TEXT, 11837b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 11937b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR, 12037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 12137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pFiniArray = 12237b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".fini_array", 12337b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 12437b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_FINI_ARRAY, 12537b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 12637b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 12737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pLine = pBuilder.CreateSection( 12837b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".line", LDFileFormat::Debug, llvm::ELF::SHT_PROGBITS, 0x0, 0x1); 12937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pPreInitArray = 13037b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".preinit_array", 13137b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 13237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PREINIT_ARRAY, 13337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 13437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // the definition of SHF_XXX attributes of rodata in Linux Standard Base 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // conflicts with System V standard. We follow System V standard. 13737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pROData1 = pBuilder.CreateSection(".rodata1", 13837b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::TEXT, 13937b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 14037b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC, 14137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 14237b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pShStrTab = pBuilder.CreateSection( 14337b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".shstrtab", LDFileFormat::NamePool, llvm::ELF::SHT_STRTAB, 0x0, 0x1); 144551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // In ELF Spec Book I, p1-16. If symbol table and string table are in 1455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // loadable segments, set the attribute to SHF_ALLOC bit. But in the 1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // real world, this bit always turn off. 14737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pSymTab = pBuilder.CreateSection(".symtab", 14837b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::NamePool, 14937b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_SYMTAB, 15037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x0, 15137b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBitClass / 8); 152d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 15337b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStrTab = pBuilder.CreateSection( 15437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".strtab", LDFileFormat::NamePool, llvm::ELF::SHT_STRTAB, 0x0, 0x1); 15537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pTBSS = pBuilder.CreateSection( 15637b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".tbss", 15737b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::BSS, 15837b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_NOBITS, 15937b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE | llvm::ELF::SHF_TLS, 16037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 16137b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pTData = pBuilder.CreateSection( 16237b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".tdata", 16337b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 16437b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 16537b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE | llvm::ELF::SHF_TLS, 16637b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @ref 10.3.1.2, ISO/IEC 23360, Part 1:2010(E), p. 24. 16937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pCtors = pBuilder.CreateSection(".ctors", 17037b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 17137b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 17237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 17337b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 17437b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDataRelRo = 17537b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".data.rel.ro", 17637b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 17737b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 17837b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 17937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 18037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDtors = pBuilder.CreateSection(".dtors", 18137b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 18237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 18337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 18437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 18537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pEhFrame = pBuilder.CreateSection(".eh_frame", 18637b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::EhFrame, 18737b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 18837b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC, 18937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x4); 19037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGCCExceptTable = pBuilder.CreateSection(".gcc_except_table", 19137b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::GCCExceptTable, 19237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 19337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC, 19437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x4); 19537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGNUVersion = pBuilder.CreateSection(".gnu.version", 19637b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::Version, 19737b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_GNU_versym, 19837b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC, 19937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 20037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGNUVersionD = pBuilder.CreateSection(".gnu.version_d", 20137b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::Version, 20237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_GNU_verdef, 20337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC, 20437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 20537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pGNUVersionR = pBuilder.CreateSection(".gnu.version_r", 20637b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::Version, 20737b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_GNU_verneed, 20837b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC, 20937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 21037b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pJCR = pBuilder.CreateSection(".jcr", 21137b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 21237b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 21337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 21437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 21537b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStab = pBuilder.CreateSection( 21637b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".stab", LDFileFormat::Debug, llvm::ELF::SHT_PROGBITS, 0x0, 0x1); 21737b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStabStr = pBuilder.CreateSection( 21837b74a387bb3993387029859c2d9d051c41c724eStephen Hines ".stabstr", LDFileFormat::Debug, llvm::ELF::SHT_STRTAB, 0x0, 0x1); 21937b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pStackNote = pBuilder.CreateSection(".note.GNU-stack", 22037b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::StackNote, 22137b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 22237b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x0, 22337b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 22422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 22522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @ref GCC convention, see http://www.airs.com/blog/archives/189 22637b74a387bb3993387029859c2d9d051c41c724eStephen Hines f_pDataRelRoLocal = 22737b74a387bb3993387029859c2d9d051c41c724eStephen Hines pBuilder.CreateSection(".data.rel.ro.local", 22837b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDFileFormat::DATA, 22937b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHT_PROGBITS, 23037b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 23137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 0x1); 23222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// Initialize format dependent sections. (sections for executable and shared 23322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// objects) 23422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao initObjectFormat(pBuilder, pBitClass); 2355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 23737b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 238