diff options
author | Yuri Tikhonov <yur@emcraft.com> | 2008-12-20 14:54:21 +0300 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2009-01-24 01:49:41 +0100 |
commit | ce82ff05388b5ddafdf6082ef0776cce72c40b1c (patch) | |
tree | 4b439669c03f0bd5862e293dcc0e0311bf9f5ee4 /post | |
parent | a7c9310457e85b4598abe5b304108edf11332e2f (diff) | |
download | u-boot-ce82ff05388b5ddafdf6082ef0776cce72c40b1c.tar.gz u-boot-ce82ff05388b5ddafdf6082ef0776cce72c40b1c.tar.bz2 u-boot-ce82ff05388b5ddafdf6082ef0776cce72c40b1c.zip |
FPU POST: fix warnings when building with 2.18 binutils
When compile u-boot with the 2.18 binutils the following
warning messages for each object file in post/lib_ppc/fpu/ is
produced at the linking stage:
post/libpost.a(acc1.o) uses hard float, u-boot uses soft-float
...
This is because of the fact that, in general, the soft-float and
hard-float ABIs are incompatible; the 2.18 binutils do checking
of the Tag_GNU_Power_ABI_FP attribute of the files to be linked, and
produce the worning like above if these are not compatible.
The incompatibility of ABIs is concerned only the float values:
e.g. the soft-float ABI assumes the float argument passing in the
pair of rX registers, and the hard-float ABI assumes passing of
the float argument in the fX register. When we don't pass the float
arguments between the functions compiled with different floatness,
then such an application will work correctly.
This is the case for the FPU POST: u-boot (compiled with soft-float)
doesn't pass to (and doesn't get from) the FPU POST functions any
floats; there are no functions exported from the post/lib_ppc/fpu/
objects which would work with float parameters/returns too. So, we
can reassure the linker not to worry about the difference in ABI
attributes of linking files just by setting the 'soft-float'
attribute for the objects in post/lib_ppc/fpu. And this patch does
this.
Also, to avoid passing both soft- and hard-float options in CFLAGS
when compiling the files from post/lib_ppc/fpu (which is OK, but
looks rather dirty) this patch removes the soft-float string from
CFLAGS in post/lib_ppc/fpu/Makefile.
Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
Diffstat (limited to 'post')
-rw-r--r-- | post/lib_ppc/fpu/20001122-1.c | 2 | ||||
-rw-r--r-- | post/lib_ppc/fpu/20010114-2.c | 2 | ||||
-rw-r--r-- | post/lib_ppc/fpu/20010226-1.c | 2 | ||||
-rw-r--r-- | post/lib_ppc/fpu/980619-1.c | 2 | ||||
-rw-r--r-- | post/lib_ppc/fpu/Makefile | 1 | ||||
-rw-r--r-- | post/lib_ppc/fpu/acc1.c | 2 | ||||
-rw-r--r-- | post/lib_ppc/fpu/compare-fp-1.c | 2 | ||||
-rw-r--r-- | post/lib_ppc/fpu/fpu.c | 2 | ||||
-rw-r--r-- | post/lib_ppc/fpu/mul-subnormal-single-1.c | 2 |
9 files changed, 17 insertions, 0 deletions
diff --git a/post/lib_ppc/fpu/20001122-1.c b/post/lib_ppc/fpu/20001122-1.c index a8537fa6a1..bef80c5f79 100644 --- a/post/lib_ppc/fpu/20001122-1.c +++ b/post/lib_ppc/fpu/20001122-1.c @@ -30,6 +30,8 @@ #if CONFIG_POST & CONFIG_SYS_POST_FPU +GNU_FPOST_ATTR + int fpu_post_test_math1 (void) { volatile double a, *p; diff --git a/post/lib_ppc/fpu/20010114-2.c b/post/lib_ppc/fpu/20010114-2.c index 91e3631d0c..ee564e8d62 100644 --- a/post/lib_ppc/fpu/20010114-2.c +++ b/post/lib_ppc/fpu/20010114-2.c @@ -30,6 +30,8 @@ #if CONFIG_POST & CONFIG_SYS_POST_FPU +GNU_FPOST_ATTR + static float rintf (float x) { volatile float TWO23 = 8388608.0; diff --git a/post/lib_ppc/fpu/20010226-1.c b/post/lib_ppc/fpu/20010226-1.c index b00386b189..099ca4a64f 100644 --- a/post/lib_ppc/fpu/20010226-1.c +++ b/post/lib_ppc/fpu/20010226-1.c @@ -30,6 +30,8 @@ #if CONFIG_POST & CONFIG_SYS_POST_FPU +GNU_FPOST_ATTR + int fpu_post_test_math3 (void) { volatile long double dfrom = 1.1; diff --git a/post/lib_ppc/fpu/980619-1.c b/post/lib_ppc/fpu/980619-1.c index ceb2b76bf5..46a31aec45 100644 --- a/post/lib_ppc/fpu/980619-1.c +++ b/post/lib_ppc/fpu/980619-1.c @@ -30,6 +30,8 @@ #if CONFIG_POST & CONFIG_SYS_POST_FPU +GNU_FPOST_ATTR + int fpu_post_test_math4 (void) { volatile float reale = 1.0f; diff --git a/post/lib_ppc/fpu/Makefile b/post/lib_ppc/fpu/Makefile index db435931d8..a6815398e5 100644 --- a/post/lib_ppc/fpu/Makefile +++ b/post/lib_ppc/fpu/Makefile @@ -29,4 +29,5 @@ COBJS-$(CONFIG_HAS_POST) += acc1.o compare-fp-1.o mul-subnormal-single-1.o include $(TOPDIR)/post/rules.mk +CFLAGS := $(shell echo $(CFLAGS) | sed s/-msoft-float//) CFLAGS += -mhard-float -fkeep-inline-functions diff --git a/post/lib_ppc/fpu/acc1.c b/post/lib_ppc/fpu/acc1.c index 8a65193836..9fca9b3788 100644 --- a/post/lib_ppc/fpu/acc1.c +++ b/post/lib_ppc/fpu/acc1.c @@ -30,6 +30,8 @@ #if CONFIG_POST & CONFIG_SYS_POST_FPU +GNU_FPOST_ATTR + static double func (const double *array) { double d = *array; diff --git a/post/lib_ppc/fpu/compare-fp-1.c b/post/lib_ppc/fpu/compare-fp-1.c index ab476579e7..f836b29c08 100644 --- a/post/lib_ppc/fpu/compare-fp-1.c +++ b/post/lib_ppc/fpu/compare-fp-1.c @@ -32,6 +32,8 @@ #if CONFIG_POST & CONFIG_SYS_POST_FPU +GNU_FPOST_ATTR + static int failed; #define TEST(c) if ((c) != ok) failed++ diff --git a/post/lib_ppc/fpu/fpu.c b/post/lib_ppc/fpu/fpu.c index 846b76d875..3f3adea197 100644 --- a/post/lib_ppc/fpu/fpu.c +++ b/post/lib_ppc/fpu/fpu.c @@ -40,6 +40,8 @@ #include <watchdog.h> +GNU_FPOST_ATTR + extern int fpu_status (void); extern void fpu_enable (void); extern void fpu_disable (void); diff --git a/post/lib_ppc/fpu/mul-subnormal-single-1.c b/post/lib_ppc/fpu/mul-subnormal-single-1.c index 9c514e1167..1f3732d924 100644 --- a/post/lib_ppc/fpu/mul-subnormal-single-1.c +++ b/post/lib_ppc/fpu/mul-subnormal-single-1.c @@ -32,6 +32,8 @@ #if CONFIG_POST & CONFIG_SYS_POST_FPU +GNU_FPOST_ATTR + union uf { unsigned int u; |