Ignore:
Timestamp:
Aug 11, 2007, 4:03:49 PM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r272 r273  
    149149    //////////////////
    150150    // データテーブル
    151     compiler.GetObjectModule().dataTable.Clear();
    152151    if(bDebugCompile){
    153152        compiler.GetObjectModule().dataTable.Add( (long)0x00000002 );
     
    493492
    494493        //グローバル実行領域のコードサイズ
    495         GlobalOpBufferSize=obp;
     494        GlobalOpBufferSize = compiler.linker.GetNativeCode().GetSize();
    496495
    497496        //With情報のメモリを解放
     
    541540    trace( "コード生成が終了しました。" );
    542541
    543     vector<ObjectModule *> masterObjectModules;
    544     masterObjectModules.push_back( &compiler.GetObjectModule() );
    545     compiler.linker.Link( masterObjectModules );
     542    compiler.linker.Link( compiler.GetObjectModule() );
    546543
    547544    oldSourceLines = compiler.linker.GetNativeCode().GetSourceLines();
     
    884881    //グローバル変数情報を扱う構造体も初期バッファの有無による配置を行う
    885882    //(デバッグ情報で利用される)
    886     extern int AllInitGlobalVarSize;
    887883    BOOST_FOREACH( Variable *pVar, compiler.GetObjectModule().meta.GetGlobalVars() ){
    888884        if(pVar->GetOffsetAddress()&0x80000000){
    889             pVar->SetOffsetAddress( (pVar->GetOffsetAddress()&0x7FFFFFFF)+AllInitGlobalVarSize );
     885            pVar->SetOffsetAddress(
     886                (pVar->GetOffsetAddress()&0x7FFFFFFF)
     887                + compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
     888            );
    890889        }
    891890    }
     
    913912
    914913    //コードセッションのファイル上のサイズ
    915     if(obp%FILE_ALIGNMENT) FileSize_CodeSection=obp+(FILE_ALIGNMENT-obp%FILE_ALIGNMENT);
    916     else FileSize_CodeSection=obp;
     914    if(compiler.linker.GetNativeCode().GetSize()%FILE_ALIGNMENT)
     915    {
     916        FileSize_CodeSection =
     917            compiler.linker.GetNativeCode().GetSize()
     918            + (FILE_ALIGNMENT-compiler.linker.GetNativeCode().GetSize()%FILE_ALIGNMENT);
     919    }
     920    else
     921    {
     922        FileSize_CodeSection = compiler.linker.GetNativeCode().GetSize();
     923    }
    917924    if(FileSize_CodeSection) bUse_CodeSection=1;
    918925    else bUse_CodeSection=0;
     
    947954
    948955    //リライタブルセクションのファイル上のサイズ(グローバル変数の初期情報のみを格納)
    949     if(AllInitGlobalVarSize%FILE_ALIGNMENT) FileSize_RWSection=AllInitGlobalVarSize+(FILE_ALIGNMENT-AllInitGlobalVarSize%FILE_ALIGNMENT);
     956    if( compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() % FILE_ALIGNMENT )
     957    {
     958        FileSize_RWSection =
     959            compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
     960            + (FILE_ALIGNMENT-compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()%FILE_ALIGNMENT);
     961    }
    950962    else{
    951         if(AllInitGlobalVarSize) FileSize_RWSection=AllInitGlobalVarSize;
     963        if( compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() )
     964        {
     965            FileSize_RWSection = compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize();
     966        }
    952967        else FileSize_RWSection=FILE_ALIGNMENT;
    953968    }
     
    10111026
    10121027    //リライタブルセクションのメモリ上のサイズ
    1013     extern int AllGlobalVarSize;
    1014     i=AllInitGlobalVarSize+AllGlobalVarSize;
     1028    i = compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
     1029        + compiler.GetObjectModule().meta.GetGlobalVars().GetAllSize();
    10151030    if(i%MEM_ALIGNMENT) MemSize_RWSection=i+(MEM_ALIGNMENT-i%MEM_ALIGNMENT);
    10161031    else MemSize_RWSection=i;
     
    11891204            //初期バッファなし
    11901205            *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))=
    1191                 AllInitGlobalVarSize+
     1206                compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() +
    11921207                (*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+
    11931208                ImageBase+MemPos_RWSection;
     
    12071222    compiler.linker.ResolveUserProcSchedules( MemPos_CodeSection );
    12081223    compiler.linker.ResolveGlobalVarSchedules( MemPos_RWSection );
    1209 
    1210     if( obp == compiler.linker.GetNativeCode().GetSize() )
    1211     {
    1212         memcpy( OpBuffer, compiler.linker.GetNativeCode().GetCodeBuffer(), compiler.linker.GetNativeCode().GetSize() );
    1213     }
    1214     else
    1215     {
    1216         SetError();
    1217     }
    12181224
    12191225
     
    14751481    memset((char *)RWSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
    14761482    lstrcpy((char *)RWSectionHeader.Name,".data");
    1477     RWSectionHeader.Misc.VirtualSize=           AllInitGlobalVarSize+AllGlobalVarSize;
     1483    RWSectionHeader.Misc.VirtualSize=           compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
     1484                                                + compiler.GetObjectModule().meta.GetGlobalVars().GetAllSize();
    14781485    RWSectionHeader.VirtualAddress=             MemPos_RWSection;
    14791486    RWSectionHeader.SizeOfRawData=              FileSize_RWSection;
     
    16051612
    16061613    //コード
    1607     WriteFile(hFile,OpBuffer,obp,(DWORD *)&i2,NULL);
     1614    WriteFile(
     1615        hFile,
     1616        compiler.linker.GetNativeCode().GetCodeBuffer(),
     1617        compiler.linker.GetNativeCode().GetSize(),
     1618        (DWORD *)&i2,
     1619        NULL
     1620    );
    16081621    i+=i2;
    16091622
Note: See TracChangeset for help on using the changeset viewer.