Ignore:
Timestamp:
Aug 11, 2007, 4:03:49 PM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/src/Compiler.cpp

    r270 r273  
    1313    {
    1414        // メタ情報
    15         pNowObjectModule->meta.StaticLink( pStaticLibrary->meta );
     15        pNowObjectModule->StaticLink( *pStaticLibrary );
    1616    }
    1717}
  • trunk/abdev/BasicCompiler_Common/src/DataTable.cpp

    r256 r273  
    77#include <memory.h>
    88#include <stdlib.h>
    9 
    10 void DataTable::Realloc( int size )
    11 {
    12     this->buffer = (char *)realloc( this->buffer, size + 100 );
    13     this->size = size;
    14 }
    159
    1610int DataTable::AddBinary( const void *buffer, int size ){
  • trunk/abdev/BasicCompiler_Common/src/Linker.cpp

    r263 r273  
    7878void Linker::ResolveGlobalVarSchedules( long rwSectionBaseOffset )
    7979{
     80    int allInitVarSize = compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize();
     81
    8082    BOOST_FOREACH( const Schedule &schedule, nativeCode.GetSchedules() )
    8183    {
     
    8486            if( nativeCode.GetLong( schedule.GetOffset() ) & 0x80000000 )
    8587            {
    86                 extern int AllInitGlobalVarSize;
    8788                nativeCode.Overwrite(
    8889                    schedule.GetOffset(),
    89                     static_cast<long>( AllInitGlobalVarSize + (nativeCode.GetLong( schedule.GetOffset() ) & 0x7FFFFFFF) + imageBase + rwSectionBaseOffset )
     90                    static_cast<long>( allInitVarSize + (nativeCode.GetLong( schedule.GetOffset() ) & 0x7FFFFFFF) + imageBase + rwSectionBaseOffset )
    9091                );
    9192            }
     
    101102}
    102103
    103 void Linker::Link( vector<ObjectModule *> &objectModules )
     104void Linker::Link( ObjectModule &masterObjectModule )
    104105{
    105106    // nativeCodeは初期状態でなければならない
     
    108109        SetError();
    109110    }
    110 
    111     /*
    112     BOOST_FOREACH( ObjectModule *pObjectModule, objectModules )
    113     {
    114     }*/
    115     ObjectModule &masterObjectModule = *objectModules[0];
    116111
    117112    nativeCode.Put( masterObjectModule.globalNativeCode, false );
  • trunk/abdev/BasicCompiler_Common/src/Meta.cpp

    r272 r273  
    3636}
    3737
    38 void Meta::StaticLink( Meta &meta )
     38void Meta::StaticLink( Meta &meta, long dataSectionBaseOffset )
    3939{
    4040    // 名前空間
     
    5353        UserProc *pUserProc = meta.GetUserProcs().Iterator_GetNext();
    5454        pUserProc->isTargetObjectModule = false;
     55
     56        pUserProc->GetNativeCode().ResetDataSectionBaseOffset( dataSectionBaseOffset );
     57
    5558        this->userProcs.Put( pUserProc );
    5659    }
  • trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp

    r263 r273  
    125125    sourceLines.push_back( SourceLine( (long)sourceLines.size(), size, cp, sourceLineType ) );
    126126}
     127
     128void NativeCode::ResetDataSectionBaseOffset( long dataSectionBaseOffset )
     129{
     130    BOOST_FOREACH( const Schedule &schedule, schedules )
     131    {
     132        if( schedule.GetType() == Schedule::DataTable )
     133        {
     134            Overwrite(
     135                schedule.GetOffset(),
     136                GetLong( schedule.GetOffset() ) + dataSectionBaseOffset
     137            );
     138        }
     139    }
     140}
  • trunk/abdev/BasicCompiler_Common/src/Variable.cpp

    r248 r273  
    7373    return NULL;
    7474}
     75
     76void Variables::Add( Variable *pVar, bool isInitArea )
     77{
     78    int alignment = 0;
     79    if( pVar->GetType().IsStruct() ){
     80        alignment = pVar->GetType().GetClass().GetFixedAlignment();
     81    }
     82
     83    if( isInitArea ){
     84        //初期バッファがあるとき
     85
     86        if( alignment ){
     87            if( allInitSize % alignment ){
     88                allInitSize += alignment - (allInitSize % alignment);
     89            }
     90        }
     91
     92        pVar->SetOffsetAddress( allInitSize );
     93        allInitSize += pVar->GetMemorySize();
     94    }
     95    else{
     96        //初期バッファがないとき
     97
     98        if( alignment ){
     99            if( allSize % alignment ){
     100                allSize += alignment - (allSize % alignment);
     101            }
     102        }
     103
     104        pVar->SetOffsetAddress( allSize | 0x80000000 );
     105        allSize += pVar->GetMemorySize();
     106    }
     107
     108    push_back( pVar );
     109}
Note: See TracChangeset for help on using the changeset viewer.