[PATCH for-11.0 ?] docs: Deprecate Arm OABI and NWFPE support

Peter Maydell posted 1 patch 1 month, 2 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260413103754.45745-1-peter.maydell@linaro.org
Maintainers: Pierrick Bouvier <pierrick.bouvier@linaro.org>
docs/about/deprecated.rst | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
[PATCH for-11.0 ?] docs: Deprecate Arm OABI and NWFPE support
Posted by Peter Maydell 1 month, 2 weeks ago
Linux for 32-bit Arm has had two major ABIs: the original OABI and
the more modern EABI.  OABI support was marked as obsolete in GCC 4.7
and dropped in GCC 4.8.  In the Linux kernel, compatibility handling
for OABI (OABI_COMPAT) is not generally enabled by default and is not
compatible with building a Thumb2 kernel.  Distros dropped OABI
support fifteen years or more ago.

NWFPE floating-point emulation handles the ancient FPA11 coprocessor,
which is only needed/supported with OABI.  Our implementation is old,
untested and not thread-safe.

Mark OABI and NWFPE support as deprecated so we can remove it in a
future release.  Our main motivation here is to be able to drop the
2500+ lines of NWFPE emulation code.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
This just came up today; it's tempting to squeeze the deprecation
notice into 11.0 so we don't have an extra three months before
we can delete it, but we could just deprecate in 11.1 instead.

 docs/about/deprecated.rst | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
index a6d6a71326..10de10dc23 100644
--- a/docs/about/deprecated.rst
+++ b/docs/about/deprecated.rst
@@ -452,6 +452,31 @@ It was implemented as a no-op instruction in TCG up to QEMU 9.0, but
 only with ``-cpu max`` (which does not guarantee migration compatibility
 across versions).
 
+linux-user mode CPUs
+--------------------
+
+OABI and NWFPE support for Arm CPUs
+'''''''''''''''''''''''''''''''''''
+
+Linux for 32-bit Arm has had two major ABIs: the original OABI and the
+more modern EABI. OABI support was marked as obsolete in GCC 4.7 and
+dropped in GCC 4.8 (released in 2013). In the Linux kernel,
+compatibility handling for OABI (OABI_COMPAT) is not generally enabled
+by default and is not compatible with building a Thumb2
+kernel. Distros dropped OABI support fifteen years or more ago.
+
+The original floating-point coprocessor for 32-bit Arm was the
+FPA11. This was not present in many CPUs but did get baked into the
+OABI for how to pass floating point arguments, and so the Linux kernel
+has support for emulating it via the config option FPE_NWFPE; QEMU
+follows that. FPA11 support was also removed from GCC in GCC 4.8.
+
+QEMU's NWFPE code is old and untested and not thread-safe; the OABI
+ABI is long-obsolete. We are therefore deprecating both OABI support
+and NWFPE emulation, and they will be removed in a future QEMU
+release.
+
+
 Backwards compatibility
 -----------------------
 
-- 
2.43.0
Re: [PATCH for-11.0 ?] docs: Deprecate Arm OABI and NWFPE support
Posted by Richard Henderson 1 month, 2 weeks ago
On 4/13/26 20:37, Peter Maydell wrote:
> Linux for 32-bit Arm has had two major ABIs: the original OABI and
> the more modern EABI.  OABI support was marked as obsolete in GCC 4.7
> and dropped in GCC 4.8.  In the Linux kernel, compatibility handling
> for OABI (OABI_COMPAT) is not generally enabled by default and is not
> compatible with building a Thumb2 kernel.  Distros dropped OABI
> support fifteen years or more ago.
> 
> NWFPE floating-point emulation handles the ancient FPA11 coprocessor,
> which is only needed/supported with OABI.  Our implementation is old,
> untested and not thread-safe.
> 
> Mark OABI and NWFPE support as deprecated so we can remove it in a
> future release.  Our main motivation here is to be able to drop the
> 2500+ lines of NWFPE emulation code.
> 
> Signed-off-by: Peter Maydell<peter.maydell@linaro.org>
> ---
> This just came up today; it's tempting to squeeze the deprecation
> notice into 11.0 so we don't have an extra three months before
> we can delete it, but we could just deprecate in 11.1 instead.
> 
>   docs/about/deprecated.rst | 25 +++++++++++++++++++++++++
>   1 file changed, 25 insertions(+)

Thank you.  This is better worded and more complete than what I just posted.  I look 
forward to removing env->eabi as well.  :-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~
Re: [PATCH for-11.0 ?] docs: Deprecate Arm OABI and NWFPE support
Posted by Alex Bennée 1 month, 2 weeks ago
Peter Maydell <peter.maydell@linaro.org> writes:

> Linux for 32-bit Arm has had two major ABIs: the original OABI and
> the more modern EABI.  OABI support was marked as obsolete in GCC 4.7
> and dropped in GCC 4.8.  In the Linux kernel, compatibility handling
> for OABI (OABI_COMPAT) is not generally enabled by default and is not
> compatible with building a Thumb2 kernel.  Distros dropped OABI
> support fifteen years or more ago.
>
> NWFPE floating-point emulation handles the ancient FPA11 coprocessor,
> which is only needed/supported with OABI.  Our implementation is old,
> untested and not thread-safe.
>
> Mark OABI and NWFPE support as deprecated so we can remove it in a
> future release.  Our main motivation here is to be able to drop the
> 2500+ lines of NWFPE emulation code.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

> ---
> This just came up today; it's tempting to squeeze the deprecation
> notice into 11.0 so we don't have an extra three months before
> we can delete it, but we could just deprecate in 11.1 instead.

Seems reasonable to me.

>
>  docs/about/deprecated.rst | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
> index a6d6a71326..10de10dc23 100644
> --- a/docs/about/deprecated.rst
> +++ b/docs/about/deprecated.rst
> @@ -452,6 +452,31 @@ It was implemented as a no-op instruction in TCG up to QEMU 9.0, but
>  only with ``-cpu max`` (which does not guarantee migration compatibility
>  across versions).
>  
> +linux-user mode CPUs
> +--------------------
> +
> +OABI and NWFPE support for Arm CPUs
> +'''''''''''''''''''''''''''''''''''
> +
> +Linux for 32-bit Arm has had two major ABIs: the original OABI and the
> +more modern EABI. OABI support was marked as obsolete in GCC 4.7 and
> +dropped in GCC 4.8 (released in 2013). In the Linux kernel,
> +compatibility handling for OABI (OABI_COMPAT) is not generally enabled
> +by default and is not compatible with building a Thumb2
> +kernel. Distros dropped OABI support fifteen years or more ago.
> +
> +The original floating-point coprocessor for 32-bit Arm was the
> +FPA11. This was not present in many CPUs but did get baked into the
> +OABI for how to pass floating point arguments, and so the Linux kernel
> +has support for emulating it via the config option FPE_NWFPE; QEMU
> +follows that. FPA11 support was also removed from GCC in GCC 4.8.
> +
> +QEMU's NWFPE code is old and untested and not thread-safe; the OABI
> +ABI is long-obsolete. We are therefore deprecating both OABI support
> +and NWFPE emulation, and they will be removed in a future QEMU
> +release.
> +
> +
>  Backwards compatibility
>  -----------------------

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro
Re: [PATCH for-11.0 ?] docs: Deprecate Arm OABI and NWFPE support
Posted by Mohamed Mediouni 1 month, 2 weeks ago

> On 13. Apr 2026, at 12:37, Peter Maydell <peter.maydell@linaro.org> wrote:
> 
> Linux for 32-bit Arm has had two major ABIs: the original OABI and
> the more modern EABI.  OABI support was marked as obsolete in GCC 4.7
> and dropped in GCC 4.8.  In the Linux kernel, compatibility handling
> for OABI (OABI_COMPAT) is not generally enabled by default and is not
> compatible with building a Thumb2 kernel.  Distros dropped OABI
> support fifteen years or more ago.
> 
> NWFPE floating-point emulation handles the ancient FPA11 coprocessor,
> which is only needed/supported with OABI.  Our implementation is old,
> untested and not thread-safe.
> 
> Mark OABI and NWFPE support as deprecated so we can remove it in a
> future release.  Our main motivation here is to be able to drop the
> 2500+ lines of NWFPE emulation code.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Hi,

Especially that this has ISA emulation code inside of linux-user (!)

If this is (unlikely) to continue to exist, it ought to be moved to
common code for system emulation...

Reviewed-by: Mohamed Mediouni <mohamed@unpredictable.fr>
> 
> 
> ---
> This just came up today; it's tempting to squeeze the deprecation
> notice into 11.0 so we don't have an extra three months before
> we can delete it, but we could just deprecate in 11.1 instead.
> 
> docs/about/deprecated.rst | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
> 
> diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
> index a6d6a71326..10de10dc23 100644
> --- a/docs/about/deprecated.rst
> +++ b/docs/about/deprecated.rst
> @@ -452,6 +452,31 @@ It was implemented as a no-op instruction in TCG up to QEMU 9.0, but
> only with ``-cpu max`` (which does not guarantee migration compatibility
> across versions).
> 
> +linux-user mode CPUs
> +--------------------
> +
> +OABI and NWFPE support for Arm CPUs
> +'''''''''''''''''''''''''''''''''''
> +
> +Linux for 32-bit Arm has had two major ABIs: the original OABI and the
> +more modern EABI. OABI support was marked as obsolete in GCC 4.7 and
> +dropped in GCC 4.8 (released in 2013). In the Linux kernel,
> +compatibility handling for OABI (OABI_COMPAT) is not generally enabled
> +by default and is not compatible with building a Thumb2
> +kernel. Distros dropped OABI support fifteen years or more ago.
> +
> +The original floating-point coprocessor for 32-bit Arm was the
> +FPA11. This was not present in many CPUs but did get baked into the
> +OABI for how to pass floating point arguments, and so the Linux kernel
> +has support for emulating it via the config option FPE_NWFPE; QEMU
> +follows that. FPA11 support was also removed from GCC in GCC 4.8.
> +
> +QEMU's NWFPE code is old and untested and not thread-safe; the OABI
> +ABI is long-obsolete. We are therefore deprecating both OABI support
> +and NWFPE emulation, and they will be removed in a future QEMU
> +release.
> +
> +
> Backwards compatibility
> -----------------------
> 
> -- 
> 2.43.0
> 
> 
Re: [PATCH for-11.0 ?] docs: Deprecate Arm OABI and NWFPE support
Posted by Peter Maydell 1 month, 2 weeks ago
On Mon, 13 Apr 2026 at 11:45, Mohamed Mediouni <mohamed@unpredictable.fr> wrote:
> > On 13. Apr 2026, at 12:37, Peter Maydell <peter.maydell@linaro.org> wrote:
> > NWFPE floating-point emulation handles the ancient FPA11 coprocessor,
> > which is only needed/supported with OABI.  Our implementation is old,
> > untested and not thread-safe.

> Especially that this has ISA emulation code inside of linux-user (!)
>
> If this is (unlikely) to continue to exist, it ought to be moved to
> common code for system emulation...

No, because no CPU we emulate has an FPA11. What we're emulating
here is the Linux kernel's emulation support. You can look at it
as a set of syscalls with a very funny ABI and very specific
behaviour :-)

-- PMM