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), 626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines f_pDataRelRoLocal(NULL), 636f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines f_pGNUHashTab(NULL) { 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid ELFFileFormat::initStdSections(ObjectBuilder& pBuilder, unsigned int pBitClass) 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pTextSection = pBuilder.CreateSection(".text", 70a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::TEXT, 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR, 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pNULLSection = pBuilder.CreateSection("", 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Null, 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_NULL, 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0); 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pReadOnlySection = pBuilder.CreateSection(".rodata", 79a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::TEXT, 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pBSSSection = pBuilder.CreateSection(".bss", 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::BSS, 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_NOBITS, 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 8922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pComment = pBuilder.CreateSection(".comment", 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::MetaData, 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 9422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDataSection = pBuilder.CreateSection(".data", 95a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pData1 = pBuilder.CreateSection(".data1", 100a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 10422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDebug = pBuilder.CreateSection(".debug", 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Debug, 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 10922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pInit = pBuilder.CreateSection(".init", 110a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::TEXT, 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR, 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 11422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pInitArray = pBuilder.CreateSection(".init_array", 115a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_INIT_ARRAY, 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 11922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pFini = pBuilder.CreateSection(".fini", 120a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::TEXT, 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_EXECINSTR, 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 12422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pFiniArray = pBuilder.CreateSection(".fini_array", 125a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_FINI_ARRAY, 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 12922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pLine = pBuilder.CreateSection(".line", 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Debug, 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 13422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pPreInitArray = pBuilder.CreateSection(".preinit_array", 135a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PREINIT_ARRAY, 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // the definition of SHF_XXX attributes of rodata in Linux Standard Base 1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // conflicts with System V standard. We follow System V standard. 14122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pROData1 = pBuilder.CreateSection(".rodata1", 142a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::TEXT, 1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 1455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 14622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pShStrTab = pBuilder.CreateSection(".shstrtab", 1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::NamePool, 1485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_STRTAB, 1495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 1505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 151551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // In ELF Spec Book I, p1-16. If symbol table and string table are in 1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // loadable segments, set the attribute to SHF_ALLOC bit. But in the 1535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // real world, this bit always turn off. 15422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pSymTab = pBuilder.CreateSection(".symtab", 1555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::NamePool, 1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_SYMTAB, 1575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 15822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pBitClass / 8); 159d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 16022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStrTab = pBuilder.CreateSection(".strtab", 1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::NamePool, 1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_STRTAB, 1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 1645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 16522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pTBSS = pBuilder.CreateSection(".tbss", 1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::BSS, 1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_NOBITS, 1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | 1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_WRITE | 1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_TLS, 1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 17222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pTData = pBuilder.CreateSection(".tdata", 173a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | 1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_WRITE | 1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_TLS, 1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 1795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @ref 10.3.1.2, ISO/IEC 23360, Part 1:2010(E), p. 24. 18122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pCtors = pBuilder.CreateSection(".ctors", 182a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 18622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDataRelRo = pBuilder.CreateSection(".data.rel.ro", 187a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 189affc150dc44fab1911775a49636d0ce85333b634Zonr Chang llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 19122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDtors = pBuilder.CreateSection(".dtors", 192a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 19622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pEhFrame = pBuilder.CreateSection(".eh_frame", 197affc150dc44fab1911775a49636d0ce85333b634Zonr Chang LDFileFormat::EhFrame, 1985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 200affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 0x4); 20122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGCCExceptTable = pBuilder.CreateSection(".gcc_except_table", 202affc150dc44fab1911775a49636d0ce85333b634Zonr Chang LDFileFormat::GCCExceptTable, 2035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 2045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 205affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 0x4); 20622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGNUVersion = pBuilder.CreateSection(".gnu.version", 2075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Version, 2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_GNU_versym, 2095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 2105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 21122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGNUVersionD = pBuilder.CreateSection(".gnu.version_d", 2125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Version, 2135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_GNU_verdef, 2145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 2155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 21622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGNUVersionR = pBuilder.CreateSection(".gnu.version_r", 2175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Version, 2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_GNU_verneed, 2195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 2205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 22122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pJCR = pBuilder.CreateSection(".jcr", 222a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 2235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 2245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 2255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 22622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStab = pBuilder.CreateSection(".stab", 2275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Debug, 2285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 2295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 23122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStabStr = pBuilder.CreateSection(".stabstr", 2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Debug, 2335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_STRTAB, 2345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 2355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 23622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStackNote = pBuilder.CreateSection(".note.GNU-stack", 23722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDFileFormat::StackNote, 23822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::ELF::SHT_PROGBITS, 23922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 0x0, 24022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 0x1); 24122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 24222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @ref GCC convention, see http://www.airs.com/blog/archives/189 24322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDataRelRoLocal = pBuilder.CreateSection(".data.rel.ro.local", 244a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines LDFileFormat::DATA, 24522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::ELF::SHT_PROGBITS, 24622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 24722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 0x1); 24822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// Initialize format dependent sections. (sections for executable and shared 24922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// objects) 25022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao initObjectFormat(pBuilder, pBitClass); 2515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 253