15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- LDFileFormat.h -----------------------------------------------------===//
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#ifndef MCLD_ELF_FILE_FORMAT_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_ELF_FILE_FORMAT_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDFileFormat.h>
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSection.h>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass GNULDBackend;
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass MCLinker;
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class ELFFileFormat
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief ELFFileFormat describes the common file formats in ELF.
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  LDFileFormats control the formats of the output file.
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  @ref "Object Files," Ch. 4, in System V Application Binary Interface,
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  Fourth Edition.
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  @ref "Object Format," Ch. 10, in ISO/IEC 23360 Part 1:2010(E), Linux
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  Standard Base Core Specification 4.1.
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ELFFileFormat : public LDFileFormat
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ELFFileFormat(GNULDBackend& pBackend);
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual ~ELFFileFormat();
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual void initObjectFormat(MCLinker& pLinker);
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual void initObjectType(MCLinker& pLinker) = 0;
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  capacity  ----- //
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref Special Sections, Ch. 4.17, System V ABI, 4th edition.
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasNULLSection() const
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pNULLSection) && (0 != f_pNULLSection->size()); }
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasGOT() const
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pGOT) && (0 != f_pGOT->size()); }
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasPLT() const
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pPLT) && (0 != f_pPLT->size()); }
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasRelDyn() const
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pRelDyn) && (0 != f_pRelDyn->size()); }
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasRelPlt() const
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pRelPlt) && (0 != f_pRelPlt->size()); }
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasRelaDyn() const
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pRelaDyn) && (0 != f_pRelaDyn->size()); }
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasRelaPlt() const
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pRelaPlt) && (0 != f_pRelaPlt->size()); }
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref 10.3.1.1, ISO/IEC 23360, Part 1:2010(E), p. 21.
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasComment() const
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pComment) && (0 != f_pComment->size()); }
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasData1() const
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pData1) && (0 != f_pData1->size()); }
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasDebug() const
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pDebug) && (0 != f_pDebug->size()); }
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasDynamic() const
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pDynamic) && (0 != f_pDynamic->size()); }
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasDynStrTab() const
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pDynStrTab) && (0 != f_pDynStrTab->size()); }
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasDynSymTab() const
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pDynSymTab) && (0 != f_pDynSymTab->size()); }
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasFini() const
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pFini) && (0 != f_pFini->size()); }
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasFiniArray() const
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pFiniArray) && (0 != f_pFiniArray->size()); }
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasHashTab() const
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pHashTab) && (0 != f_pHashTab->size()); }
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasInit() const
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pInit) && (0 != f_pInit->size()); }
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasInitArray() const
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pInitArray) && (0 != f_pInitArray->size()); }
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasInterp() const
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pInterp) && (0 != f_pInterp->size()); }
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasLine() const
1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pLine) && (0 != f_pLine->size()); }
1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasNote() const
1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pNote) && (0 != f_pNote->size()); }
1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasPreInitArray() const
1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pPreInitArray) && (0 != f_pPreInitArray->size()); }
1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasROData1() const
1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pROData1) && (0 != f_pROData1->size()); }
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasShStrTab() const
1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pShStrTab) && (0 != f_pShStrTab->size()); }
1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasStrTab() const
1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pStrTab) && (0 != f_pStrTab->size()); }
1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasSymTab() const
1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pSymTab) && (0 != f_pSymTab->size()); }
1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasTBSS() const
1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pTBSS) && (0 != f_pTBSS->size()); }
1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasTData() const
1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pTData) && (0 != f_pTData->size()); }
1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref 10.3.1.2, ISO/IEC 23360, Part 1:2010(E), p. 24.
1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasCtors() const
1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pCtors) && (0 != f_pCtors->size()); }
1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasDataRelRo() const
1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pDataRelRo) && (0 != f_pDataRelRo->size()); }
1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasDtors() const
1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pDtors) && (0 != f_pDtors->size()); }
1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasEhFrame() const
1425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pEhFrame) && (0 != f_pEhFrame->size()); }
1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasEhFrameHdr() const
1455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pEhFrameHdr) && (0 != f_pEhFrameHdr->size()); }
1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasGCCExceptTable() const
1485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pGCCExceptTable) && (0 != f_pGCCExceptTable->size()); }
1495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasGNUVersion() const
1515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pGNUVersion) && (0 != f_pGNUVersion->size()); }
1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasGNUVersionD() const
1545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pGNUVersionD) && (0 != f_pGNUVersionD->size()); }
1555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasGNUVersionR() const
1575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pGNUVersionR) && (0 != f_pGNUVersionR->size()); }
1585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasGOTPLT() const
1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pGOTPLT) && (0 != f_pGOTPLT->size()); }
1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasJCR() const
1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pJCR) && (0 != f_pJCR->size()); }
1645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasNoteABITag() const
1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pNoteABITag) && (0 != f_pNoteABITag->size()); }
1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasStab() const
1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pStab) && (0 != f_pStab->size()); }
1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool hasStabStr() const
1725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return (NULL != f_pStabStr) && (0 != f_pStabStr->size()); }
1735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  access functions  ----- //
1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref Special Sections, Ch. 4.17, System V ABI, 4th edition.
1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getNULLSection() {
1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pNULLSection);
1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pNULLSection;
1795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getNULLSection() const {
1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pNULLSection);
1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pNULLSection;
1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getGOT() {
1875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGOT);
1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGOT;
1895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getGOT() const {
1925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGOT);
1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGOT;
1945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getPLT() {
1975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pPLT);
1985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pPLT;
1995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getPLT() const {
2025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pPLT);
2035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pPLT;
2045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getRelDyn() {
2075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelDyn);
2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelDyn;
2095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getRelDyn() const {
2125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelDyn);
2135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelDyn;
2145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getRelPlt() {
2175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelPlt);
2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelPlt;
2195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getRelPlt() const {
2225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelPlt);
2235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelPlt;
2245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getRelaDyn() {
2275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelaDyn);
2285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelaDyn;
2295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getRelaDyn() const {
2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelaDyn);
2335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelaDyn;
2345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getRelaPlt() {
2375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelaPlt);
2385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelaPlt;
2395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getRelaPlt() const {
2425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pRelaPlt);
2435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pRelaPlt;
2445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getComment() {
2475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pComment);
2485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pComment;
2495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref 10.3.1.1, ISO/IEC 23360, Part 1:2010(E), p. 21.
2525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getComment() const {
2535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pComment);
2545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pComment;
2555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getData1() {
2585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pData1);
2595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pData1;
2605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getData1() const {
2635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pData1);
2645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pData1;
2655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getDebug() {
2685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDebug);
2695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDebug;
2705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getDebug() const {
2735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDebug);
2745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDebug;
2755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getDynamic() {
2785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDynamic);
2795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDynamic;
2805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getDynamic() const {
2835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDynamic);
2845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDynamic;
2855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getDynStrTab() {
2885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDynStrTab);
2895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDynStrTab;
2905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getDynStrTab() const {
2935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDynStrTab);
2945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDynStrTab;
2955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
2965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getDynSymTab() {
2985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDynSymTab);
2995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDynSymTab;
3005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getDynSymTab() const {
3035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDynSymTab);
3045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDynSymTab;
3055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getFini() {
3085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pFini);
3095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pFini;
3105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getFini() const {
3135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pFini);
3145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pFini;
3155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getFiniArray() {
3185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pFiniArray);
3195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pFiniArray;
3205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getFiniArray() const {
3235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pFiniArray);
3245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pFiniArray;
3255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getHashTab() {
3285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pHashTab);
3295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pHashTab;
3305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getHashTab() const {
3335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pHashTab);
3345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pHashTab;
3355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getInit() {
3385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pInit);
3395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pInit;
3405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getInit() const {
3435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pInit);
3445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pInit;
3455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getInitArray() {
3485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pInitArray);
3495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pInitArray;
3505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getInitArray() const {
3535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pInitArray);
3545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pInitArray;
3555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getInterp() {
3585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pInterp);
3595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pInterp;
3605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getInterp() const {
3635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pInterp);
3645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pInterp;
3655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getLine() {
3685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pLine);
3695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pLine;
3705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getLine() const {
3735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pLine);
3745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pLine;
3755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getNote() {
3785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pNote);
3795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pNote;
3805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getNote() const {
3835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pNote);
3845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pNote;
3855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getPreInitArray() {
3885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pPreInitArray);
3895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pPreInitArray;
3905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getPreInitArray() const {
3935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pPreInitArray);
3945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pPreInitArray;
3955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
3965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getROData1() {
3985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pROData1);
3995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pROData1;
4005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getROData1() const {
4035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pROData1);
4045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pROData1;
4055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getShStrTab() {
4085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pShStrTab);
4095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pShStrTab;
4105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getShStrTab() const {
4135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pShStrTab);
4145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pShStrTab;
4155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getStrTab() {
4185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pStrTab);
4195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pStrTab;
4205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getStrTab() const {
4235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pStrTab);
4245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pStrTab;
4255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getSymTab() {
4285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pSymTab);
4295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pSymTab;
4305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getSymTab() const {
4335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pSymTab);
4345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pSymTab;
4355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getTBSS() {
4385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pTBSS);
4395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pTBSS;
4405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getTBSS() const {
4435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pTBSS);
4445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pTBSS;
4455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getTData() {
4485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pTData);
4495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pTData;
4505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getTData() const {
4535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pTData);
4545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pTData;
4555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref 10.3.1.2, ISO/IEC 23360, Part 1:2010(E), p. 24.
4585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getCtors() {
4595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pCtors);
4605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pCtors;
4615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getCtors() const {
4645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pCtors);
4655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pCtors;
4665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getDataRelRo() {
4695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDataRelRo);
4705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDataRelRo;
4715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getDataRelRo() const {
4745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDataRelRo);
4755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDataRelRo;
4765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getDtors() {
4795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDtors);
4805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDtors;
4815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getDtors() const {
4845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pDtors);
4855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pDtors;
4865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getEhFrame() {
4895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pEhFrame);
4905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pEhFrame;
4915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getEhFrame() const {
4945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pEhFrame);
4955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pEhFrame;
4965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
4975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getEhFrameHdr() {
4995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pEhFrameHdr);
5005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pEhFrameHdr;
5015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getEhFrameHdr() const {
5045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pEhFrameHdr);
5055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pEhFrameHdr;
5065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getGCCExceptTable() {
5095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGCCExceptTable);
5105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGCCExceptTable;
5115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getGCCExceptTable() const {
5145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGCCExceptTable);
5155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGCCExceptTable;
5165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getGNUVersion() {
5195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGNUVersion);
5205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGNUVersion;
5215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getGNUVersion() const {
5245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGNUVersion);
5255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGNUVersion;
5265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getGNUVersionD() {
5295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGNUVersionD);
5305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGNUVersionD;
5315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getGNUVersionD() const {
5345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGNUVersionD);
5355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGNUVersionD;
5365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getGNUVersionR() {
5395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGNUVersionR);
5405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGNUVersionR;
5415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getGNUVersionR() const {
5445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGNUVersionR);
5455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGNUVersionR;
5465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getGOTPLT() {
5495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGOTPLT);
5505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGOTPLT;
5515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getGOTPLT() const {
5545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pGOTPLT);
5555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pGOTPLT;
5565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getJCR() {
5595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pJCR);
5605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pJCR;
5615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getJCR() const {
5645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pJCR);
5655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pJCR;
5665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getNoteABITag() {
5695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pNoteABITag);
5705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pNoteABITag;
5715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getNoteABITag() const {
5745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pNoteABITag);
5755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pNoteABITag;
5765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getStab() {
5795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pStab);
5805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pStab;
5815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getStab() const {
5845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pStab);
5855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pStab;
5865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection& getStabStr() {
5895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pStabStr);
5905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pStabStr;
5915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection& getStabStr() const {
5945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != f_pStabStr);
5955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *f_pStabStr;
5965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
5975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected:
5995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  GNULDBackend& f_Backend;
6005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  //         variable name         :  ELF
6025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref Special Sections, Ch. 4.17, System V ABI, 4th edition.
6035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pNULLSection;
6045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pGOT;               // .got
6055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pPLT;               // .plt
6065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pRelDyn;            // .rel.dyn
6075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pRelPlt;            // .rel.plt
6085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pRelaDyn;           // .rela.dyn
6095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pRelaPlt;           // .rela.plt
6105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref 10.3.1.1, ISO/IEC 23360, Part 1:2010(E), p. 21.
6125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pComment;           // .comment
6135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pData1;             // .data1
6145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pDebug;             // .debug
6155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pDynamic;           // .dynamic
6165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pDynStrTab;         // .dynstr
6175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pDynSymTab;         // .dynsym
6185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pFini;              // .fini
6195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pFiniArray;         // .fini_array
6205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pHashTab;           // .hash
6215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pInit;              // .init
6225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pInitArray;         // .init_array
6235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pInterp;            // .interp
6245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pLine;              // .line
6255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pNote;              // .note
6265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pPreInitArray;      // .preinit_array
6275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pROData1;           // .rodata1
6285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pShStrTab;          // .shstrtab
6295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pStrTab;            // .strtab
6305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pSymTab;            // .symtab
6315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pTBSS;              // .tbss
6325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pTData;             // .tdata
6335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// @ref 10.3.1.2, ISO/IEC 23360, Part 1:2010(E), p. 24.
6355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pCtors;             // .ctors
6365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pDataRelRo;         // .data.rel.ro
6375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pDtors;             // .dtors
6385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pEhFrame;           // .eh_frame
6395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pEhFrameHdr;        // .eh_frame_hdr
6405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pGCCExceptTable;    // .gcc_except_table
6415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pGNUVersion;        // .gnu.version
6425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pGNUVersionD;       // .gnu.version_d
6435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pGNUVersionR;       // .gnu.version_r
6445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pGOTPLT;            // .got.plt
6455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pJCR;               // .jcr
6465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pNoteABITag;        // .note.ABI-tag
6475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pStab;              // .stab
6485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* f_pStabStr;           // .stabstr
6495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
6505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
6525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
654