Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2017-01

co-processor offset out of range issue in Debian armhf.

3 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

peter green

mricron is failing to build for Debian armhf, specifically we are getting a bunch of "co-processor offset out of range" errors.

Show quoted text 40 lines
(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.

Reply by email

Jeppe Johansen
to peter green
peter green wrote 50 lines
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

Reply by email

Florian Klämpfl
to Jeppe Johansen
Jeppe Johansen wrote 6 lines
> 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.

Should be fixed by r35396.

Reply by email