Support PowerPC single-precision float.
authorAlan Modra <amodra@gmail.com>
Sat, 26 Jul 2008 13:10:48 +0000 (13:10 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 26 Jul 2008 13:10:48 +0000 (13:10 +0000)
20 files changed:
bfd/ChangeLog
bfd/elf32-ppc.c
binutils/readelf.c
gas/ChangeLog
gas/doc/as.texinfo
include/elf/ChangeLog
include/elf/ppc.h
ld/testsuite/ChangeLog
ld/testsuite/ld-powerpc/attr-gnu-4-03.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-13.d
ld/testsuite/ld-powerpc/attr-gnu-4-14.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-23.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-24.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-31.d
ld/testsuite/ld-powerpc/attr-gnu-4-32.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-33.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-34.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-4.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/attr-gnu-4-41.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/powerpc.exp

index 23b8d93d87a6e9913a44d70a3d2053177c6a7bed..02dbbb14e8307593341d7186186a65295288e814 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-26  Michael Eager <eager@eagercon.com>
+
+       * elf32-ppc.c (ppc_elf_merge_obj_attributes): Check compatibility
+       between single-float, double-float, and soft-float.
+
 2008-07-24  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * elf32-mips.c (elf_backend_write_section): Define.
index 92f812fda302646e1f805fbf2a3586ea00c7329c..22b90b26a4abfb3143e1be9a2f509701a9f6ec00 100644 (file)
@@ -3883,10 +3883,22 @@ ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
       else if (out_attr->i == 1 && in_attr->i == 2)
        _bfd_error_handler
          (_("Warning: %B uses hard float, %B uses soft float"), obfd, ibfd);
-      else if (out_attr->i == 2 && in_attr->i == 1)
+      else if (out_attr->i == 1 && in_attr->i == 3)
+       _bfd_error_handler
+         (_("Warning: %B uses double-precision hard float, %B uses single-precision hard float"), 
+         obfd, ibfd);
+      else if (out_attr->i == 3 && in_attr->i == 1)
+       _bfd_error_handler
+         (_("Warning: %B uses double-precision hard float, %B uses single-precision hard float"), 
+         ibfd, obfd);
+      else if (out_attr->i == 3 && in_attr->i == 2)
+       _bfd_error_handler
+         (_("Warning: %B uses soft float, %B uses single-precision hard float"), 
+         ibfd, obfd);
+      else if (out_attr->i == 2 && (in_attr->i == 1 || in_attr->i == 3))
        _bfd_error_handler
          (_("Warning: %B uses hard float, %B uses soft float"), ibfd, obfd);
-      else if (in_attr->i > 2)
+      else if (in_attr->i > 3)
        _bfd_error_handler
          (_("Warning: %B uses unknown floating point ABI %d"), ibfd,
           in_attr->i);
index 92b00f1b7ad1d562fb635d6955bce15db4d57faa..8b0e13ac8b541fc16deacd0ac1b689d4b00fd4f1 100644 (file)
@@ -9037,6 +9037,9 @@ display_power_gnu_attribute (unsigned char *p, int tag)
        case 2:
          printf ("Soft float\n");
          break;
+       case 3:
+         printf ("Single-precision hard float\n");
+         break;
        default:
          printf ("??? (%d)\n", val);
          break;
index b8016c6c430e7ece7c681b15eda5817b283698ac..48a38348f8a9668039d1ba1ffec7cd26ee6e634e 100644 (file)
@@ -1,3 +1,7 @@
+2008-07-26  Michael Eager <eager@eagercon.com>
+
+       * doc/as.texinfo: Add description of single-precision attribute.
+
 2008-07-24  Jie Zhang  <jie.zhang@analog.com>
 
        * config/bfin-parse.y (asm_1): Error if plain symbol is used
index 165eca7cc05aac10960c4b21fa835098905b96a6..635b707484790102319f3514f0c6040f129fe4c8 100644 (file)
@@ -6513,9 +6513,11 @@ The floating-point ABI used by this object file.  The value will be:
 @item
 0 for files not affected by the floating-point ABI.
 @item
-1 for files using the hardware floating-point ABI.
+1 for files using double-precision hardware floating-point ABI.
 @item
 2 for files using the software floating-point ABI.
+@item
+3 for files using single-precision hardware floating-point ABI.
 @end itemize
 
 @item Tag_GNU_Power_ABI_Vector (8)
index 71a54cd912a33665197d70b84cb167438f6f524b..62bce3e6c90d94b8c61adae56d2146b40e4d9732 100644 (file)
@@ -1,3 +1,7 @@
+2008-07-26  Michael Eager <eager@eagercon.com>
+
+       * ppc.h: Add description of single-precision.
+
 2008-07-21  Luis Machado  <luisgpm@br.ibm.com>
 
        * common.h: Define NT_PPC_VSX.
index 5d4462b0694ee8aae4dfeeac49d6cbeead658b97..95cccce24819232075dbdeadcb6e272d6ffbae54 100644 (file)
@@ -1,5 +1,5 @@
 /* PPC ELF support for BFD.
-   Copyright 1995, 1996, 1998, 2000, 2001, 2002, 2003, 2005
+   Copyright 1995, 1996, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2008
    Free Software Foundation, Inc.
 
    By Michael Meissner, Cygnus Support, <meissner@cygnus.com>, from information
@@ -177,7 +177,8 @@ enum
 {
   /* 0-3 are generic.  */
   Tag_GNU_Power_ABI_FP = 4, /* Value 1 for hard-float, 2 for
-                              soft-float; 0 for not tagged or not
+                              soft-float, 3 for single=precision 
+                              hard-float; 0 for not tagged or not
                               using any ABIs affected by the
                               differences.  */
 
index 593c909b6199bcfe67bcaa14257bbc9febdcbebc..c9b18bc3dda56cdffc84962f2392626594f21363 100644 (file)
@@ -1,3 +1,18 @@
+2008-07-26  Michael Eager <eager@eagercon.com>
+
+       * ld-powerpc/powerpc.exp: Run new tests.
+       * ld-powerpc/attr-gnu-4-03.d: New file.
+       * ld-powerpc/attr-gnu-4-14.d: New file.
+       * ld-powerpc/attr-gnu-4-23.d: New file.
+       * ld-powerpc/attr-gnu-4-24.d: New file.
+       * ld-powerpc/attr-gnu-4-32.d: New file.
+       * ld-powerpc/attr-gnu-4-33.d: New file.
+       * ld-powerpc/attr-gnu-4-34.d: New file.
+       * ld-powerpc/attr-gnu-4-41.d: New file.
+       * ld-powerpc/attr-gnu-4-4.s: New file.
+       * ld-powerpc/attr-gnu-4-13.d: Adjust.
+       * ld-powerpc/attr-gnu-4-31.d: Adjust.
+
 2008-07-26  Alan Modra  <amodra@bigpond.net.au>
 
        * ld-scripts/include.exp: Don't run test for aout.
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-03.d b/ld/testsuite/ld-powerpc/attr-gnu-4-03.d
new file mode 100644 (file)
index 0000000..03b0c3c
--- /dev/null
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_Power_ABI_FP: Single-precision hard float
index be1290e6570f80d3fda6dbf8e6422c52f83e9a0b..6bc3de4a55ec6a07660d0c1f293ffa7f827e603d 100644 (file)
@@ -2,5 +2,5 @@
 #source: attr-gnu-4-3.s
 #as: -a32
 #ld: -r -melf32ppc
-#warning: Warning: .* uses unknown floating point ABI 3
+#warning: Warning: .* uses double-precision hard float, .* uses single-precision hard float
 #target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-14.d b/ld/testsuite/ld-powerpc/attr-gnu-4-14.d
new file mode 100644 (file)
index 0000000..3bb6661
--- /dev/null
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-4.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-23.d b/ld/testsuite/ld-powerpc/attr-gnu-4-23.d
new file mode 100644 (file)
index 0000000..f72c258
--- /dev/null
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-24.d b/ld/testsuite/ld-powerpc/attr-gnu-4-24.d
new file mode 100644 (file)
index 0000000..fc17f91
--- /dev/null
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-4.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
index 9cf8f4f5930fc7e146ef87248592c359afedcc22..8ee1874a105b62f0d70f13dfc118cc923d9ba22e 100644 (file)
@@ -2,5 +2,5 @@
 #source: attr-gnu-4-1.s
 #as: -a32
 #ld: -r -melf32ppc
-#warning: Warning: .* uses unknown floating point ABI 3
+#warning: Warning: .* uses double-precision hard float, .* uses single-precision hard float
 #target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-32.d b/ld/testsuite/ld-powerpc/attr-gnu-4-32.d
new file mode 100644 (file)
index 0000000..3b7cb29
--- /dev/null
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses soft float, .* uses single-precision hard float
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-33.d b/ld/testsuite/ld-powerpc/attr-gnu-4-33.d
new file mode 100644 (file)
index 0000000..88367ae
--- /dev/null
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_Power_ABI_FP: Single-precision hard float
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-34.d b/ld/testsuite/ld-powerpc/attr-gnu-4-34.d
new file mode 100644 (file)
index 0000000..6f6e1fe
--- /dev/null
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-4.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-4.s b/ld/testsuite/ld-powerpc/attr-gnu-4-4.s
new file mode 100644 (file)
index 0000000..3ff129a
--- /dev/null
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-41.d b/ld/testsuite/ld-powerpc/attr-gnu-4-41.d
new file mode 100644 (file)
index 0000000..b909476
--- /dev/null
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: powerpc*-*-*
index b1ad367a88cbb6d73fc9f50c196ff65b1c8375e1..4e03cf6fb3c2dd2bc5f4b5ef8ed591e60f69593c 100644 (file)
@@ -1,5 +1,5 @@
 # Expect script for ld-powerpc tests
-#   Copyright 2002, 2003, 2005, 2006, 2007 Free Software Foundation
+#   Copyright 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation
 #
 # This file is part of the GNU Binutils.
 #
@@ -157,14 +157,22 @@ run_dump_test "plt1"
 run_dump_test "attr-gnu-4-00"
 run_dump_test "attr-gnu-4-01"
 run_dump_test "attr-gnu-4-02"
+run_dump_test "attr-gnu-4-03"
 run_dump_test "attr-gnu-4-10"
 run_dump_test "attr-gnu-4-11"
 run_dump_test "attr-gnu-4-12"
 run_dump_test "attr-gnu-4-13"
+run_dump_test "attr-gnu-4-14"
 run_dump_test "attr-gnu-4-20"
 run_dump_test "attr-gnu-4-21"
 run_dump_test "attr-gnu-4-22"
+run_dump_test "attr-gnu-4-23"
+run_dump_test "attr-gnu-4-24"
 run_dump_test "attr-gnu-4-31"
+run_dump_test "attr-gnu-4-32"
+run_dump_test "attr-gnu-4-33"
+run_dump_test "attr-gnu-4-34"
+run_dump_test "attr-gnu-4-41"
 
 run_dump_test "attr-gnu-8-11"
 run_dump_test "attr-gnu-8-23"