This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] MIPS/BFD: Correct/clean up ELF FP attribute warning messages
On Mon, 19 Nov 2012, Maciej W. Rozycki wrote:
> Meanwhile I'll look into keeping that first input BFD file name for
> reporting. And actually, after a bit of thinking, I believe it may even
> make sense to say e.g.:
>
> Warning: foobar uses -mdouble-float (set by foo.o), baz.o uses -mips32r2 -mfp64
>
> to emphasize both the ABI chosen for output and where it came from. What
> do you think?
As a follow-up, here's an outline in implementation terms of what I have
had in my mind. I have decided to keep the name of the input BFD locally
after all (rather than say attaching it to the output BFD structure) for
one reason and a half:
1.0. The way attribute merging is performed is target specific and for
other targets it may well not be the first input that determines the
final (or any intermediate) attribute setting, e.g. it may change as
inputs are processed.
1.5. And this is actually already the case for the MIPS target, that I
didn't notice outright, that is any inputs that have the value of the
FP ABI attribute set to zero (absent normally as that setting is
ignored by BFD on output, although still processed correctly when
present) do not influence the FP ABI and cannot conflict with
anything. That is it is actually the first input with a non-zero FP
ABI attribute that determines the ABI.
These observations are reflected in the change proposed below.
As you did not comment on my "set by" proposal I decided to implement it
that way; although I have no strong preference either way. Once we have
agreed on that I'll follow with further changes to the "unknown floating
point ABI" message that I think should be updated accordingly and as I
find it rather silly to report the same message for the output BFD
multiple times (even if the originating input is mentioned too), I'm
tempted to move the two messages to the switch statements below as the
default cases and change them to report the ABI of the other BFD as well
(this may in particular be a different "unknown ABI").
So please confirm which format you prefer and whether you have any
further comments and I'll proceed accordingly. Thanks.
2012-11-21 Maciej W. Rozycki <macro@codesourcery.com>
bfd/
* elfxx-mips.c (mips_elf_merge_obj_attributes): Report the
originating input BFD on attribute conflicts.
ld/testsuite/
* ld-mips-elf/attr-gnu-4-12.d: Update the warning message.
* ld-mips-elf/attr-gnu-4-13.d: Likewise.
* ld-mips-elf/attr-gnu-4-14.d: Likewise.
* ld-mips-elf/attr-gnu-4-21.d: Likewise.
* ld-mips-elf/attr-gnu-4-23.d: Likewise.
* ld-mips-elf/attr-gnu-4-24.d: Likewise.
* ld-mips-elf/attr-gnu-4-31.d: Likewise.
* ld-mips-elf/attr-gnu-4-32.d: Likewise.
* ld-mips-elf/attr-gnu-4-34.d: Likewise.
* ld-mips-elf/attr-gnu-4-41.d: Likewise.
* ld-mips-elf/attr-gnu-4-42.d: Likewise.
* ld-mips-elf/attr-gnu-4-43.d: Likewise.
Maciej
binutils-mips-bfd-attr-bfd.diff
Index: binutils-fsf-trunk-quilt/bfd/elfxx-mips.c
===================================================================
--- binutils-fsf-trunk-quilt.orig/bfd/elfxx-mips.c 2012-11-20 23:15:43.000000000 +0000
+++ binutils-fsf-trunk-quilt/bfd/elfxx-mips.c 2012-11-21 18:00:37.481172436 +0000
@@ -13749,6 +13749,11 @@ mips_elf_merge_obj_attributes (bfd *ibfd
{
obj_attribute *in_attr;
obj_attribute *out_attr;
+ static bfd *attr_bfd;
+
+ in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
+ if (!attr_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
+ attr_bfd = ibfd;
if (!elf_known_obj_attributes_proc (obfd)[0].i)
{
@@ -13764,7 +13769,6 @@ mips_elf_merge_obj_attributes (bfd *ibfd
/* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
non-conflicting ones. */
- in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
{
@@ -13789,20 +13793,23 @@ mips_elf_merge_obj_attributes (bfd *ibfd
{
case 2:
_bfd_error_handler
- (_("Warning: %B uses -mdouble-float, %B uses -msingle-float"),
- obfd, ibfd);
+ (_("Warning: %B uses -mdouble-float (set by %B), "
+ "%B uses -msingle-float"),
+ obfd, attr_bfd, ibfd);
break;
case 3:
_bfd_error_handler
- (_("Warning: %B uses hard float, %B uses soft float"),
- obfd, ibfd);
+ (_("Warning: %B uses hard float (set by %B), "
+ "%B uses soft float"),
+ obfd, attr_bfd, ibfd);
break;
case 4:
_bfd_error_handler
- (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"),
- obfd, ibfd);
+ (_("Warning: %B uses -mdouble-float (set by %B), "
+ "%B uses -mips32r2 -mfp64"),
+ obfd, attr_bfd, ibfd);
break;
default:
@@ -13815,20 +13822,23 @@ mips_elf_merge_obj_attributes (bfd *ibfd
{
case 1:
_bfd_error_handler
- (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
- obfd, ibfd);
+ (_("Warning: %B uses -msingle-float (set by %B), "
+ "%B uses -mdouble-float"),
+ obfd, attr_bfd, ibfd);
break;
case 3:
_bfd_error_handler
- (_("Warning: %B uses hard float, %B uses soft float"),
- obfd, ibfd);
+ (_("Warning: %B uses hard float (set by %B), "
+ "%B uses soft float"),
+ obfd, attr_bfd, ibfd);
break;
case 4:
_bfd_error_handler
- (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"),
- obfd, ibfd);
+ (_("Warning: %B uses -msingle-float (set by %B), "
+ "%B uses -mips32r2 -mfp64"),
+ obfd, attr_bfd, ibfd);
break;
default:
@@ -13843,8 +13853,9 @@ mips_elf_merge_obj_attributes (bfd *ibfd
case 2:
case 4:
_bfd_error_handler
- (_("Warning: %B uses soft float, %B uses hard float"),
- obfd, ibfd);
+ (_("Warning: %B uses soft float (set by %B), "
+ "%B uses hard float"),
+ obfd, attr_bfd, ibfd);
break;
default:
@@ -13857,20 +13868,23 @@ mips_elf_merge_obj_attributes (bfd *ibfd
{
case 1:
_bfd_error_handler
- (_("Warning: %B uses -mips32r2 -mfp64, %B uses -mdouble-float"),
- obfd, ibfd);
+ (_("Warning: %B uses -mips32r2 -mfp64 (set by %B), "
+ "%B uses -mdouble-float"),
+ obfd, attr_bfd, ibfd);
break;
case 2:
_bfd_error_handler
- (_("Warning: %B uses -mips32r2 -mfp64, %B uses -msingle-float"),
- obfd, ibfd);
+ (_("Warning: %B uses -mips32r2 -mfp64 (set by %B), "
+ "%B uses -msingle-float"),
+ obfd, attr_bfd, ibfd);
break;
case 3:
_bfd_error_handler
- (_("Warning: %B uses hard float, %B uses soft float"),
- obfd, ibfd);
+ (_("Warning: %B uses hard float (set by %B), "
+ "%B uses soft float"),
+ obfd, attr_bfd, ibfd);
break;
default:
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d 2012-11-10 15:19:59.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d 2012-11-21 07:02:45.520681553 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-1.s
#source: attr-gnu-4-2.s
#ld: -r
-#warning: Warning: .* uses -mdouble-float, .* uses -msingle-float
+#warning: Warning: .* uses -mdouble-float \(set by .*\), .* uses -msingle-float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d 2012-07-04 12:07:13.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d 2012-11-21 07:02:49.920952185 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-1.s
#source: attr-gnu-4-3.s
#ld: -r
-#warning: Warning: .* uses hard float, .* uses soft float
+#warning: Warning: .* uses hard float \(set by .*\), .* uses soft float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d 2012-11-10 15:19:59.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d 2012-11-21 07:02:55.100673328 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-1.s
#source: attr-gnu-4-4.s
#ld: -r
-#warning: Warning: .* uses -mdouble-float, .* uses -mips32r2 -mfp64
+#warning: Warning: .* uses -mdouble-float \(set by .*\), .* uses -mips32r2 -mfp64
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d 2012-07-04 12:07:12.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d 2012-11-21 07:03:52.220608909 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-2.s
#source: attr-gnu-4-1.s
#ld: -r
-#warning: Warning: .* uses -msingle-float, .* uses -mdouble-float
+#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses -mdouble-float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d 2012-07-04 12:07:12.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d 2012-11-21 07:03:57.550701367 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-2.s
#source: attr-gnu-4-3.s
#ld: -r
-#warning: Warning: .* uses hard float, .* uses soft float
+#warning: Warning: .* uses hard float \(set by .*\), .* uses soft float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d 2012-07-04 12:07:12.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d 2012-11-21 07:04:01.510650868 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-2.s
#source: attr-gnu-4-4.s
#ld: -r
-#warning: Warning: .* uses -mips32r2 -mfp64
+#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses -mips32r2 -mfp64
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d 2012-11-10 15:19:59.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d 2012-11-21 07:04:09.561340318 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-3.s
#source: attr-gnu-4-1.s
#ld: -r
-#warning: Warning: .* uses soft float, .* uses hard float
+#warning: Warning: .* uses soft float \(set by .*\), .* uses hard float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d 2012-11-10 15:19:59.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d 2012-11-21 07:04:13.711633507 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-3.s
#source: attr-gnu-4-2.s
#ld: -r
-#warning: Warning: .* uses soft float, .* uses hard float
+#warning: Warning: .* uses soft float \(set by .*\), .* uses hard float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d 2012-11-10 15:19:59.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d 2012-11-21 07:04:19.671312229 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-3.s
#source: attr-gnu-4-4.s
#ld: -r
-#warning: Warning: .* uses soft float, .* uses hard float
+#warning: Warning: .* uses soft float \(set by .*\), .* uses hard float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d 2012-11-10 15:19:59.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d 2012-11-21 07:04:25.610648553 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-4.s
#source: attr-gnu-4-1.s
#ld: -r
-#warning: Warning: .* uses -mips32r2 -mfp64, .* uses -mdouble-float
+#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses -mdouble-float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d 2012-07-04 12:07:12.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d 2012-11-21 07:04:30.201757206 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-4.s
#source: attr-gnu-4-2.s
#ld: -r
-#warning: Warning: .* uses -mips32r2 -mfp64
+#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses -msingle-float
#target: mips*-*-*
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d 2012-07-04 12:07:12.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d 2012-11-21 07:04:35.081631773 +0000
@@ -1,5 +1,5 @@
#source: attr-gnu-4-4.s
#source: attr-gnu-4-3.s
#ld: -r
-#warning: Warning: .* uses hard float, .* uses soft float
+#warning: Warning: .* uses hard float \(set by .*\), .* uses soft float
#target: mips*-*-*