Hei hei,

I'm using nftables and on an armv5te target (microchip at91 sam9x60)
the command `nft list ruleset` crashes with 'illegal instruction'.

BSP is on ptxdist-2024.05.0 with the latest libgmp 6.3 backported from
master.  Toolchain is precompiled
OSELAS.Toolchain-2023.07.1/arm-v5te-linux-gnueabi from
debian.pengutronix.de, so overall nothing special.

`ptxdist prepare libgmp` gives this (somewhere in between):

    using ABI="32"
          CC="arm-v5te-linux-gnueabi-gcc"
          CFLAGS="-O2 -pedantic -fomit-frame-pointer -march=armv4 
-mfloat-abi=softfp"
          CPPFLAGS=""
          MPN_PATH=" arm generic"

After staring at configure.ac and configure I guess they try to be
smart here, but do not detect the actual arch.

Analzing the coredump with cgdb suggests it fails in __gmp_doprnt()
shows this:

      1│ Dump of assembler code for function __gmp_doprnt:
      2│    0xb6d69840 <+0>:     push    {r4, r5, r6, r7, r8, r9, r10, r11, lr}
      3├──> 0xb6d69844 <+4>:     vpush   {d8}
      4│    0xb6d69848 <+8>:     sub     sp, sp, #132    @ 0x84

That instruction seems to be some VFP related ARM floating point thing?

I tried adding this to rules/libgmp.make:

LIBGMP_CONF_ENV     := \
    CFLAGS='-O2 -pedantic -g'

This gives almost the same output of prepare, but with "my" cflags
only, so without -march or -mfloat-abi and then nft does not crash
anymore.

I could use that as a workaround, but it seems to circumvent libgmp
arch detection entirely, and so I'm not sure if that's the correct way
here?

btw, you can see libgmp autoconf is not so super smart, because this is the
output of `ptxdist prepare libgmp` on v7a target:

    using ABI="32"
          CC="arm-v7a-linux-gnueabihf-gcc"
          CFLAGS="-O2 -pedantic -fomit-frame-pointer -march=armv4 
-mfloat-abi=hard"
          CPPFLAGS=""
          MPN_PATH=" arm generic"

So it's still -march=armv4 here.  But is that really necessary with
the cross compiler at all?

Greets
Alex


Reply via email to