[fpc-devel] co-processor offset out of range issue in Debian armhf.

Jeppe Johansen jeppe at j-software.dk
Thu Jan 26 18:17:43 CET 2017


On 01/26/2017 04:12 PM, peter green wrote:
>
> mricron is failing to build for Debian armhf, specifically we are 
> getting a bunch of "co-processor offset out of range" errors.
>
>> (9009) Assembling parconvert
>> parconvert.s: Assembler messages:
>> parconvert.s:3775: Error: co-processor offset out of range
>> parconvert.s:3783: Error: co-processor offset out of range
>> parconvert.s:3880: Error: co-processor offset out of range
>> parconvert.s:3886: Error: co-processor offset out of range
>> parconvert.s:3892: Error: co-processor offset out of range
>> parconvert.s:3895: Error: co-processor offset out of range
>> parconvert.s:3899: Error: co-processor offset out of range
>> parconvert.s:3903: Error: co-processor offset out of range
>> parconvert.s:3918: Error: co-processor offset out of range
>> parconvert.s:3924: Error: co-processor offset out of range
>> parconvert.s:3930: Error: co-processor offset out of range
>> parconvert.s:4813: Error: co-processor offset out of range
>> parconvert.s:4817: Error: co-processor offset out of range
>> parconvert.s:4821: Error: co-processor offset out of range
>> parconvert.s:4825: Error: co-processor offset out of range
>> parconvert.s:4895: Error: co-processor offset out of range
>> parconvert.s:4899: Error: co-processor offset out of range
>> parconvert.pas(1375) Error: (9007) Error while assembling exitcode 1
>> parconvert.pas(1375) Fatal: (10026) There were 2 errors compiling
>> module, stopping
>> Fatal: (1018) Compilation aborted
>>
>> The first error corresponds to the vstr instruction on line 3775 below:
>>
>> # [593] lScanResX :=  round(readParFloat);
>>      mov    r0,r11
>>      blx    PARCONVERT$_$READ_PAR2NII$crcDDE5A164_$$_READPARFLOAT$$DOUBLE
>>      blx    fpc_round_real
>>      blx    fpc_int64_to_double
>>      vmov.f64    d1,d0
>>      sub    r0,r11,#143360
>>      vstr    d1,[r0, #-2528]
>>
>> Which in turn, corresponds to line 593 of parconvert.pas:
>>
>>        if lUpCaseStr = 'SCANRESOLUTION(XY)' then begin
>>           lScanResX :=  round(readParFloat);
>>           lScanResY :=  round(readParFloat);
> More detail at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=851834
>
> Any thoughts on what might cause this or possible fixes? my guess is 
> that the compiler is missing an offset range check for access to local 
> variables.
>
I'm fairly certain this is from spilling code as the only other case has 
bounds checks.
The code in question also has a huge number of local variables, so that 
supports this case.

Not sure if it can be fixed, except by minimizing the local variables.. 
It already contained this mention: const kMaxnSLices = 18000;//delphi 
32000 - lazarus fails >15000

Best Regards,
Jeppe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20170126/697af9ce/attachment.html>


More information about the fpc-devel mailing list