* [Buildroot] [PATCH] arch/or1k: fix uClibc issues with fenv enabled @ 2026-08-19 22:15 Waldemar Brodkorb 2026-08-29 11:39 ` Thomas Petazzoni via buildroot 0 siblings, 1 reply; 5+ messages in thread From: Waldemar Brodkorb @ 2026-08-19 22:15 UTC (permalink / raw) To: buildroot OpenRISC architecture can be either soft-float or hard-float, so add the ability to the user to configure it. GNU libc has hard-float support since 03 May 2024, see here: https://sourceware.org/pipermail/glibc-cvs/2024q2/085211.html There fenv functions f.e. were added to glibc. uClibc-ng has added fenv functions in commit 8a77b4785acd143d76ccc08142abb39c0100de3d on 27 April 2025. musl does not have any or1k architecture specific fenv support. Tested with all 6 combinations of C libraries and float configurations. For uClibc-ng fenv support was enabled by commit 4c5039b80ebbe42db35af189afcff7fb7d5cace6 in Buildroot for any hard-float toolchain, so we now need to pass -mhard-float to gcc compiler to get the predefined preprocessor macro __or1k_hard_float__, which exposes _FPU_FPCSR_RM_MASK. Fixes: - https://autobuild.buildroot.org/results/a60737adf3fdd26e8d0ae3310bef5c48716889dc Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> --- arch/Config.in.or1k | 9 +++++++++ package/Makefile.in | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/arch/Config.in.or1k b/arch/Config.in.or1k index f42aef9eef..e626907496 100644 --- a/arch/Config.in.or1k +++ b/arch/Config.in.or1k @@ -1,3 +1,12 @@ +config BR2_OR1K_SOFT_FLOAT + bool "Use soft-float" + select BR2_SOFT_FLOAT + help + If your target CPU does not have a Floating Point Unit (FPU) + or a kernel FPU emulator, but you still wish to support + floating point functions, then everything will need to be + compiled with soft floating point support (-msoft-float). + config BR2_ARCH default "or1k" diff --git a/package/Makefile.in b/package/Makefile.in index eac28b3a96..69859e8ce4 100644 --- a/package/Makefile.in +++ b/package/Makefile.in @@ -106,6 +106,14 @@ TARGET_ABI += -mabi=spe -mfloat-gprs=double -Wa,-me500mc endif endif +# use hard-float option globally for OpenRISC, when not +# soft-float choosen by the user. +ifeq ($(BR2_or1k),y) +ifneq ($(BR2_OR1K_SOFT_FLOAT),y) +TARGET_ABI += -mhard-float +endif +endif + # Use longcalls option for Xtensa globally. # The 'longcalls' option allows calls across a greater range of addresses, # and is required for some packages. While this option can degrade both -- 2.47.3 _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH] arch/or1k: fix uClibc issues with fenv enabled 2026-08-19 22:15 [Buildroot] [PATCH] arch/or1k: fix uClibc issues with fenv enabled Waldemar Brodkorb @ 2026-08-29 11:39 ` Thomas Petazzoni via buildroot 2026-08-29 11:42 ` Thomas Petazzoni via buildroot 2026-08-30 17:22 ` Waldemar Brodkorb 0 siblings, 2 replies; 5+ messages in thread From: Thomas Petazzoni via buildroot @ 2026-08-29 11:39 UTC (permalink / raw) To: Waldemar Brodkorb; +Cc: buildroot Hello Waldemar, On Thu, Aug 20, 2026 at 12:15:58AM +0200, Waldemar Brodkorb wrote: > OpenRISC architecture can be either soft-float or hard-float, so add the > ability to the user to configure it. > > GNU libc has hard-float support since 03 May 2024, see here: > https://sourceware.org/pipermail/glibc-cvs/2024q2/085211.html > There fenv functions f.e. were added to glibc. > > uClibc-ng has added fenv functions in commit 8a77b4785acd143d76ccc08142abb39c0100de3d > on 27 April 2025. > > musl does not have any or1k architecture specific fenv support. > > Tested with all 6 combinations of C libraries and float configurations. Are you sure? I don't see how your patch solves the soft-float configuration. > diff --git a/arch/Config.in.or1k b/arch/Config.in.or1k > index f42aef9eef..e626907496 100644 > --- a/arch/Config.in.or1k > +++ b/arch/Config.in.or1k > @@ -1,3 +1,12 @@ > +config BR2_OR1K_SOFT_FLOAT > + bool "Use soft-float" > + select BR2_SOFT_FLOAT This should be "default y", to preserve existing behavior. > + help > + If your target CPU does not have a Floating Point Unit (FPU) > + or a kernel FPU emulator, but you still wish to support > + floating point functions, then everything will need to be > + compiled with soft floating point support (-msoft-float). > + > config BR2_ARCH > default "or1k" > > diff --git a/package/Makefile.in b/package/Makefile.in > index eac28b3a96..69859e8ce4 100644 > --- a/package/Makefile.in > +++ b/package/Makefile.in > @@ -106,6 +106,14 @@ TARGET_ABI += -mabi=spe -mfloat-gprs=double -Wa,-me500mc > endif > endif > > +# use hard-float option globally for OpenRISC, when not > +# soft-float choosen by the user. > +ifeq ($(BR2_or1k),y) > +ifneq ($(BR2_OR1K_SOFT_FLOAT),y) > +TARGET_ABI += -mhard-float > +endif > +endif This needs somehow to go in the toolchain wrapper, so instead of your change, you would need something like this: diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk index 180e90856d..16c9e08ba5 100644 --- a/package/gcc/gcc.mk +++ b/package/gcc/gcc.mk @@ -212,6 +212,10 @@ ifeq ($(BR2_SOFT_FLOAT),y) ifeq ($(BR2_arm)$(BR2_armeb)$(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el)$(BR2_powerpc)$(BR2_sparc),y) HOST_GCC_COMMON_CONF_OPTS += --with-float=soft endif +else +ifeq ($(BR2_or1k),y) +HOST_GCC_COMMON_CONF_OPTS += --with-float=hard +endif endif # Determine arch/tune/abi/cpu options diff --git a/toolchain/toolchain-external/pkg-toolchain-external.mk b/toolchain/toolchain-external/pkg-toolchain-external.mk index 270cf814ed..a9593a4a69 100644 --- a/toolchain/toolchain-external/pkg-toolchain-external.mk +++ b/toolchain/toolchain-external/pkg-toolchain-external.mk @@ -243,6 +243,9 @@ TOOLCHAIN_EXTERNAL_CFLAGS += $(call qstrip,$(BR2_TARGET_OPTIMIZATION)) ifeq ($(BR2_SOFT_FLOAT),y) TOOLCHAIN_EXTERNAL_CFLAGS += -msoft-float TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_SOFTFLOAT=1 +else ifeq ($(BR2_or1k),y) +TOOLCHAIN_EXTERNAL_CFLAGS += -mhard-float +TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_HARDFLOAT=1 endif TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += \ diff --git a/toolchain/toolchain-wrapper.c b/toolchain/toolchain-wrapper.c index 5b306190bb..7dba652e28 100644 --- a/toolchain/toolchain-wrapper.c +++ b/toolchain/toolchain-wrapper.c @@ -61,6 +61,9 @@ static char *predef_args[] = { #ifdef BR_SOFTFLOAT "-msoft-float", #endif /* BR_SOFTFLOAT */ +#ifdef BR_HARDFLOAT + "-mhard-float", +#endif /* BR_HARDFLOAT */ #ifdef BR_SIMD "-msimd=" BR_SIMD, #endif But more importantly, I don't see how your patch fixes the soft float situation. My understanding is that soft-float is the default on OR1K. Your patch doesn't change *anything* in soft-float configuration, it only passes -mhard-float in hard float configurations, and makes hard float the default. How can your patch fix anything with BR2_OR1K_SOFT_FLOAT enabled? Thomas -- Thomas Petazzoni, co-owner and CEO, Bootlin Embedded Linux and Kernel engineering and training https://bootlin.com _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH] arch/or1k: fix uClibc issues with fenv enabled 2026-08-29 11:39 ` Thomas Petazzoni via buildroot @ 2026-08-29 11:42 ` Thomas Petazzoni via buildroot 2026-08-30 17:28 ` Waldemar Brodkorb 2026-08-30 17:22 ` Waldemar Brodkorb 1 sibling, 1 reply; 5+ messages in thread From: Thomas Petazzoni via buildroot @ 2026-08-29 11:42 UTC (permalink / raw) To: Waldemar Brodkorb; +Cc: buildroot Hello, On Sat, Aug 29, 2026 at 01:39:26PM +0200, Thomas Petazzoni wrote: > But more importantly, I don't see how your patch fixes the soft float > situation. My understanding is that soft-float is the default on > OR1K. Your patch doesn't change *anything* in soft-float > configuration, it only passes -mhard-float in hard float > configurations, and makes hard float the default. > > How can your patch fix anything with BR2_OR1K_SOFT_FLOAT enabled? Sorry for my mistake, but re-reading, I know understand: BR2_OR1K_SOFT_FLOAT selects BR2_SOFT_FLOAT, and based on that uClibc uses or doesn't use hard-float fenv stuff. That makes sense. Still the patch seems incorrect to me, and should modify gcc.mk and the toolchain external stuff instead. Thomas -- Thomas Petazzoni, co-owner and CEO, Bootlin Embedded Linux and Kernel engineering and training https://bootlin.com _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH] arch/or1k: fix uClibc issues with fenv enabled 2026-08-29 11:42 ` Thomas Petazzoni via buildroot @ 2026-08-30 17:28 ` Waldemar Brodkorb 0 siblings, 0 replies; 5+ messages in thread From: Waldemar Brodkorb @ 2026-08-30 17:28 UTC (permalink / raw) To: Thomas Petazzoni; +Cc: buildroot Hi Thomas, Thomas Petazzoni wrote, > Hello, > > On Sat, Aug 29, 2026 at 01:39:26PM +0200, Thomas Petazzoni wrote: > > > But more importantly, I don't see how your patch fixes the soft float > > situation. My understanding is that soft-float is the default on > > OR1K. Your patch doesn't change *anything* in soft-float > > configuration, it only passes -mhard-float in hard float > > configurations, and makes hard float the default. > > > > How can your patch fix anything with BR2_OR1K_SOFT_FLOAT enabled? > > Sorry for my mistake, but re-reading, I know understand: > BR2_OR1K_SOFT_FLOAT selects BR2_SOFT_FLOAT, and based on that uClibc > uses or doesn't use hard-float fenv stuff. That makes sense. > > Still the patch seems incorrect to me, and should modify gcc.mk and > the toolchain external stuff instead. As I stated in my other mail --with-float is not available for gcc on or1k. How should I proceed? How does the toolchain-wrapper recognizes the user wants a hard-float toolchain? For the external toolchains I understand it, but not for the internal BR toolchains. best regards Waldemar _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH] arch/or1k: fix uClibc issues with fenv enabled 2026-08-29 11:39 ` Thomas Petazzoni via buildroot 2026-08-29 11:42 ` Thomas Petazzoni via buildroot @ 2026-08-30 17:22 ` Waldemar Brodkorb 1 sibling, 0 replies; 5+ messages in thread From: Waldemar Brodkorb @ 2026-08-30 17:22 UTC (permalink / raw) To: Thomas Petazzoni; +Cc: buildroot Hello Thomas, Thomas Petazzoni wrote, > Hello Waldemar, > > On Thu, Aug 20, 2026 at 12:15:58AM +0200, Waldemar Brodkorb wrote: > > OpenRISC architecture can be either soft-float or hard-float, so add the > > ability to the user to configure it. > > > > GNU libc has hard-float support since 03 May 2024, see here: > > https://sourceware.org/pipermail/glibc-cvs/2024q2/085211.html > > There fenv functions f.e. were added to glibc. > > > > uClibc-ng has added fenv functions in commit 8a77b4785acd143d76ccc08142abb39c0100de3d > > on 27 April 2025. > > > > musl does not have any or1k architecture specific fenv support. > > > > Tested with all 6 combinations of C libraries and float configurations. > > Are you sure? I don't see how your patch solves the soft-float > configuration. > > > diff --git a/arch/Config.in.or1k b/arch/Config.in.or1k > > index f42aef9eef..e626907496 100644 > > --- a/arch/Config.in.or1k > > +++ b/arch/Config.in.or1k > > @@ -1,3 +1,12 @@ > > +config BR2_OR1K_SOFT_FLOAT > > + bool "Use soft-float" > > + select BR2_SOFT_FLOAT > > This should be "default y", to preserve existing behavior. > > > + help > > + If your target CPU does not have a Floating Point Unit (FPU) > > + or a kernel FPU emulator, but you still wish to support > > + floating point functions, then everything will need to be > > + compiled with soft floating point support (-msoft-float). > > + > > config BR2_ARCH > > default "or1k" > > > > diff --git a/package/Makefile.in b/package/Makefile.in > > index eac28b3a96..69859e8ce4 100644 > > --- a/package/Makefile.in > > +++ b/package/Makefile.in > > @@ -106,6 +106,14 @@ TARGET_ABI += -mabi=spe -mfloat-gprs=double -Wa,-me500mc > > endif > > endif > > > > +# use hard-float option globally for OpenRISC, when not > > +# soft-float choosen by the user. > > +ifeq ($(BR2_or1k),y) > > +ifneq ($(BR2_OR1K_SOFT_FLOAT),y) > > +TARGET_ABI += -mhard-float > > +endif > > +endif > > This needs somehow to go in the toolchain wrapper, so instead of your > change, you would need something like this: > > diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk > index 180e90856d..16c9e08ba5 100644 > --- a/package/gcc/gcc.mk > +++ b/package/gcc/gcc.mk > @@ -212,6 +212,10 @@ ifeq ($(BR2_SOFT_FLOAT),y) > ifeq ($(BR2_arm)$(BR2_armeb)$(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el)$(BR2_powerpc)$(BR2_sparc),y) > HOST_GCC_COMMON_CONF_OPTS += --with-float=soft > endif > +else > +ifeq ($(BR2_or1k),y) > +HOST_GCC_COMMON_CONF_OPTS += --with-float=hard > +endif > endif The or1k gcc configuration has no --with-float. Only passing -mhard-float as CFLAGS is possible. best regards Waldemar _______________________________________________ buildroot mailing list buildroot@buildroot.org https://lists.buildroot.org/mailman/listinfo/buildroot ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-08-30 17:28 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-19 22:15 [Buildroot] [PATCH] arch/or1k: fix uClibc issues with fenv enabled Waldemar Brodkorb 2026-08-29 11:39 ` Thomas Petazzoni via buildroot 2026-08-29 11:42 ` Thomas Petazzoni via buildroot 2026-08-30 17:28 ` Waldemar Brodkorb 2026-08-30 17:22 ` Waldemar Brodkorb
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox