* [U-Boot] powerpc: FOO uses hard float, BAR uses soft float
@ 2011-12-08 22:09 Wolfgang Denk
2011-12-08 22:51 ` Stephen Warren
2011-12-09 14:46 ` Kumar Gala
0 siblings, 2 replies; 8+ messages in thread
From: Wolfgang Denk @ 2011-12-08 22:09 UTC (permalink / raw)
To: u-boot
Hi,
I'm looking for help to get rid of linker warnigns like these:
-> ./MAKEALL sequoia
Configuring for sequoia - Board: sequoia, Options: SEQUOIA
powerpc-linux-ld: Warning: 20010226-1.o uses hard float, libpostpowerpcfpu.o uses soft float
powerpc-linux-ld: Warning: acc1.o uses hard float, libpostpowerpcfpu.o uses soft float
powerpc-linux-ld: Warning: /opt/eldk-5.1/powerpc/sysroots/powerpc-linux/usr/lib/powerpc-linux/4.6.1/libgcc.a(darwin-ldouble.o) uses hard float, u-boot uses soft float
These warnings are cause by the fact that we always build U-Boot with
"-msoft-float", but boards that have POST enabled may pull in the FPU
test code, which naturally will have to be compiled with
"-mhard-float" instead.
Is there any way to silence these warnings (ideally only for these
specific set of files, where we know they are to be expected) ?
I tried playing tricks to get rid of them - the information about
using the FPU is envoded in the ".gnu.attributes" section of the ELF
file:
-> readelf -A /work/wd/tmp-ppc/post/lib_powerpc/fpu/acc1.o
Attribute Section: gnu
File Attributes
Tag_GNU_Power_ABI_FP: Hard float
-> readelf -e /work/wd/tmp-ppc/post/lib_powerpc/fpu/acc1.o | grep gnu.attributes
[129] .gnu.attributes LOOS+ffffff5 00000000 004e5c 000010 00 0 0 1
We can remove this information using brute force, like
${CROSS_COMPILE}objcopy -R .gnu.attributes
which indeed gets rid of most of the warnings - but it will still
result in the
powerpc-linux-ld: Warning: /opt/eldk-5.1/powerpc/sysroots/powerpc-linux/usr/lib/powerpc-linux/4.6.1/libgcc.a(darwin-ldouble.o) uses hard float, u-boot uses soft float
warning.
Anybody any ideas?
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Two wrongs don't make a right, but three rights make a left.
^ permalink raw reply [flat|nested] 8+ messages in thread* [U-Boot] powerpc: FOO uses hard float, BAR uses soft float 2011-12-08 22:09 [U-Boot] powerpc: FOO uses hard float, BAR uses soft float Wolfgang Denk @ 2011-12-08 22:51 ` Stephen Warren 2011-12-09 14:46 ` Kumar Gala 1 sibling, 0 replies; 8+ messages in thread From: Stephen Warren @ 2011-12-08 22:51 UTC (permalink / raw) To: u-boot On 12/08/2011 03:09 PM, Wolfgang Denk wrote: > Hi, > > I'm looking for help to get rid of linker warnigns like these: > > -> ./MAKEALL sequoia > Configuring for sequoia - Board: sequoia, Options: SEQUOIA > powerpc-linux-ld: Warning: 20010226-1.o uses hard float, libpostpowerpcfpu.o uses soft float > powerpc-linux-ld: Warning: acc1.o uses hard float, libpostpowerpcfpu.o uses soft float > powerpc-linux-ld: Warning: /opt/eldk-5.1/powerpc/sysroots/powerpc-linux/usr/lib/powerpc-linux/4.6.1/libgcc.a(darwin-ldouble.o) uses hard float, u-boot uses soft float > > These warnings are cause by the fact that we always build U-Boot with > "-msoft-float", but boards that have POST enabled may pull in the FPU > test code, which naturally will have to be compiled with > "-mhard-float" instead. > > Is there any way to silence these warnings (ideally only for these > specific set of files, where we know they are to be expected) ? I'm not familiar with PPC, but below I describe the situation for ARM; if it's similar, this should be useful... soft and hard float are incompatible ABIs. You can't mix code that's compiled with different ABIs. That's what the linker is complaining about. The solution may be to build U-Boot with -mfloat-abi=hard, but disallow FP usage through some other means (I /think/ there's a separate gcc flag for this). Alternatively, the FPU test code could be built with -mfloat-abi=softfp. That allows FPU usage (especially true if it's via inline assembler etc.!), but has an ABI compatible with -mfloat-abi=soft. I wrote up more background notes on this for our internal wiki: Not all ARM CPUs have a floating-point co-processor (FPU), and hence not all ARM CPUs have the FPU's set of dedicated floating-point (FP) registers. Historically, this has meant that: * The calling convention does not pass FP values in the dedicated FP registers (FPRs), but rather uses the main ARM CPU's regular register set. * Compilers don't emit FP instructions into code, but rather emit calls to utility functions to perform FP operations, such as add or multiply. The implementation of those utility functions may contain hand-coded assembler that uses the FPU, or call an FP emulation library; the choice is up to the system/OS builder based on their knowledge of the actual CPU's capabilities. The above combination yields the FP ABI known as "soft"; gcc option -mfloat-abi=soft. When it is known that code will run on CPU(s) with a real FPU, the compiler may be instructed to emit FP instructions directly into the code. This benefits performance since a function call is no longer needed for each FP operation. However, for backwards-compatibility, when passing FP values between functions, the calling convention is not changed, and hence the values need to be moved back and forth between CPU registers and FPRs. This yields the floating point ABI known as "softfp"; gcc option -mfloat-abi=softfp. Code using either the "soft" or "softfp" "ABIs" is 100% compatible (given a CPU that actually has an FPU); the actual ABI is identical between these two cases, the difference simply being whether FP operations use FPU instructions directly or not. Most recent CPUs do actually contain an FPU. In this case, it is inefficient to constantly move FP values back and forth between CPU register and FPRs. To address this, a new calling convention was created, which uses FPRs to pass FP values between functions. This yields the floating point ABI known as "hard"; gcc option -mfloat-abi=hard. Code using the "hard" ABI is incompatible with code using either the "soft" or "softfp" ABIs. The entire system (C library, all shared libraries, all applications) must be rebuilt using the hard ABI for it to function correctly because FP values are passed in the FP hardware registers in the hard ABI. The user-space <-> kernel-space divide provides a barrier between ABI requirements. The kernel specifies a completely different syscall-based ABI and this is not be affected by whether user-space uses the soft or hard ABI for function calls. This is largely moot as syscalls generally do not pass or return floating point numbers. -- nvpublic ^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] powerpc: FOO uses hard float, BAR uses soft float 2011-12-08 22:09 [U-Boot] powerpc: FOO uses hard float, BAR uses soft float Wolfgang Denk 2011-12-08 22:51 ` Stephen Warren @ 2011-12-09 14:46 ` Kumar Gala 2011-12-09 23:12 ` Wolfgang Denk 1 sibling, 1 reply; 8+ messages in thread From: Kumar Gala @ 2011-12-09 14:46 UTC (permalink / raw) To: u-boot On Dec 8, 2011, at 4:09 PM, Wolfgang Denk wrote: > Hi, > > I'm looking for help to get rid of linker warnigns like these: > > -> ./MAKEALL sequoia > Configuring for sequoia - Board: sequoia, Options: SEQUOIA > powerpc-linux-ld: Warning: 20010226-1.o uses hard float, libpostpowerpcfpu.o uses soft float > powerpc-linux-ld: Warning: acc1.o uses hard float, libpostpowerpcfpu.o uses soft float > powerpc-linux-ld: Warning: /opt/eldk-5.1/powerpc/sysroots/powerpc-linux/usr/lib/powerpc-linux/4.6.1/libgcc.a(darwin-ldouble.o) uses hard float, u-boot uses soft float > > These warnings are cause by the fact that we always build U-Boot with > "-msoft-float", but boards that have POST enabled may pull in the FPU > test code, which naturally will have to be compiled with > "-mhard-float" instead. > > > Is there any way to silence these warnings (ideally only for these > specific set of files, where we know they are to be expected) ? > > > I tried playing tricks to get rid of them - the information about > using the FPU is envoded in the ".gnu.attributes" section of the ELF > file: > > -> readelf -A /work/wd/tmp-ppc/post/lib_powerpc/fpu/acc1.o > Attribute Section: gnu > File Attributes > Tag_GNU_Power_ABI_FP: Hard float > > -> readelf -e /work/wd/tmp-ppc/post/lib_powerpc/fpu/acc1.o | grep gnu.attributes > [129] .gnu.attributes LOOS+ffffff5 00000000 004e5c 000010 00 0 0 1 > > > We can remove this information using brute force, like > > ${CROSS_COMPILE}objcopy -R .gnu.attributes > > which indeed gets rid of most of the warnings - but it will still > result in the > > powerpc-linux-ld: Warning: /opt/eldk-5.1/powerpc/sysroots/powerpc-linux/usr/lib/powerpc-linux/4.6.1/libgcc.a(darwin-ldouble.o) uses hard float, u-boot uses soft float > > warning. > > > Anybody any ideas? > Look at commit, we dealt with this in the past commit ce82ff05388b5ddafdf6082ef0776cce72c40b1c Author: Yuri Tikhonov <yur@emcraft.com> Date: Sat Dec 20 14:54:21 2008 +0300 FPU POST: fix warnings when building with 2.18 binutils Also: commit e009cdeb63308f291c54b173484401aab4a3fe54 Author: Kumar Gala <galak@kernel.crashing.org> Date: Tue Jan 25 03:00:08 2011 -0600 powerpc: Fix FPU post related link warnings - k ^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] powerpc: FOO uses hard float, BAR uses soft float 2011-12-09 14:46 ` Kumar Gala @ 2011-12-09 23:12 ` Wolfgang Denk 2011-12-22 14:29 ` [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float" Wolfgang Denk 0 siblings, 1 reply; 8+ messages in thread From: Wolfgang Denk @ 2011-12-09 23:12 UTC (permalink / raw) To: u-boot Dear Kumar, In message <4421AD7B-D8AA-455E-B67D-328C3E7427BD@kernel.crashing.org> you wrote: > > Look at commit, we dealt with this in the past > > commit ce82ff05388b5ddafdf6082ef0776cce72c40b1c > Author: Yuri Tikhonov <yur@emcraft.com> > Date: Sat Dec 20 14:54:21 2008 +0300 > > FPU POST: fix warnings when building with 2.18 binutils > > Also: > > commit e009cdeb63308f291c54b173484401aab4a3fe54 > Author: Kumar Gala <galak@kernel.crashing.org> > Date: Tue Jan 25 03:00:08 2011 -0600 > > powerpc: Fix FPU post related link warnings Thanks for pointing out. I have to admit that I had completely forgotten about these. Hm, unfortunately this appears to have stopped working. The two objects that are flagged as "Tag_GNU_Power_ABI_FP: Hard float" are post/lib_powerpc/fpu/acc1.o and post/lib_powerpc/fpu/20010226-1.o Both corresponding source files have the GNU_FPOST_ATTR macro... It appears with GCC 4.6.1 the explicit "-mhard-float" command line option takes precedence over the ``asm(".gnu_attribute 4, 2");'' in the source file :-( Is there any way to manually edit the attribute in the object file, using ld or elfedit or ... ? Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de God made machine language; all the rest is the work of man. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float". 2011-12-09 23:12 ` Wolfgang Denk @ 2011-12-22 14:29 ` Wolfgang Denk 2011-12-22 15:55 ` Stefan Roese ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Wolfgang Denk @ 2011-12-22 14:29 UTC (permalink / raw) To: u-boot It appears that with recent versions of GCC the explicit "-mhard-float" command line option takes precedence over the ``asm(".gnu_attribute 4, 2");'' in the source file, so this no longer helps to avoid the warnings we get when linking code that uses FP instructions with other code that was built using soft-float. We can remove the ".gnu_attribute" (which appears to carry no other information, at least so far) from the object files, but we also have to make sure we don't pull in the __gcc_qsub() and __gcc_qmul() functions from the standard libgcc, as these would again "infect" our linking. We copy this code from: gcc-4.2.2/gcc/config/rs6000/darwin-ldouble.c This old version was chosen because it was still available under a compatible license (GCC v2+). The file was stripped down to the needed parts, and reformatted so it passes checkpatch with only one warning (do not add new typedefs). Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Kumar Gala <galak@kernel.crashing.org> Cc: Stefan Roese <sr@denx.de> Cc: Andy Fleming <afleming@gmail.com> Cc: Kim Phillips <kim.phillips@freescale.com> --- This patch silences build warnings for the following boards: aev BC3450 charon, cm5200 fo300 korat korat_perm lwmon5 MiniFAP PMC440 sacsng sequoia sequoia_nand sequoia_ramboot TB5200 TB5200_B TQM5200 TQM5200_B TQM5200_B_HIGHBOOT TQM5200S TQM5200S_HIGHBOOT TQM5200_STK100 post/lib_powerpc/fpu/Makefile | 17 ++++- post/lib_powerpc/fpu/darwin-ldouble.c | 141 +++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 post/lib_powerpc/fpu/darwin-ldouble.c diff --git a/post/lib_powerpc/fpu/Makefile b/post/lib_powerpc/fpu/Makefile index b97ad6f..5d0e52d 100644 --- a/post/lib_powerpc/fpu/Makefile +++ b/post/lib_powerpc/fpu/Makefile @@ -24,10 +24,23 @@ include $(TOPDIR)/config.mk LIB = libpost$(ARCH)fpu.o -COBJS-$(CONFIG_HAS_POST) += fpu.o 20001122-1.o 20010114-2.o 20010226-1.o 980619-1.o -COBJS-$(CONFIG_HAS_POST) += acc1.o compare-fp-1.o mul-subnormal-single-1.o +COBJS-$(CONFIG_HAS_POST) += 20001122-1.o +COBJS-$(CONFIG_HAS_POST) += 20010114-2.o +COBJS-$(CONFIG_HAS_POST) += 20010226-1.o +COBJS-$(CONFIG_HAS_POST) += 980619-1.o +COBJS-$(CONFIG_HAS_POST) += acc1.o +COBJS-$(CONFIG_HAS_POST) += compare-fp-1.o +COBJS-$(CONFIG_HAS_POST) += fpu.o +COBJS-$(CONFIG_HAS_POST) += mul-subnormal-single-1.o + +COBJS-$(CONFIG_HAS_POST) += darwin-ldouble.o include $(TOPDIR)/post/rules.mk CFLAGS := $(shell echo $(CFLAGS) | sed s/-msoft-float//) CFLAGS += -mhard-float -fkeep-inline-functions + +$(obj)%.o: %.c + $(CC) $(ALL_CFLAGS) -o $@.fp $< -c + $(OBJCOPY) -R .gnu.attributes $@.fp $@ + rm -f $@.fp diff --git a/post/lib_powerpc/fpu/darwin-ldouble.c b/post/lib_powerpc/fpu/darwin-ldouble.c new file mode 100644 index 0000000..41ae202 --- /dev/null +++ b/post/lib_powerpc/fpu/darwin-ldouble.c @@ -0,0 +1,141 @@ +/* + * Borrowed from GCC 4.2.2 (which still was GPL v2+) + */ +/* 128-bit long double support routines for Darwin. + Copyright (C) 1993, 2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. */ + +/* + * Implementations of floating-point long double basic arithmetic + * functions called by the IBM C compiler when generating code for + * PowerPC platforms. In particular, the following functions are + * implemented: __gcc_qadd, __gcc_qsub, __gcc_qmul, and __gcc_qdiv. + * Double-double algorithms are based on the paper "Doubled-Precision + * IEEE Standard 754 Floating-Point Arithmetic" by W. Kahan, February 26, + * 1987. An alternative published reference is "Software for + * Doubled-Precision Floating-Point Computations", by Seppo Linnainmaa, + * ACM TOMS vol 7 no 3, September 1981, pages 272-283. + */ + +/* + * Each long double is made up of two IEEE doubles. The value of the + * long double is the sum of the values of the two parts. The most + * significant part is required to be the value of the long double + * rounded to the nearest double, as specified by IEEE. For Inf + * values, the least significant part is required to be one of +0.0 or + * -0.0. No other requirements are made; so, for example, 1.0 may be + * represented as (1.0, +0.0) or (1.0, -0.0), and the low part of a + * NaN is don't-care. + * + * This code currently assumes big-endian. + */ + +#define fabs(x) __builtin_fabs(x) +#define isless(x, y) __builtin_isless(x, y) +#define inf() __builtin_inf() +#define unlikely(x) __builtin_expect((x), 0) +#define nonfinite(a) unlikely(!isless(fabs(a), inf())) + +typedef union { + long double ldval; + double dval[2]; +} longDblUnion; + +/* Add two 'long double' values and return the result. */ +long double __gcc_qadd(double a, double aa, double c, double cc) +{ + longDblUnion x; + double z, q, zz, xh; + + z = a + c; + + if (nonfinite(z)) { + z = cc + aa + c + a; + if (nonfinite(z)) + return z; + x.dval[0] = z; /* Will always be DBL_MAX. */ + zz = aa + cc; + if (fabs(a) > fabs(c)) + x.dval[1] = a - z + c + zz; + else + x.dval[1] = c - z + a + zz; + } else { + q = a - z; + zz = q + c + (a - (q + z)) + aa + cc; + + /* Keep -0 result. */ + if (zz == 0.0) + return z; + + xh = z + zz; + if (nonfinite(xh)) + return xh; + + x.dval[0] = xh; + x.dval[1] = z - xh + zz; + } + return x.ldval; +} + +long double __gcc_qsub(double a, double b, double c, double d) +{ + return __gcc_qadd(a, b, -c, -d); +} + +long double __gcc_qmul(double a, double b, double c, double d) +{ + longDblUnion z; + double t, tau, u, v, w; + + t = a * c; /* Highest order double term. */ + + if (unlikely(t == 0) /* Preserve -0. */ + || nonfinite(t)) + return t; + + /* Sum terms of two highest orders. */ + + /* Use fused multiply-add to get low part of a * c. */ +#ifndef __NO_FPRS__ + asm("fmsub %0,%1,%2,%3" : "=f"(tau) : "f"(a), "f"(c), "f"(t)); +#else + tau = fmsub(a, c, t); +#endif + v = a * d; + w = b * c; + tau += v + w; /* Add in other second-order terms. */ + u = t + tau; + + /* Construct long double result. */ + if (nonfinite(u)) + return u; + z.dval[0] = u; + z.dval[1] = (t - u) + tau; + return z.ldval; +} -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float". 2011-12-22 14:29 ` [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float" Wolfgang Denk @ 2011-12-22 15:55 ` Stefan Roese 2011-12-23 16:17 ` Anatolij Gustschin 2011-12-23 19:04 ` Wolfgang Denk 2 siblings, 0 replies; 8+ messages in thread From: Stefan Roese @ 2011-12-22 15:55 UTC (permalink / raw) To: u-boot Hi Wolfgang, On Thursday 22 December 2011 15:29:41 Wolfgang Denk wrote: > It appears that with recent versions of GCC the explicit > "-mhard-float" command line option takes precedence over the > ``asm(".gnu_attribute 4, 2");'' in the source file, so this no longer > helps to avoid the warnings we get when linking code that uses FP > instructions with other code that was built using soft-float. > > We can remove the ".gnu_attribute" (which appears to carry no other > information, at least so far) from the object files, but we also have > to make sure we don't pull in the __gcc_qsub() and __gcc_qmul() > functions from the standard libgcc, as these would again "infect" our > linking. We copy this code from: > gcc-4.2.2/gcc/config/rs6000/darwin-ldouble.c > This old version was chosen because it was still available under a > compatible license (GCC v2+). The file was stripped down to the > needed parts, and reformatted so it passes checkpatch with only one > warning (do not add new typedefs). > > Signed-off-by: Wolfgang Denk <wd@denx.de> > Cc: Kumar Gala <galak@kernel.crashing.org> > Cc: Stefan Roese <sr@denx.de> > Cc: Andy Fleming <afleming@gmail.com> > Cc: Kim Phillips <kim.phillips@freescale.com> Tested successfully on sequoia, so: Tested-by: Stefan Roese <sr@denx.de> Best regards, Stefan -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de ^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float". 2011-12-22 14:29 ` [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float" Wolfgang Denk 2011-12-22 15:55 ` Stefan Roese @ 2011-12-23 16:17 ` Anatolij Gustschin 2011-12-23 19:04 ` Wolfgang Denk 2 siblings, 0 replies; 8+ messages in thread From: Anatolij Gustschin @ 2011-12-23 16:17 UTC (permalink / raw) To: u-boot Hi Wolfgang, On Thu, 22 Dec 2011 15:29:41 +0100 Wolfgang Denk <wd@denx.de> wrote: > It appears that with recent versions of GCC the explicit > "-mhard-float" command line option takes precedence over the > ``asm(".gnu_attribute 4, 2");'' in the source file, so this no longer > helps to avoid the warnings we get when linking code that uses FP > instructions with other code that was built using soft-float. > > We can remove the ".gnu_attribute" (which appears to carry no other > information, at least so far) from the object files, but we also have > to make sure we don't pull in the __gcc_qsub() and __gcc_qmul() > functions from the standard libgcc, as these would again "infect" our > linking. We copy this code from: > gcc-4.2.2/gcc/config/rs6000/darwin-ldouble.c > This old version was chosen because it was still available under a > compatible license (GCC v2+). The file was stripped down to the > needed parts, and reformatted so it passes checkpatch with only one > warning (do not add new typedefs). > > Signed-off-by: Wolfgang Denk <wd@denx.de> > Cc: Kumar Gala <galak@kernel.crashing.org> > Cc: Stefan Roese <sr@denx.de> > Cc: Andy Fleming <afleming@gmail.com> > Cc: Kim Phillips <kim.phillips@freescale.com> Tested on TQM5200. Tested-by: Anatolij Gustschin <agust@denx.de> Anatolij ^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float". 2011-12-22 14:29 ` [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float" Wolfgang Denk 2011-12-22 15:55 ` Stefan Roese 2011-12-23 16:17 ` Anatolij Gustschin @ 2011-12-23 19:04 ` Wolfgang Denk 2 siblings, 0 replies; 8+ messages in thread From: Wolfgang Denk @ 2011-12-23 19:04 UTC (permalink / raw) To: u-boot Dear Wolfgang Denk, In message <1324564181-8949-1-git-send-email-wd@denx.de> you wrote: > It appears that with recent versions of GCC the explicit > "-mhard-float" command line option takes precedence over the > ``asm(".gnu_attribute 4, 2");'' in the source file, so this no longer > helps to avoid the warnings we get when linking code that uses FP > instructions with other code that was built using soft-float. > > We can remove the ".gnu_attribute" (which appears to carry no other > information, at least so far) from the object files, but we also have > to make sure we don't pull in the __gcc_qsub() and __gcc_qmul() > functions from the standard libgcc, as these would again "infect" our > linking. We copy this code from: > gcc-4.2.2/gcc/config/rs6000/darwin-ldouble.c > This old version was chosen because it was still available under a > compatible license (GCC v2+). The file was stripped down to the > needed parts, and reformatted so it passes checkpatch with only one > warning (do not add new typedefs). > > Signed-off-by: Wolfgang Denk <wd@denx.de> > Cc: Kumar Gala <galak@kernel.crashing.org> > Cc: Stefan Roese <sr@denx.de> > Cc: Andy Fleming <afleming@gmail.com> > Cc: Kim Phillips <kim.phillips@freescale.com> > --- > This patch silences build warnings for the following boards: > aev BC3450 charon, cm5200 fo300 korat korat_perm lwmon5 MiniFAP > PMC440 sacsng sequoia sequoia_nand sequoia_ramboot TB5200 TB5200_B > TQM5200 TQM5200_B TQM5200_B_HIGHBOOT TQM5200S TQM5200S_HIGHBOOT > TQM5200_STK100 > > post/lib_powerpc/fpu/Makefile | 17 ++++- > post/lib_powerpc/fpu/darwin-ldouble.c | 141 +++++++++++++++++++++++++++++++++ > 2 files changed, 156 insertions(+), 2 deletions(-) > create mode 100644 post/lib_powerpc/fpu/darwin-ldouble.c Applied, thanks. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de He who hesitates is not only lost, but miles from the next exit. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-12-23 19:04 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-12-08 22:09 [U-Boot] powerpc: FOO uses hard float, BAR uses soft float Wolfgang Denk 2011-12-08 22:51 ` Stephen Warren 2011-12-09 14:46 ` Kumar Gala 2011-12-09 23:12 ` Wolfgang Denk 2011-12-22 14:29 ` [U-Boot] [PATCH] PPC: fix "Warning: FOO uses hard float, BAR uses soft float" Wolfgang Denk 2011-12-22 15:55 ` Stefan Roese 2011-12-23 16:17 ` Anatolij Gustschin 2011-12-23 19:04 ` Wolfgang Denk
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox