[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [fpc-devel] Re: freepascal support for debian armhf




On 06 Sep 2011, at 14:00, Wookey wrote:

section 5 tells you about the calling conventions, and section 6 about
the normal variants (note the bit about it applying only to
non-variadic functions - does pascal support variadic functions?)


It does, in two ways:
a) calling variadic functions implemented in C (-> uses the variadic calling convention from the ABI) b) it's own variant, which uses a non-variadic calling convention from the ABI (the variadic part there is implemented via an array that is constructed on the caller side)

2) The extra functionality available: a VFP unit with 31 single
precision or 16 double precision registers. Note that newer hardware
will have twice as many registers, but that doesn't affect the
calling convention. In debian armhf (and Ubuntu armhf, and hopefully
everyone else shipping arm binary distros) we've picked the VFP3d16
hardware variant as a baseline to build for. Obviously it is useful to
people who build their own code if the compiler supports the d32
hardware variants too, but that won't be used in distro-built binaries.

We already support both (with the softfp calling convention).

3) Some other things change that might catch you out:
a) Thumb interworking needs to be supported, which has requirements on state
between function calls (any function can be thumb or not-thumb).

If that only means that you have to use b(l)x everywhere, we already support that (only in svn trunk though).

b) The SWP instruction is gone. It may fault, it may get fixed up by
the kernel (slowly), but it shouldn't be used anymore (it's not
compatible with mutli-core designs, Load/store exclusive should be
used instead).


swp is currently replaced with ldrex/strex in the run time library in you target ARMv6 or above.

Hopefully that's helpful to anyone looking at this.

Thanks, and nice to see you again in a completely different setting :)


Jonas


Reply to: