LDFileFormat.h revision affc150dc44fab1911775a49636d0ce85333b634
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 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass MCLinker; 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection; 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class LDFileFormat 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief LDFileFormat describes the common file formats. 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDFileFormat 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao enum Kind { 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Null, 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Regular, 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BSS, 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NamePool, 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Relocation, 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Debug, 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Target, 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang EhFrame, 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang EhFrameHdr, 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang GCCExceptTable, 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Version, 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Note, 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao MetaData, 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Group, 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat(); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual ~LDFileFormat(); 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// initStdSections - initialize all standard sections. 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void initStdSections(MCLinker& pLinker); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// initObjectFormat - different format, such as ELF and MachO, should 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// implement this 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual void initObjectFormat(MCLinker& pLinker) = 0; 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// initObjectType - different types, such as shared object, executable 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// files, should implement this 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual void initObjectType(MCLinker& pLinker) = 0; 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- access functions ----- // 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getText() { 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pTextSection); 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pTextSection; 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getText() const { 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pTextSection); 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pTextSection; 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getData() { 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pDataSection); 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pDataSection; 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getData() const { 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pDataSection); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pDataSection; 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getBSS() { 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pBSSSection); 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pBSSSection; 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getBSS() const { 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pBSSSection); 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pBSSSection; 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection& getReadOnly() { 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pReadOnlySection); 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pReadOnlySection; 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const LDSection& getReadOnly() const { 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != f_pReadOnlySection); 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *f_pReadOnlySection; 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // variable name : ELF MachO 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pTextSection; // .text __text 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pDataSection; // .data __data 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pBSSSection; // .bss __bss 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* f_pReadOnlySection; // .rodata __const 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 115affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 116