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
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel