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

Reply via email to