docs/about/deprecated.rst | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
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
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~
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
> 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 > >
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
© 2016 - 2026 Red Hat, Inc.