Changeset 257 in dev for trunk/abdev/BasicCompiler_Common


Ignore:
Timestamp:
Aug 2, 2007, 4:17:27 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/include/Linker.h

    r256 r257  
    3232class Linker
    3333{
    34     // メタ情報
    35     vector<const ObjectModule *> objectModules;
     34    // データテーブルスケジュール
     35    void ResolveDataTableSchedules( long dataSectionBaseOffset );
     36
     37    // DLL関数スケジュール
     38    void ResolveDllProcSchedules( long codeSectionBaseOffset, long importSectionBaseOffset );
     39
     40    // ユーザ定義関数スケジュール
     41    void ResolveUserProcSchedules( long codeSectionBaseOffset );
     42
     43    // グローバル変数スケジュール
     44    void ResolveGlobalVarSchedules( long rwSectionBaseOffset );
     45
     46    NativeCode nativeCode;
     47
     48    DWORD imageBase;
     49
     50public:
     51    Linker()
     52    {
     53    }
     54
     55    void SetImageBase( DWORD imageBase )
     56    {
     57        this->imageBase = imageBase;
     58    }
     59
     60    // リンク
     61    void Link( vector<ObjectModule *> &objectModules );
    3662};
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r256 r257  
    2222        UserProc,       // ユーザ定義関数呼び出し側スケジュール
    2323        AddressOf,      // ユーザ定義関数位置スケジュール
     24        DllProc,        // DLL関数位置スケジュール
    2425    };
    2526
     
    6263    }
    6364    Schedule( const ::DllProc *pDllProc, long offest )
    64         : type( Schedule::UserProc )
     65        : type( Schedule::DllProc )
    6566        , offset( offset )
    6667        , pDllProc( pDllProc )
     
    6970    ~Schedule()
    7071    {
     72    }
     73
     74    Type GetType() const
     75    {
     76        return type;
     77    }
     78    long GetOffset() const
     79    {
     80        return offset;
     81    }
     82    const ::DllProc &GetDllProc() const
     83    {
     84        if( type != Schedule::DllProc )
     85        {
     86            SetError();
     87        }
     88        return *pDllProc;
     89    }
     90    const ::UserProc &GetUserProc() const
     91    {
     92        if( type != Schedule::UserProc )
     93        {
     94            SetError();
     95        }
     96        return *pUserProc;
    7197    }
    7298
     
    188214        return size;
    189215    }
     216    const Schedules &GetSchedules() const
     217    {
     218        return schedules;
     219    }
    190220
    191221    long GetLong( int codePos ) const
     
    233263        ObpPlus( size );
    234264    }
    235     void Put( const NativeCode &nativeCode )
    236     {
    237         Put( nativeCode.codeBuffer, nativeCode.size );
    238     }
     265    void Put( const NativeCode &nativeCode );
    239266    void Put( _int64 i64data )
    240267    {
  • trunk/abdev/BasicCompiler_Common/include/Procedure.h

    r225 r257  
    314314    }
    315315
     316    const NativeCode &GetNativeCode() const
     317    {
     318        return nativeCode;
     319    }
    316320    NativeCode &GetNativeCode()
    317321    {
  • trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp

    r250 r257  
    1515    {
    1616        int test=0;
     17    }
     18}
     19
     20void NativeCode::Put( const NativeCode &nativeCode )
     21{
     22    long baseOffset = size;
     23
     24    Put( nativeCode.codeBuffer, nativeCode.size );
     25
     26    BOOST_FOREACH( const Schedule &schedule, nativeCode.schedules )
     27    {
     28        this->schedules.push_back(
     29            Schedule(
     30                schedule.GetType(),
     31                baseOffset + schedule.GetOffset()
     32            )
     33        );
    1734    }
    1835}
Note: See TracChangeset for help on using the changeset viewer.