[PATCH] libc: arm: Implement setjmp GCC backwards compatibility.
"Victor L. Do Nascimento" <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
When compiling Newlib for arm targets with GCC 12.1 onward, the passing of architecture extension information to the assembler is automatic, making the use of `.fpu' directives instructions in assembly files redundant. With older versions of GCC, however, the .fpu directive must be hard-coded into the arm/setjmp.S file to allow the assembly of instructions concerning the storage and subsequent reloading of the floating point registers to/from the jump buffer, respectively. This patch conditionally adds the `.fpu vfpxd' directive based on compile-time preprocessor macros concerning GCC version and target architectural features, such that both the assembly and linking of setjmp.S succeeds for older versions of Newlib. --- newlib/libc/machine/arm/setjmp.S | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/newlib/libc/machine/arm/setjmp.S b/newlib/libc/machine/arm/setjmp.S index c615f2428..3a9aa840d 100644 --- a/newlib/libc/machine/arm/setjmp.S +++ b/newlib/libc/machine/arm/setjmp.S @@ -64,6 +64,22 @@ .syntax unified +/* GCC 12.1 and later will tell the assembler exactly which floating + point (or MVE) unit is required and we don't want to override + that. Conversely, older versions of the compiler don't pass this + information so we need to enable the VFP version that is most + appropriate. The choice here should support all suitable VFP + versions that the older toolchains can handle. */ +#if __GNUC__ && __GNUC__ < 12 +/* While GCC > 10.1 supports MVE, the MVE instructions do not need an + .fpu directive, so we don't need to handle that case. VFPxd thus + covers all the cases we need in this file and should be compatible + with all required FPUs that we need to support. */ +# if __ARM_FP + .fpu vfpxd +# endif +#endif + #if __ARM_ARCH_ISA_THUMB == 1 && !__ARM_ARCH_ISA_ARM /* ARMv6-M-like has to be implemented in Thumb mode. */ -- 2.36.1