Hi again,

15.12.2018 19:52, Nikolai Zhubr:
15.12.2018 18:24, Florian Klämpfl:
Now, I'm targeting an A20-olinuxino-micro board, which is afaik
armv7a with VPFv4. The board is running either openwrt
or opensuse. (And actually, the binaries produced by the pre-built
native compiler have been tested in both environments
already)

So I suppose I should be using CROSSOPT="-CpARMV7A -CfFPV4_S16" ?

... and -dFPC_ARMHF. It is more important than the others.

So, apparently most close to success for now was:
CROSSOPT="-CpARMV7A -CfvFPV2 -dFPC_ARMHF"

I've got more results.

First, for completeness, here is my actual /proc/cpuinfo:
Processor       : ARMv7 Processor rev 4 (v7l)
processor       : 0
BogoMIPS        : 1434.46
processor       : 1
BogoMIPS        : 1439.63
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt

Currently, I'm trying with CROSSOPT="-CpARMV7A -CfvFPV3 -dFPC_ARMHF"
(FPV4_S16 failed with some assembler complaints, posted earlier, so I then tried vFPV3 and it compiled, so I just stayed with it for now)

Still can not understand this ".o uses VFP instructions, whereas .\pp does not", but because I build binutils myself I've found and disabled the ld error exit on (in_flags & EF_ARM_VFP_FLOAT) != (out_flags & EF_ARM_VFP_FLOAT), and then with such "fixed" binutils crossfpc build completed somehow. I can now produce arm-linux executables, but probably something is wrong anyway because this "VFP float format" is present in .o files but not in final elf executables:

arm-linux-objdump.exe -p t.o
t.o:     file format elf32-littlearm
private flags = 400: [APCS-32] [VFP float format]

arm-linux-objdump.exe -p t
t:     file format elf32-littlearm
Program Header:
......
private flags = 0: [APCS-32] [FPA float format]

(t.pas is a helloworld one-liner.)

Besides, I get tons of warning from ld like this:
C:\FPC\3.0.4\bin\i386-Win32\arm-linux-ld.exe: C:\FPC\3.0.4\units\arm-linux\rtl\system.o: Warning: Arm BLX instruction targets Arm function 'SYSTEM_$$_SYSINITSTDIO'.

It looks like literally every function in every unit produce such a "Arm BLX instruction" warning. Seems suspicious.

And finally, on the target board, the executable totally fails with:

"Illegal instruction"

Any hints?


Thank you!

Regards,
Nikolai

It successfully produced object files, but ld refsuses to link them.
Again, the message is:
pp.o uses VFP instructions, whereas .\pp does not
(lots of these repeated)

I'm guessing is that either some option is missing for ld to actually
accept that VFP is present, or rather I need to rebuild my binutils for
a different (hard fp) target?

(The exact call that fails now is arm-linux-ld.exe -s -L. -o .\pp
.\link.res)


Thank you!

Regards,
Nikolai




_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to