This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[gold] PATCH: PR gold/18663: gold tests are incompatible with GCC 5
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Cc: Cary Coutant <ccoutant at gmail dot com>
- Date: Tue, 14 Jul 2015 05:58:03 -0700
- Subject: [gold] PATCH: PR gold/18663: gold tests are incompatible with GCC 5
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
GCC 5 will fold symbol address comparison, assuming each symbol has a
different address, which leads to abort. We should use separate
functions to compare symbol address.
OK for master?
H.J.
PR gold/18663
* testsuite/Makefile.am (script_test_1_SOURCES): Set to
script_test_1a.cc script_test_1b.cc.
(script_test_11_r.o): Replace script_test_11.o with
script_test_11a.o script_test_11b.o.
(script_test_11.o): Removed.
(script_test_11a.o): New.
(script_test_11b.o): Likewise.
* testsuite/Makefile.in: Regenerated.
* testsuite/script_test_1.h: New file.
* testsuite/script_test_1b.cc: Likewise.
* testsuite/script_test_11.h: Likewise.
* testsuite/script_test_11b.c: Likewise.
* testsuite/script_test_1.cc: Renamed to ...
* testsuite/script_test_1a.cc: This.
Include "script_test_1.h".
(main): Call check_int and check_ptr.
* testsuite/script_test_11.c: Renamed to ...
* testsuite/script_test_11a.c: This.
Include "script_test_11.h".
(main): Call ptr_equal.
---
gold/testsuite/Makefile.am | 10 +++++----
gold/testsuite/Makefile.in | 16 +++++++++-----
gold/testsuite/script_test_1.cc | 47 ----------------------------------------
gold/testsuite/script_test_1.h | 25 +++++++++++++++++++++
gold/testsuite/script_test_11.c | 16 --------------
gold/testsuite/script_test_11.h | 1 +
gold/testsuite/script_test_11a.c | 18 +++++++++++++++
gold/testsuite/script_test_11b.c | 7 ++++++
gold/testsuite/script_test_1a.cc | 46 +++++++++++++++++++++++++++++++++++++++
gold/testsuite/script_test_1b.cc | 38 ++++++++++++++++++++++++++++++++
10 files changed, 151 insertions(+), 73 deletions(-)
delete mode 100644 gold/testsuite/script_test_1.cc
create mode 100644 gold/testsuite/script_test_1.h
delete mode 100644 gold/testsuite/script_test_11.c
create mode 100644 gold/testsuite/script_test_11.h
create mode 100644 gold/testsuite/script_test_11a.c
create mode 100644 gold/testsuite/script_test_11b.c
create mode 100644 gold/testsuite/script_test_1a.cc
create mode 100644 gold/testsuite/script_test_1b.cc
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index d2f4668..7e18480 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -1620,7 +1620,7 @@ relro_script_test.so: gcctestdir/ld relro_script_test.t relro_test_pic.o
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro -Wl,-T,$(srcdir)/relro_script_test.t relro_test_pic.o
check_PROGRAMS += script_test_1
-script_test_1_SOURCES = script_test_1.cc
+script_test_1_SOURCES = script_test_1a.cc script_test_1b.cc
script_test_1_DEPENDENCIES = gcctestdir/ld script_test_1.t
script_test_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_1.t
script_test_1_LDADD =
@@ -1753,9 +1753,11 @@ script_test_9.stdout: script_test_9
check_PROGRAMS += script_test_11
script_test_11: gcctestdir/ld script_test_11_r.o
$(LINK) -Bgcctestdir/ script_test_11_r.o
-script_test_11_r.o: gcctestdir/ld $(srcdir)/script_test_11.t script_test_11.o
- gcctestdir/ld -r -o $@ -T $(srcdir)/script_test_11.t script_test_11.o
-script_test_11.o: script_test_11.c
+script_test_11_r.o: gcctestdir/ld $(srcdir)/script_test_11.t script_test_11a.o script_test_11b.o
+ gcctestdir/ld -r -o $@ -T $(srcdir)/script_test_11.t script_test_11a.o script_test_11b.o
+script_test_11a.o: script_test_11a.c
+ $(COMPILE) -c -g -o $@ $<
+script_test_11b.o: script_test_11b.c
$(COMPILE) -c -g -o $@ $<
# Test difference between "*(a b)" and "*(a) *(b)" in input section spec.
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 1c336c6..02ec6fe 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -1703,7 +1703,8 @@ relro_test_OBJECTS = $(am_relro_test_OBJECTS)
relro_test_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
$(relro_test_LDFLAGS) $(LDFLAGS) -o $@
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_script_test_1_OBJECTS = \
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_1.$(OBJEXT)
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_1a.$(OBJEXT) \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_1b.$(OBJEXT)
script_test_1_OBJECTS = $(am_script_test_1_OBJECTS)
script_test_1_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
$(script_test_1_LDFLAGS) $(LDFLAGS) -o $@
@@ -2835,7 +2836,7 @@ LDADD = libgoldtest.a ../libgold.a ../../libiberty/libiberty.a $(LIBINTL) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@relro_script_test_DEPENDENCIES = gcctestdir/ld relro_script_test.so
@GCC_TRUE@@NATIVE_LINKER_TRUE@relro_script_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
@GCC_TRUE@@NATIVE_LINKER_TRUE@relro_script_test_LDADD = relro_script_test.so
-@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_1_SOURCES = script_test_1.cc
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_1_SOURCES = script_test_1a.cc script_test_1b.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_1_DEPENDENCIES = gcctestdir/ld script_test_1.t
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_1.t
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_1_LDADD =
@@ -3983,10 +3984,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protected_main_2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protected_main_3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relro_test_main.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_11.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_12.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_12i.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_1a.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_1b.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_2a.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script_test_2b.Po@am__quote@
@@ -5811,9 +5813,11 @@ uninstall-am:
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -lW script_test_9 > script_test_9.stdout
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_11: gcctestdir/ld script_test_11_r.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ script_test_11_r.o
-@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_11_r.o: gcctestdir/ld $(srcdir)/script_test_11.t script_test_11.o
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -r -o $@ -T $(srcdir)/script_test_11.t script_test_11.o
-@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_11.o: script_test_11.c
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_11_r.o: gcctestdir/ld $(srcdir)/script_test_11.t script_test_11a.o script_test_11b.o
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -r -o $@ -T $(srcdir)/script_test_11.t script_test_11a.o script_test_11b.o
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_11a.o: script_test_11a.c
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -g -o $@ $<
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_11b.o: script_test_11b.c
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -g -o $@ $<
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_12: gcctestdir/ld $(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -Wl,-T,$(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
diff --git a/gold/testsuite/script_test_1.cc b/gold/testsuite/script_test_1.cc
deleted file mode 100644
index 32ff102..0000000
--- a/gold/testsuite/script_test_1.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// script_test_1.cc -- linker script test 1 for gold -*- C++ -*-
-
-// Copyright (C) 2008-2015 Free Software Foundation, Inc.
-// Written by Ian Lance Taylor <iant@google.com>.
-
-// This file is part of gold.
-
-// This program 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 3 of the License, or
-// (at your option) any later version.
-
-// This program 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 this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-// MA 02110-1301, USA.
-
-// A test for a linker script which sets symbols to values.
-
-#include <cassert>
-#include <cstddef>
-#include <stdint.h>
-
-extern char a, b, c, d, e, f, g;
-int sym = 3;
-int common_sym;
-
-int
-main(int, char**)
-{
- assert(reinterpret_cast<intptr_t>(&a) == 123);
- assert(reinterpret_cast<intptr_t>(&b) == reinterpret_cast<intptr_t>(&a) * 2);
- assert(reinterpret_cast<intptr_t>(&c)
- == reinterpret_cast<intptr_t>(&b) + 3 * 6);
- assert(reinterpret_cast<intptr_t>(&d)
- == (reinterpret_cast<intptr_t>(&b) + 3) * 6);
- assert(reinterpret_cast<int*>(&e) == &sym);
- assert(reinterpret_cast<intptr_t>(&f)
- == reinterpret_cast<intptr_t>(&sym) + 10);
- assert(reinterpret_cast<int*>(&g) == &common_sym);
- return 0;
-}
diff --git a/gold/testsuite/script_test_1.h b/gold/testsuite/script_test_1.h
new file mode 100644
index 0000000..5c23c54
--- /dev/null
+++ b/gold/testsuite/script_test_1.h
@@ -0,0 +1,25 @@
+// script_test_1.h -- linker script test 1 for gold -*- C++ -*-
+
+// Copyright (C) 2015 Free Software Foundation, Inc.
+
+// This file is part of gold.
+
+// This program 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 3 of the License, or
+// (at your option) any later version.
+
+// This program 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 this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+// MA 02110-1301, USA.
+
+#include <stdint.h>
+
+extern void check_int(intptr_t, intptr_t);
+extern void check_ptr(int *, int *);
diff --git a/gold/testsuite/script_test_11.c b/gold/testsuite/script_test_11.c
deleted file mode 100644
index d932813..0000000
--- a/gold/testsuite/script_test_11.c
+++ /dev/null
@@ -1,16 +0,0 @@
-static unsigned int buffer1[256] __attribute((used));
-static unsigned int buffer2[256] __attribute((used)) = { 1 };
-
-unsigned int foo __attribute__((section(".foo")));
-extern char __foo_start;
-extern char __foo_end;
-
-int
-main (void)
-{
- if (&__foo_end - &__foo_start != sizeof(foo))
- return 1;
- if (&__foo_start != (char *)&foo)
- return 2;
- return 0;
-}
diff --git a/gold/testsuite/script_test_11.h b/gold/testsuite/script_test_11.h
new file mode 100644
index 0000000..959a8ab
--- /dev/null
+++ b/gold/testsuite/script_test_11.h
@@ -0,0 +1 @@
+extern int ptr_equal(char *, char *);
diff --git a/gold/testsuite/script_test_11a.c b/gold/testsuite/script_test_11a.c
new file mode 100644
index 0000000..9e69877
--- /dev/null
+++ b/gold/testsuite/script_test_11a.c
@@ -0,0 +1,18 @@
+#include "script_test_11.h"
+
+static unsigned int buffer1[256] __attribute((used));
+static unsigned int buffer2[256] __attribute((used)) = { 1 };
+
+unsigned int foo __attribute__((section(".foo")));
+extern char __foo_start;
+extern char __foo_end;
+
+int
+main (void)
+{
+ if (&__foo_end - &__foo_start != sizeof(foo))
+ return 1;
+ if (!ptr_equal(&__foo_start, (char *)&foo))
+ return 2;
+ return 0;
+}
diff --git a/gold/testsuite/script_test_11b.c b/gold/testsuite/script_test_11b.c
new file mode 100644
index 0000000..9f95e13
--- /dev/null
+++ b/gold/testsuite/script_test_11b.c
@@ -0,0 +1,7 @@
+#include "script_test_11.h"
+
+int
+ptr_equal(char *a, char *b)
+{
+ return a == b;
+}
diff --git a/gold/testsuite/script_test_1a.cc b/gold/testsuite/script_test_1a.cc
new file mode 100644
index 0000000..648b42a
--- /dev/null
+++ b/gold/testsuite/script_test_1a.cc
@@ -0,0 +1,46 @@
+// script_test_1a.cc -- linker script test 1 for gold -*- C++ -*-
+
+// Copyright (C) 2008-2015 Free Software Foundation, Inc.
+// Written by Ian Lance Taylor <iant@google.com>.
+
+// This file is part of gold.
+
+// This program 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 3 of the License, or
+// (at your option) any later version.
+
+// This program 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 this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+// MA 02110-1301, USA.
+
+// A test for a linker script which sets symbols to values.
+
+#include "script_test_1.h"
+
+extern char a, b, c, d, e, f, g;
+int sym = 3;
+int common_sym;
+
+int
+main(int, char**)
+{
+ check_int(reinterpret_cast<intptr_t>(&a), 123);
+ check_int(reinterpret_cast<intptr_t>(&b),
+ reinterpret_cast<intptr_t>(&a) * 2);
+ check_int(reinterpret_cast<intptr_t>(&c),
+ reinterpret_cast<intptr_t>(&b) + 3 * 6);
+ check_int(reinterpret_cast<intptr_t>(&d),
+ (reinterpret_cast<intptr_t>(&b) + 3) * 6);
+ check_ptr(reinterpret_cast<int*>(&e), &sym);
+ check_int(reinterpret_cast<intptr_t>(&f),
+ reinterpret_cast<intptr_t>(&sym) + 10);
+ check_ptr(reinterpret_cast<int*>(&g), &common_sym);
+ return 0;
+}
diff --git a/gold/testsuite/script_test_1b.cc b/gold/testsuite/script_test_1b.cc
new file mode 100644
index 0000000..553ebca
--- /dev/null
+++ b/gold/testsuite/script_test_1b.cc
@@ -0,0 +1,38 @@
+// script_test_1b.cc -- linker script test 1 for gold -*- C++ -*-
+
+// Copyright (C) 2015 Free Software Foundation, Inc.
+
+// This file is part of gold.
+
+// This program 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 3 of the License, or
+// (at your option) any later version.
+
+// This program 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 this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+// MA 02110-1301, USA.
+
+// A test for a linker script which sets symbols to values.
+
+#include <cassert>
+
+#include "script_test_1.h"
+
+void
+check_int(intptr_t i, intptr_t j)
+{
+ assert (i == j);
+}
+
+void
+check_ptr(int *i, int *j)
+{
+ assert (i == j);
+}
--
2.4.3