[fpc-devel] Building cross-compiler for arm-linux on win32

Nikolai Zhubr n-a-zhubr at yandex.ru
Sun Dec 16 00:13:00 CET 2018


Hi,

Is there any easy way to see how exactly ppcrossarm.exe invokes 
assembler (command-line arguments passed) during a cross-compiler build 
and also to inspect intermediate .s files?

Thing is, object files compiled from pascal (like system.o) still get 
this suspicious VFP flag even after I started using CROSSOPT="-CpARMV6 
-Cfsoft". However, object files compiled from assembler sources (like 
prt0.o) does not. I'm trying to find where it comes from.

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

arm-linux-objdump.exe -p system.o
system.o:     file format elf32-littlearm
private flags = 600: [APCS-32] [VFP float format] [software FP]

As a side note, I suddenly realised that I don't need any specially 
crafted version of binutils as long as I target linux and build binutils 
from source. Standard binutils source tar compiles with almost zero 
effort on modern mingw, at least for linux target.


Thank you!

Regards,
Nikolai


15.12.2018 23:23, I wrote:
> 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 at lists.freepascal.org
>>> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>>
>> _______________________________________________
>> fpc-devel maillist - fpc-devel at lists.freepascal.org
>> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel




More information about the fpc-devel mailing list