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//===----------------------------------------------------------------------===// 987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_LD_LDFILEFORMAT_H 1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_LD_LDFILEFORMAT_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cstdio> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cassert> 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection; 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ObjectBuilder; 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class LDFileFormat 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief LDFileFormat describes the common file formats. 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDFileFormat 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao enum Kind { 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Null, 28a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines TEXT, // Executable regular sections 29a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines DATA, // Non-executable regular sections 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BSS, 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NamePool, 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Relocation, 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Debug, 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Target, 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang EhFrame, 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang EhFrameHdr, 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang GCCExceptTable, 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Version, 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Note, 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao MetaData, 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Group, 42f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines LinkOnce, 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao StackNote, 44f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Ignore, 45a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines Exclude, 46a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines Folded 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat(); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual ~LDFileFormat(); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// initStdSections - initialize all standard section headers. 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param [in] pBuilder The ObjectBuilder to create section headers 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param [in] pBitClass The bitclass of target backend. 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual void initStdSections(ObjectBuilder& pBuilder, 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int pBitClass) = 0; 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- access functions ----- // 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getText() { 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pTextSection); 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pTextSection; 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getText() const { 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pTextSection); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pTextSection; 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getData() { 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pDataSection); 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pDataSection; 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getData() const { 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pDataSection); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pDataSection; 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getBSS() { 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pBSSSection); 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pBSSSection; 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getBSS() const { 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pBSSSection); 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pBSSSection; 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getReadOnly() { 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pReadOnlySection); 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pReadOnlySection; 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getReadOnly() const { 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pReadOnlySection); 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pReadOnlySection; 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // variable name : ELF MachO 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pTextSection; // .text __text 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pDataSection; // .data __data 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pBSSSection; // .bss __bss 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pReadOnlySection; // .rodata __const 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 112affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 113