On Mon, Aug 22, 2022 at 3:08 AM Thorsten Glaser <t...@debian.org> wrote:
>
> outlook 1017537 some armel buildds are misconfigured and lack SWP emulation
> thanks
>
> Dixi quod…
>
> ># if __ARM_ARCH__ < 6
> >       swp     r0, r1, [r2]
> ># else
>
> And this, after some research, is it. This is needed for armel, which
> is v5. Apparently, Linux has SWP emulation for v7/v8 hosts, but at least
> one buildd listed does not have this enabled, breaking the armel ABI.
>
> Please ensure that only hosts with working SWP emulation run armel.
>
> (Can I reassign this bugreport to the buildd? Does it have a virtual
> package in debbugs?)

For reference, the instruction is not avaialable on Armv7 but is emulated
on 32-bit kernels whenever CONFIG_SWP_EMULATE is enabled,
this is defined as:

config SWP_EMULATE
            bool "Emulate SWP/SWPB instructions" if !SMP
            depends on CPU_V7
            default y if SMP
            select HAVE_PROC_CPU if PROC_FS

so this is enabled on all SMP-enabled kernels but can be disabled
on uniprocessor Armv7 builds, which would be broken here.

On 64-bit kernels, the same option is not enabled by default
in mainline kernels, so the kernel config needs to contain
CONFIG_COMPAT=y, ARMV8_DEPRECATED=y, and
CONFIG_SWP_EMULATION=y. This also has to be enabled
at runtime using the "abi.swp=1" sysctl, see
https://www.kernel.org/doc/Documentation/arm64/legacy_instructions.rst

Most likely, the buildd is running a default debian kernel and has
the compile-time options enabled, but has it disabled at runtime.

Can you find out if /proc/sys/abi/swp exists on the system, and
what its contents are? If it does not exist, fixing this requires
a change to the kernel configuration, if it exists but contains
'0', then running binaries with the swp instruction just requires
changing the local sysctl.conf for any armel buildd.

Reply via email to