mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-10 18:25:58 +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 = class(TObjInput)
|
||||
private
|
||||
FRawRecord: TOmfRawRecord;
|
||||
public
|
||||
constructor create;override;
|
||||
destructor destroy;override;
|
||||
class function CanReadObjData(AReader:TObjectreader):boolean;override;
|
||||
function ReadObjData(AReader:TObjectreader;out objdata:TObjData):boolean;override;
|
||||
end;
|
||||
|
||||
{ TMZExeOutput }
|
||||
@ -889,6 +894,13 @@ implementation
|
||||
begin
|
||||
inherited create;
|
||||
cobjdata:=TOmfObjData;
|
||||
FRawRecord:=TOmfRawRecord.Create;
|
||||
end;
|
||||
|
||||
destructor TOmfObjInput.destroy;
|
||||
begin
|
||||
FRawRecord.Free;
|
||||
inherited destroy;
|
||||
end;
|
||||
|
||||
class function TOmfObjInput.CanReadObjData(AReader: TObjectreader): boolean;
|
||||
@ -905,6 +917,76 @@ implementation
|
||||
AReader.Seek(0);
|
||||
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
|
||||
****************************************************************************}
|
||||
|
Loading…
Reference in New Issue
Block a user