|
@@ -43,7 +43,6 @@ interface
|
|
symbase,ppu,symtype;
|
|
symbase,ppu,symtype;
|
|
|
|
|
|
type
|
|
type
|
|
-
|
|
|
|
{ tppumodule }
|
|
{ tppumodule }
|
|
|
|
|
|
tppumodule = class(tmodule)
|
|
tppumodule = class(tmodule)
|
|
@@ -99,6 +98,7 @@ interface
|
|
procedure writeResources;
|
|
procedure writeResources;
|
|
procedure writeunitimportsyms;
|
|
procedure writeunitimportsyms;
|
|
procedure writeasmsyms(kind:tunitasmlisttype;list:tfphashobjectlist);
|
|
procedure writeasmsyms(kind:tunitasmlisttype;list:tfphashobjectlist);
|
|
|
|
+ procedure writeextraheader;
|
|
procedure readsourcefiles;
|
|
procedure readsourcefiles;
|
|
procedure readloadunit;
|
|
procedure readloadunit;
|
|
procedure readlinkcontainer(var p:tlinkcontainer);
|
|
procedure readlinkcontainer(var p:tlinkcontainer);
|
|
@@ -109,6 +109,7 @@ interface
|
|
procedure readwpofile;
|
|
procedure readwpofile;
|
|
procedure readunitimportsyms;
|
|
procedure readunitimportsyms;
|
|
procedure readasmsyms;
|
|
procedure readasmsyms;
|
|
|
|
+ procedure readextraheader;
|
|
{$IFDEF MACRO_DIFF_HINT}
|
|
{$IFDEF MACRO_DIFF_HINT}
|
|
procedure writeusedmacro(p:TNamedIndexItem;arg:pointer);
|
|
procedure writeusedmacro(p:TNamedIndexItem;arg:pointer);
|
|
procedure writeusedmacros;
|
|
procedure writeusedmacros;
|
|
@@ -244,98 +245,110 @@ var
|
|
|
|
|
|
|
|
|
|
function tppumodule.openppu(ppufiletime:longint):boolean;
|
|
function tppumodule.openppu(ppufiletime:longint):boolean;
|
|
- begin
|
|
|
|
- openppu:=false;
|
|
|
|
- { check for a valid PPU file }
|
|
|
|
- if not ppufile.CheckPPUId then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_header);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- { check for allowed PPU versions }
|
|
|
|
- if not (ppufile.getversion = CurrentPPUVersion) then
|
|
|
|
- begin
|
|
|
|
- Message1(unit_u_ppu_invalid_version,tostr(ppufile.getversion),@queuecomment);
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- { check the target processor }
|
|
|
|
- if tsystemcpu(ppufile.header.common.cpu)<>target_cpu then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_processor,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- { check target }
|
|
|
|
- if tsystem(ppufile.header.common.target)<>target_info.system then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_target,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
-{$ifdef i8086}
|
|
|
|
- { check i8086 memory model flags }
|
|
|
|
- if ((ppufile.header.common.flags and uf_i8086_far_code)<>0) xor
|
|
|
|
- (current_settings.x86memorymodel in [mm_medium,mm_large,mm_huge]) then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- if ((ppufile.header.common.flags and uf_i8086_far_data)<>0) xor
|
|
|
|
- (current_settings.x86memorymodel in [mm_compact,mm_large]) then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- if ((ppufile.header.common.flags and uf_i8086_huge_data)<>0) xor
|
|
|
|
- (current_settings.x86memorymodel=mm_huge) then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- if ((ppufile.header.common.flags and uf_i8086_cs_equals_ds)<>0) xor
|
|
|
|
- (current_settings.x86memorymodel=mm_tiny) then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- if ((ppufile.header.common.flags and uf_i8086_ss_equals_ds)<>0) xor
|
|
|
|
- (current_settings.x86memorymodel in [mm_tiny,mm_small,mm_medium]) then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
-{$endif i8086}
|
|
|
|
|
|
+
|
|
|
|
+ function checkheader: boolean;
|
|
|
|
+ begin
|
|
|
|
+ result:=false;
|
|
|
|
+ { check for a valid PPU file }
|
|
|
|
+ if not ppufile.CheckPPUId then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_header);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ { check for allowed PPU versions }
|
|
|
|
+ if not (ppufile.getversion = CurrentPPUVersion) then
|
|
|
|
+ begin
|
|
|
|
+ Message1(unit_u_ppu_invalid_version,tostr(ppufile.getversion),@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ { check the target processor }
|
|
|
|
+ if tsystemcpu(ppufile.header.common.cpu)<>target_cpu then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_processor,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ { check target }
|
|
|
|
+ if tsystem(ppufile.header.common.target)<>target_info.system then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_target,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
{$ifdef cpufpemu}
|
|
{$ifdef cpufpemu}
|
|
- { check if floating point emulation is on?
|
|
|
|
- fpu emulation isn't unit levelwise because it affects calling convention }
|
|
|
|
- if ((ppufile.header.common.flags and uf_fpu_emulation)<>0) xor
|
|
|
|
- (cs_fp_emulation in current_settings.moduleswitches) then
|
|
|
|
- begin
|
|
|
|
- ppufile.free;
|
|
|
|
- ppufile:=nil;
|
|
|
|
- Message(unit_u_ppu_invalid_fpumode,@queuecomment);
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
|
|
+ { check if floating point emulation is on?
|
|
|
|
+ fpu emulation isn't unit levelwise because it affects calling convention }
|
|
|
|
+ if ((headerflags and uf_fpu_emulation)<>0) <>
|
|
|
|
+ (cs_fp_emulation in current_settings.moduleswitches) then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_fpumode,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
{$endif cpufpemu}
|
|
{$endif cpufpemu}
|
|
|
|
+ result:=true;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ function checkextraheader: boolean;
|
|
|
|
+ begin
|
|
|
|
+ result:=false;
|
|
|
|
+ if ppufile.readentry<>ibextraheader then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_header);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ readextraheader;
|
|
|
|
+ if (longversion<>CurrentPPULongVersion) or
|
|
|
|
+ not ppufile.EndOfEntry then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_header);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+{$ifdef i8086}
|
|
|
|
+ { check i8086 memory model flags }
|
|
|
|
+ if (mf_i8086_far_code in moduleflags) <>
|
|
|
|
+ (current_settings.x86memorymodel in [mm_medium,mm_large,mm_huge]) then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ if (mf_i8086_far_data in moduleflags) <>
|
|
|
|
+ (current_settings.x86memorymodel in [mm_compact,mm_large]) then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ if (mf_i8086_huge_data in moduleflags) <>
|
|
|
|
+ (current_settings.x86memorymodel=mm_huge) then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ if (mf_i8086_cs_equals_ds in moduleflags) <>
|
|
|
|
+ (current_settings.x86memorymodel=mm_tiny) then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ if (mf_i8086_ss_equals_ds in moduleflags) <>
|
|
|
|
+ (current_settings.x86memorymodel in [mm_tiny,mm_small,mm_medium]) then
|
|
|
|
+ begin
|
|
|
|
+ Message(unit_u_ppu_invalid_memory_model,@queuecomment);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+{$endif i8086}
|
|
|
|
+ result:=true;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ begin
|
|
|
|
+ openppu:=false;
|
|
|
|
+ if not checkheader or
|
|
|
|
+ not checkextraheader then
|
|
|
|
+ begin
|
|
|
|
+ ppufile.free;
|
|
|
|
+ ppufile:=nil;
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
|
|
{ Load values to be access easier }
|
|
{ Load values to be access easier }
|
|
- flags:=ppufile.header.common.flags;
|
|
|
|
|
|
+ headerflags:=ppufile.header.common.flags;
|
|
crc:=ppufile.header.checksum;
|
|
crc:=ppufile.header.checksum;
|
|
interface_crc:=ppufile.header.interface_checksum;
|
|
interface_crc:=ppufile.header.interface_checksum;
|
|
indirect_crc:=ppufile.header.indirect_checksum;
|
|
indirect_crc:=ppufile.header.indirect_checksum;
|
|
@@ -344,7 +357,7 @@ var
|
|
Message1(unit_u_ppu_time,filetimestring(ppufiletime))
|
|
Message1(unit_u_ppu_time,filetimestring(ppufiletime))
|
|
else
|
|
else
|
|
Message1(unit_u_ppu_time,'unknown');
|
|
Message1(unit_u_ppu_time,'unknown');
|
|
- Message1(unit_u_ppu_flags,tostr(flags));
|
|
|
|
|
|
+ Message1(unit_u_ppu_flags,tostr(headerflags));
|
|
Message1(unit_u_ppu_crc,hexstr(ppufile.header.checksum,8));
|
|
Message1(unit_u_ppu_crc,hexstr(ppufile.header.checksum,8));
|
|
Message1(unit_u_ppu_crc,hexstr(ppufile.header.interface_checksum,8)+' (intfc)');
|
|
Message1(unit_u_ppu_crc,hexstr(ppufile.header.interface_checksum,8)+' (intfc)');
|
|
Message1(unit_u_ppu_crc,hexstr(ppufile.header.indirect_checksum,8)+' (indc)');
|
|
Message1(unit_u_ppu_crc,hexstr(ppufile.header.indirect_checksum,8)+' (indc)');
|
|
@@ -961,6 +974,38 @@ var
|
|
ppufile.writeentry(ibasmsymbols);
|
|
ppufile.writeentry(ibasmsymbols);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+ procedure tppumodule.writeextraheader;
|
|
|
|
+ var
|
|
|
|
+ old_docrc: boolean;
|
|
|
|
+ begin
|
|
|
|
+ { create unit flags }
|
|
|
|
+ if do_release then
|
|
|
|
+ include(moduleflags,mf_release);
|
|
|
|
+ if assigned(localsymtable) then
|
|
|
|
+ include(moduleflags,mf_local_symtable);
|
|
|
|
+ if cs_checkpointer_called in current_settings.moduleswitches then
|
|
|
|
+ include(moduleflags,mf_checkpointer_called);
|
|
|
|
+{$ifdef i8086}
|
|
|
|
+ if current_settings.x86memorymodel in [mm_medium,mm_large,mm_huge] then
|
|
|
|
+ include(moduleflags,mf_i8086_far_code);
|
|
|
|
+ if current_settings.x86memorymodel in [mm_compact,mm_large] then
|
|
|
|
+ include(moduleflags,mf_i8086_far_data);
|
|
|
|
+ if current_settings.x86memorymodel=mm_huge then
|
|
|
|
+ include(moduleflags,mf_i8086_huge_data);
|
|
|
|
+ if current_settings.x86memorymodel=mm_tiny then
|
|
|
|
+ include(moduleflags,mf_i8086_cs_equals_ds);
|
|
|
|
+ if current_settings.x86memorymodel in [mm_tiny,mm_small,mm_medium] then
|
|
|
|
+ include(moduleflags,mf_i8086_ss_equals_ds);
|
|
|
|
+{$endif i8086}
|
|
|
|
+
|
|
|
|
+ old_docrc:=ppufile.do_crc;
|
|
|
|
+ ppufile.do_crc:=false;
|
|
|
|
+ ppufile.putlongint(longint(CurrentPPULongVersion));
|
|
|
|
+ ppufile.putsmallset(moduleflags);
|
|
|
|
+ ppufile.writeentry(ibextraheader);
|
|
|
|
+ ppufile.do_crc:=old_docrc;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
|
|
{$IFDEF MACRO_DIFF_HINT}
|
|
{$IFDEF MACRO_DIFF_HINT}
|
|
|
|
|
|
@@ -1026,7 +1071,7 @@ var
|
|
source_time : longint;
|
|
source_time : longint;
|
|
hp : tinputfile;
|
|
hp : tinputfile;
|
|
begin
|
|
begin
|
|
- sources_avail:=(flags and uf_release) = 0;
|
|
|
|
|
|
+ sources_avail:=not(mf_release in moduleflags);
|
|
is_main:=true;
|
|
is_main:=true;
|
|
main_dir:='';
|
|
main_dir:='';
|
|
while not ppufile.endofentry do
|
|
while not ppufile.endofentry do
|
|
@@ -1037,7 +1082,7 @@ var
|
|
temp_dir:='';
|
|
temp_dir:='';
|
|
if sources_avail then
|
|
if sources_avail then
|
|
begin
|
|
begin
|
|
- if (flags and uf_in_library)<>0 then
|
|
|
|
|
|
+ if (headerflags and uf_in_library)<>0 then
|
|
begin
|
|
begin
|
|
sources_avail:=false;
|
|
sources_avail:=false;
|
|
temp:=' library';
|
|
temp:=' library';
|
|
@@ -1300,6 +1345,13 @@ var
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
+ procedure tppumodule.readextraheader;
|
|
|
|
+ begin
|
|
|
|
+ longversion:=cardinal(ppufile.getlongint);
|
|
|
|
+ ppufile.getsmallset(moduleflags);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+
|
|
procedure tppumodule.load_interface;
|
|
procedure tppumodule.load_interface;
|
|
var
|
|
var
|
|
b : byte;
|
|
b : byte;
|
|
@@ -1324,6 +1376,10 @@ var
|
|
modulename:=stringdup(upper(newmodulename));
|
|
modulename:=stringdup(upper(newmodulename));
|
|
realmodulename:=stringdup(newmodulename);
|
|
realmodulename:=stringdup(newmodulename);
|
|
end;
|
|
end;
|
|
|
|
+ ibextraheader:
|
|
|
|
+ begin
|
|
|
|
+ readextraheader;
|
|
|
|
+ end;
|
|
ibfeatures :
|
|
ibfeatures :
|
|
begin
|
|
begin
|
|
ppufile.getsmallset(features);
|
|
ppufile.getsmallset(features);
|
|
@@ -1416,27 +1472,9 @@ var
|
|
Message1(unit_u_ppu_write,realmodulename^);
|
|
Message1(unit_u_ppu_write,realmodulename^);
|
|
|
|
|
|
{ create unit flags }
|
|
{ create unit flags }
|
|
- if do_release then
|
|
|
|
- flags:=flags or uf_release;
|
|
|
|
- if assigned(localsymtable) then
|
|
|
|
- flags:=flags or uf_local_symtable;
|
|
|
|
- if (cs_checkpointer_called in current_settings.moduleswitches) then
|
|
|
|
- flags:=flags or uf_checkpointer_called;
|
|
|
|
-{$ifdef i8086}
|
|
|
|
- if current_settings.x86memorymodel in [mm_medium,mm_large,mm_huge] then
|
|
|
|
- flags:=flags or uf_i8086_far_code;
|
|
|
|
- if current_settings.x86memorymodel in [mm_compact,mm_large] then
|
|
|
|
- flags:=flags or uf_i8086_far_data;
|
|
|
|
- if current_settings.x86memorymodel=mm_huge then
|
|
|
|
- flags:=flags or uf_i8086_huge_data;
|
|
|
|
- if current_settings.x86memorymodel=mm_tiny then
|
|
|
|
- flags:=flags or uf_i8086_cs_equals_ds;
|
|
|
|
- if current_settings.x86memorymodel in [mm_tiny,mm_small,mm_medium] then
|
|
|
|
- flags:=flags or uf_i8086_ss_equals_ds;
|
|
|
|
-{$endif i8086}
|
|
|
|
{$ifdef cpufpemu}
|
|
{$ifdef cpufpemu}
|
|
if (cs_fp_emulation in current_settings.moduleswitches) then
|
|
if (cs_fp_emulation in current_settings.moduleswitches) then
|
|
- flags:=flags or uf_fpu_emulation;
|
|
|
|
|
|
+ headerflags:=headerflags or uf_fpu_emulation;
|
|
{$endif cpufpemu}
|
|
{$endif cpufpemu}
|
|
{$ifdef Test_Double_checksum_write}
|
|
{$ifdef Test_Double_checksum_write}
|
|
Assign(CRCFile,s+'.IMP');
|
|
Assign(CRCFile,s+'.IMP');
|
|
@@ -1448,6 +1486,9 @@ var
|
|
if not ppufile.createfile then
|
|
if not ppufile.createfile then
|
|
Message(unit_f_ppu_cannot_write);
|
|
Message(unit_f_ppu_cannot_write);
|
|
|
|
|
|
|
|
+ { extra header (sub version, module flags) }
|
|
|
|
+ writeextraheader;
|
|
|
|
+
|
|
{ first the (JVM) namespace }
|
|
{ first the (JVM) namespace }
|
|
if assigned(namespace) then
|
|
if assigned(namespace) then
|
|
begin
|
|
begin
|
|
@@ -1532,7 +1573,7 @@ var
|
|
tstoredsymtable(globalmacrosymtable).buildderefimpl;
|
|
tstoredsymtable(globalmacrosymtable).buildderefimpl;
|
|
end;
|
|
end;
|
|
|
|
|
|
- if (flags and uf_local_symtable)<>0 then
|
|
|
|
|
|
+ if mf_local_symtable in moduleflags then
|
|
tstoredsymtable(localsymtable).buildderef_registered;
|
|
tstoredsymtable(localsymtable).buildderef_registered;
|
|
buildderefunitimportsyms;
|
|
buildderefunitimportsyms;
|
|
writederefmap;
|
|
writederefmap;
|
|
@@ -1575,7 +1616,7 @@ var
|
|
|
|
|
|
{ write static symtable
|
|
{ write static symtable
|
|
needed for local debugging of unit functions }
|
|
needed for local debugging of unit functions }
|
|
- if (flags and uf_local_symtable)<>0 then
|
|
|
|
|
|
+ if mf_local_symtable in moduleflags then
|
|
tstoredsymtable(localsymtable).ppuwrite(ppufile);
|
|
tstoredsymtable(localsymtable).ppuwrite(ppufile);
|
|
|
|
|
|
{ write whole program optimisation-related information }
|
|
{ write whole program optimisation-related information }
|
|
@@ -1593,7 +1634,7 @@ var
|
|
ppufile.header.common.compiler:=wordversion;
|
|
ppufile.header.common.compiler:=wordversion;
|
|
ppufile.header.common.cpu:=word(target_cpu);
|
|
ppufile.header.common.cpu:=word(target_cpu);
|
|
ppufile.header.common.target:=word(target_info.system);
|
|
ppufile.header.common.target:=word(target_info.system);
|
|
- ppufile.header.common.flags:=flags;
|
|
|
|
|
|
+ ppufile.header.common.flags:=headerflags;
|
|
ppufile.header.deflistsize:=current_module.deflist.count;
|
|
ppufile.header.deflistsize:=current_module.deflist.count;
|
|
ppufile.header.symlistsize:=current_module.symlist.count;
|
|
ppufile.header.symlistsize:=current_module.symlist.count;
|
|
ppufile.writeheader;
|
|
ppufile.writeheader;
|
|
@@ -1636,6 +1677,9 @@ var
|
|
ppufile.putstring(realmodulename^);
|
|
ppufile.putstring(realmodulename^);
|
|
ppufile.writeentry(ibmodulename);
|
|
ppufile.writeentry(ibmodulename);
|
|
|
|
|
|
|
|
+ { extra header (sub version, module flags) }
|
|
|
|
+ writeextraheader;
|
|
|
|
+
|
|
ppufile.putsmallset(moduleoptions);
|
|
ppufile.putsmallset(moduleoptions);
|
|
if mo_has_deprecated_msg in moduleoptions then
|
|
if mo_has_deprecated_msg in moduleoptions then
|
|
ppufile.putstring(deprecatedmsg^);
|
|
ppufile.putstring(deprecatedmsg^);
|
|
@@ -1699,7 +1743,7 @@ var
|
|
ppufile.header.common.compiler:=wordversion;
|
|
ppufile.header.common.compiler:=wordversion;
|
|
ppufile.header.common.cpu:=word(target_cpu);
|
|
ppufile.header.common.cpu:=word(target_cpu);
|
|
ppufile.header.common.target:=word(target_info.system);
|
|
ppufile.header.common.target:=word(target_info.system);
|
|
- ppufile.header.common.flags:=flags;
|
|
|
|
|
|
+ ppufile.header.common.flags:=headerflags;
|
|
ppufile.writeheader;
|
|
ppufile.writeheader;
|
|
|
|
|
|
ppufile.closefile;
|
|
ppufile.closefile;
|
|
@@ -1734,7 +1778,7 @@ var
|
|
if (pu.u.interface_crc<>pu.interface_checksum) or
|
|
if (pu.u.interface_crc<>pu.interface_checksum) or
|
|
(pu.u.indirect_crc<>pu.indirect_checksum) or
|
|
(pu.u.indirect_crc<>pu.indirect_checksum) or
|
|
(
|
|
(
|
|
- ((ppufile.header.common.flags and uf_release)=0) and
|
|
|
|
|
|
+ (not(mf_release in moduleflags)) and
|
|
(pu.u.crc<>pu.checksum)
|
|
(pu.u.crc<>pu.checksum)
|
|
) then
|
|
) then
|
|
begin
|
|
begin
|
|
@@ -1810,7 +1854,7 @@ var
|
|
end;
|
|
end;
|
|
|
|
|
|
{ load implementation symtable }
|
|
{ load implementation symtable }
|
|
- if (flags and uf_local_symtable)<>0 then
|
|
|
|
|
|
+ if mf_local_symtable in moduleflags then
|
|
begin
|
|
begin
|
|
localsymtable:=tstaticsymtable.create(modulename^,moduleid);
|
|
localsymtable:=tstaticsymtable.create(modulename^,moduleid);
|
|
tstaticsymtable(localsymtable).ppuload(ppufile);
|
|
tstaticsymtable(localsymtable).ppuload(ppufile);
|