Index: trunk/abdev/BasicCompiler32/MakePeHdr.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 272)
+++ trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 273)
@@ -149,5 +149,4 @@
 	//////////////////
 	// データテーブル
-	compiler.GetObjectModule().dataTable.Clear();
 	if(bDebugCompile){
 		compiler.GetObjectModule().dataTable.Add( (long)0x00000002 );
@@ -493,5 +492,5 @@
 
 		//グローバル実行領域のコードサイズ
-		GlobalOpBufferSize=obp;
+		GlobalOpBufferSize = compiler.linker.GetNativeCode().GetSize();
 
 		//With情報のメモリを解放
@@ -541,7 +540,5 @@
 	trace( "コード生成が終了しました。" );
 
-	vector<ObjectModule *> masterObjectModules;
-	masterObjectModules.push_back( &compiler.GetObjectModule() );
-	compiler.linker.Link( masterObjectModules );
+	compiler.linker.Link( compiler.GetObjectModule() );
 
 	oldSourceLines = compiler.linker.GetNativeCode().GetSourceLines();
@@ -884,8 +881,10 @@
 	//グローバル変数情報を扱う構造体も初期バッファの有無による配置を行う
 	//（デバッグ情報で利用される）
-	extern int AllInitGlobalVarSize;
 	BOOST_FOREACH( Variable *pVar, compiler.GetObjectModule().meta.GetGlobalVars() ){
 		if(pVar->GetOffsetAddress()&0x80000000){
-			pVar->SetOffsetAddress( (pVar->GetOffsetAddress()&0x7FFFFFFF)+AllInitGlobalVarSize );
+			pVar->SetOffsetAddress(
+				(pVar->GetOffsetAddress()&0x7FFFFFFF)
+				+ compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
+			);
 		}
 	}
@@ -913,6 +912,14 @@
 
 	//コードセッションのファイル上のサイズ
-	if(obp%FILE_ALIGNMENT) FileSize_CodeSection=obp+(FILE_ALIGNMENT-obp%FILE_ALIGNMENT);
-	else FileSize_CodeSection=obp;
+	if(compiler.linker.GetNativeCode().GetSize()%FILE_ALIGNMENT)
+	{
+		FileSize_CodeSection =
+			compiler.linker.GetNativeCode().GetSize()
+			+ (FILE_ALIGNMENT-compiler.linker.GetNativeCode().GetSize()%FILE_ALIGNMENT);
+	}
+	else
+	{
+		FileSize_CodeSection = compiler.linker.GetNativeCode().GetSize();
+	}
 	if(FileSize_CodeSection) bUse_CodeSection=1;
 	else bUse_CodeSection=0;
@@ -947,7 +954,15 @@
 
 	//リライタブルセクションのファイル上のサイズ（グローバル変数の初期情報のみを格納）
-	if(AllInitGlobalVarSize%FILE_ALIGNMENT) FileSize_RWSection=AllInitGlobalVarSize+(FILE_ALIGNMENT-AllInitGlobalVarSize%FILE_ALIGNMENT);
+	if( compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() % FILE_ALIGNMENT )
+	{
+		FileSize_RWSection =
+			compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
+			+ (FILE_ALIGNMENT-compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()%FILE_ALIGNMENT);
+	}
 	else{
-		if(AllInitGlobalVarSize) FileSize_RWSection=AllInitGlobalVarSize;
+		if( compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() )
+		{
+			FileSize_RWSection = compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize();
+		}
 		else FileSize_RWSection=FILE_ALIGNMENT;
 	}
@@ -1011,6 +1026,6 @@
 
 	//リライタブルセクションのメモリ上のサイズ
-	extern int AllGlobalVarSize;
-	i=AllInitGlobalVarSize+AllGlobalVarSize;
+	i = compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
+		+ compiler.GetObjectModule().meta.GetGlobalVars().GetAllSize();
 	if(i%MEM_ALIGNMENT) MemSize_RWSection=i+(MEM_ALIGNMENT-i%MEM_ALIGNMENT);
 	else MemSize_RWSection=i;
@@ -1189,5 +1204,5 @@
 			//初期バッファなし
 			*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))=
-				AllInitGlobalVarSize+
+				compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() +
 				(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+
 				ImageBase+MemPos_RWSection;
@@ -1207,13 +1222,4 @@
 	compiler.linker.ResolveUserProcSchedules( MemPos_CodeSection );
 	compiler.linker.ResolveGlobalVarSchedules( MemPos_RWSection );
-
-	if( obp == compiler.linker.GetNativeCode().GetSize() )
-	{
-		memcpy( OpBuffer, compiler.linker.GetNativeCode().GetCodeBuffer(), compiler.linker.GetNativeCode().GetSize() );
-	}
-	else
-	{
-		SetError();
-	}
 
 
@@ -1475,5 +1481,6 @@
 	memset((char *)RWSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
 	lstrcpy((char *)RWSectionHeader.Name,".data");
-	RWSectionHeader.Misc.VirtualSize=			AllInitGlobalVarSize+AllGlobalVarSize;
+	RWSectionHeader.Misc.VirtualSize=			compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize()
+												+ compiler.GetObjectModule().meta.GetGlobalVars().GetAllSize();
 	RWSectionHeader.VirtualAddress=				MemPos_RWSection;
 	RWSectionHeader.SizeOfRawData=				FileSize_RWSection;
@@ -1605,5 +1612,11 @@
 
 	//コード
-	WriteFile(hFile,OpBuffer,obp,(DWORD *)&i2,NULL);
+	WriteFile(
+		hFile,
+		compiler.linker.GetNativeCode().GetCodeBuffer(),
+		compiler.linker.GetNativeCode().GetSize(),
+		(DWORD *)&i2,
+		NULL
+	);
 	i+=i2;
 
