ELFFileFormat.cpp revision d0fbbb227051be16931a1aa9b4a7722ac039c698
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); 158d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 15922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStrTab = pBuilder.CreateSection(".strtab", 1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::NamePool, 1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_STRTAB, 1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 16422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pTBSS = pBuilder.CreateSection(".tbss", 1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::BSS, 1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_NOBITS, 1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | 1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_WRITE | 1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_TLS, 1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 17122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pTData = pBuilder.CreateSection(".tdata", 1725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Regular, 1735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | 1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_WRITE | 1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_TLS, 1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @ref 10.3.1.2, ISO/IEC 23360, Part 1:2010(E), p. 24. 18022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pCtors = pBuilder.CreateSection(".ctors", 1815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Regular, 1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 18522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDataRelRo = pBuilder.CreateSection(".data.rel.ro", 1865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Regular, 1875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 188affc150dc44fab1911775a49636d0ce85333b634Zonr Chang llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 19022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDtors = pBuilder.CreateSection(".dtors", 1915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Regular, 1925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 1945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 19522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pEhFrame = pBuilder.CreateSection(".eh_frame", 196affc150dc44fab1911775a49636d0ce85333b634Zonr Chang LDFileFormat::EhFrame, 1975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 1985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 199affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 0x4); 20022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGCCExceptTable = pBuilder.CreateSection(".gcc_except_table", 201affc150dc44fab1911775a49636d0ce85333b634Zonr Chang LDFileFormat::GCCExceptTable, 2025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 2035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 204affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 0x4); 20522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGNUVersion = pBuilder.CreateSection(".gnu.version", 2065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Version, 2075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_GNU_versym, 2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 2095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 21022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGNUVersionD = pBuilder.CreateSection(".gnu.version_d", 2115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Version, 2125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_GNU_verdef, 2135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 2145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 21522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pGNUVersionR = pBuilder.CreateSection(".gnu.version_r", 2165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Version, 2175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_GNU_verneed, 2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC, 2195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 22022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pJCR = pBuilder.CreateSection(".jcr", 2215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Regular, 2225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 2235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 2245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 22522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStab = pBuilder.CreateSection(".stab", 2265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Debug, 2275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_PROGBITS, 2285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 2295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 23022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStabStr = pBuilder.CreateSection(".stabstr", 2315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Debug, 2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::ELF::SHT_STRTAB, 2335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x0, 2345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 0x1); 23522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pStackNote = pBuilder.CreateSection(".note.GNU-stack", 23622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDFileFormat::StackNote, 23722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::ELF::SHT_PROGBITS, 23822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 0x0, 23922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 0x1); 24022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 24122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @ref GCC convention, see http://www.airs.com/blog/archives/189 24222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao f_pDataRelRoLocal = pBuilder.CreateSection(".data.rel.ro.local", 24322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDFileFormat::Regular, 24422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::ELF::SHT_PROGBITS, 24522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::ELF::SHF_ALLOC | llvm::ELF::SHF_WRITE, 24622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 0x1); 24722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// Initialize format dependent sections. (sections for executable and shared 24822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// objects) 24922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao initObjectFormat(pBuilder, pBitClass); 2505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 252