mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 10:09:20 +02:00
+ started implementing TOmfObjInput.ReadObjData - we go through the expected
records and read them (without parsing them yet) and verify their checksums git-svn-id: trunk@30965 -
This commit is contained in:
parent
9216e561e2
commit
be57d4900d
@ -120,8 +120,13 @@ interface
|
|||||||
{ TOmfObjInput }
|
{ TOmfObjInput }
|
||||||
|
|
||||||
TOmfObjInput = class(TObjInput)
|
TOmfObjInput = class(TObjInput)
|
||||||
|
private
|
||||||
|
FRawRecord: TOmfRawRecord;
|
||||||
|
public
|
||||||
constructor create;override;
|
constructor create;override;
|
||||||
|
destructor destroy;override;
|
||||||
class function CanReadObjData(AReader:TObjectreader):boolean;override;
|
class function CanReadObjData(AReader:TObjectreader):boolean;override;
|
||||||
|
function ReadObjData(AReader:TObjectreader;out objdata:TObjData):boolean;override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TMZExeOutput }
|
{ TMZExeOutput }
|
||||||
@ -889,6 +894,13 @@ implementation
|
|||||||
begin
|
begin
|
||||||
inherited create;
|
inherited create;
|
||||||
cobjdata:=TOmfObjData;
|
cobjdata:=TOmfObjData;
|
||||||
|
FRawRecord:=TOmfRawRecord.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TOmfObjInput.destroy;
|
||||||
|
begin
|
||||||
|
FRawRecord.Free;
|
||||||
|
inherited destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TOmfObjInput.CanReadObjData(AReader: TObjectreader): boolean;
|
class function TOmfObjInput.CanReadObjData(AReader: TObjectreader): boolean;
|
||||||
@ -905,6 +917,76 @@ implementation
|
|||||||
AReader.Seek(0);
|
AReader.Seek(0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TOmfObjInput.ReadObjData(AReader: TObjectreader; out objdata: TObjData): boolean;
|
||||||
|
begin
|
||||||
|
FReader:=AReader;
|
||||||
|
InputFileName:=AReader.FileName;
|
||||||
|
objdata:=CObjData.Create(InputFileName);
|
||||||
|
result:=false;
|
||||||
|
FRawRecord.ReadFrom(FReader);
|
||||||
|
if not FRawRecord.VerifyChecksumByte then
|
||||||
|
begin
|
||||||
|
InputError('Invalid checksum in OMF record');
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if FRawRecord.RecordType<>RT_THEADR then
|
||||||
|
begin
|
||||||
|
InputError('Can''t read OMF header');
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
repeat
|
||||||
|
FRawRecord.ReadFrom(FReader);
|
||||||
|
if not FRawRecord.VerifyChecksumByte then
|
||||||
|
begin
|
||||||
|
InputError('Invalid checksum in OMF record');
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
case FRawRecord.RecordType of
|
||||||
|
RT_LNAMES:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_SEGDEF,RT_SEGDEF32:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_GRPDEF:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_COMENT:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_EXTDEF:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_PUBDEF,RT_PUBDEF32:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_LEDATA,RT_LEDATA32:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_FIXUPP,RT_FIXUPP32:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
RT_MODEND,RT_MODEND32:
|
||||||
|
begin
|
||||||
|
{todo}
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
InputError('Unsupported OMF record type $'+HexStr(FRawRecord.RecordType,2));
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
until FRawRecord.RecordType in [RT_MODEND,RT_MODEND32];
|
||||||
|
end;
|
||||||
|
|
||||||
{****************************************************************************
|
{****************************************************************************
|
||||||
TMZExeOutput
|
TMZExeOutput
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
|
Loading…
Reference in New Issue
Block a user