Changeset 273 in dev for trunk/abdev/BasicCompiler32
- Timestamp:
- Aug 11, 2007, 4:03:49 PM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/BasicCompiler.vcproj
r270 r273 1317 1317 </File> 1318 1318 <File 1319 RelativePath="..\BasicCompiler_Common\src\ObjectModule.cpp" 1320 > 1321 </File> 1322 <File 1319 1323 RelativePath="..\BasicCompiler_Common\src\Procedure.cpp" 1320 1324 > -
trunk/abdev/BasicCompiler32/Compile_Var.cpp
r265 r273 14 14 //変数 15 15 // TODO: xml未完成 16 int AllGlobalVarSize;17 int AllInitGlobalVarSize;18 19 16 int AllLocalVarSize; 20 17 -
trunk/abdev/BasicCompiler32/MakePeHdr.cpp
r272 r273 149 149 ////////////////// 150 150 // データテーブル 151 compiler.GetObjectModule().dataTable.Clear();152 151 if(bDebugCompile){ 153 152 compiler.GetObjectModule().dataTable.Add( (long)0x00000002 ); … … 493 492 494 493 //グローバル実行領域のコードサイズ 495 GlobalOpBufferSize =obp;494 GlobalOpBufferSize = compiler.linker.GetNativeCode().GetSize(); 496 495 497 496 //With情報のメモリを解放 … … 541 540 trace( "コード生成が終了しました。" ); 542 541 543 vector<ObjectModule *> masterObjectModules; 544 masterObjectModules.push_back( &compiler.GetObjectModule() ); 545 compiler.linker.Link( masterObjectModules ); 542 compiler.linker.Link( compiler.GetObjectModule() ); 546 543 547 544 oldSourceLines = compiler.linker.GetNativeCode().GetSourceLines(); … … 884 881 //グローバル変数情報を扱う構造体も初期バッファの有無による配置を行う 885 882 //(デバッグ情報で利用される) 886 extern int AllInitGlobalVarSize;887 883 BOOST_FOREACH( Variable *pVar, compiler.GetObjectModule().meta.GetGlobalVars() ){ 888 884 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 ); 890 889 } 891 890 } … … 913 912 914 913 //コードセッションのファイル上のサイズ 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 } 917 924 if(FileSize_CodeSection) bUse_CodeSection=1; 918 925 else bUse_CodeSection=0; … … 947 954 948 955 //リライタブルセクションのファイル上のサイズ(グローバル変数の初期情報のみを格納) 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 } 950 962 else{ 951 if(AllInitGlobalVarSize) FileSize_RWSection=AllInitGlobalVarSize; 963 if( compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() ) 964 { 965 FileSize_RWSection = compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize(); 966 } 952 967 else FileSize_RWSection=FILE_ALIGNMENT; 953 968 } … … 1011 1026 1012 1027 //リライタブルセクションのメモリ上のサイズ 1013 extern int AllGlobalVarSize;1014 i=AllInitGlobalVarSize+AllGlobalVarSize;1028 i = compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() 1029 + compiler.GetObjectModule().meta.GetGlobalVars().GetAllSize(); 1015 1030 if(i%MEM_ALIGNMENT) MemSize_RWSection=i+(MEM_ALIGNMENT-i%MEM_ALIGNMENT); 1016 1031 else MemSize_RWSection=i; … … 1189 1204 //初期バッファなし 1190 1205 *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))= 1191 AllInitGlobalVarSize+1206 compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() + 1192 1207 (*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+ 1193 1208 ImageBase+MemPos_RWSection; … … 1207 1222 compiler.linker.ResolveUserProcSchedules( MemPos_CodeSection ); 1208 1223 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 else1215 {1216 SetError();1217 }1218 1224 1219 1225 … … 1475 1481 memset((char *)RWSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME); 1476 1482 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(); 1478 1485 RWSectionHeader.VirtualAddress= MemPos_RWSection; 1479 1486 RWSectionHeader.SizeOfRawData= FileSize_RWSection; … … 1605 1612 1606 1613 //コード 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 ); 1608 1621 i+=i2; 1609 1622
Note:
See TracChangeset
for help on using the changeset viewer.