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_LDFILE_FORMAT_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_LDFILE_FORMAT_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cstdio> 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cassert> 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection; 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ObjectBuilder; 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class LDFileFormat 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief LDFileFormat describes the common file formats. 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDFileFormat 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao enum Kind { 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Null, 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Regular, 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BSS, 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NamePool, 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Relocation, 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Debug, 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Target, 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang EhFrame, 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang EhFrameHdr, 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang GCCExceptTable, 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Version, 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Note, 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao MetaData, 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Group, 44f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines LinkOnce, 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao StackNote, 46f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Ignore, 47f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Exclude 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat(); 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual ~LDFileFormat(); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// initStdSections - initialize all standard section headers. 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param [in] pBuilder The ObjectBuilder to create section headers 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param [in] pBitClass The bitclass of target backend. 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual void initStdSections(ObjectBuilder& pBuilder, 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int pBitClass) = 0; 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- access functions ----- // 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getText() { 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pTextSection); 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pTextSection; 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getText() const { 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pTextSection); 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pTextSection; 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getData() { 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pDataSection); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pDataSection; 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getData() const { 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pDataSection); 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pDataSection; 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getBSS() { 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pBSSSection); 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pBSSSection; 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getBSS() const { 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pBSSSection); 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pBSSSection; 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getReadOnly() { 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pReadOnlySection); 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pReadOnlySection; 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getReadOnly() const { 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pReadOnlySection); 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pReadOnlySection; 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // variable name : ELF MachO 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pTextSection; // .text __text 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pDataSection; // .data __data 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pBSSSection; // .bss __bss 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pReadOnlySection; // .rodata __const 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 113affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 114