From fd91f0024caec4cbca0c53a175cfaa9bc2c5dc5a Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Wed, 9 Mar 2016 08:27:03 -0800 Subject: Workaround a C++ bug in GCC 4.2 in gold test G++ in GCC 4.2 silently ignores --- __attribute__ ((section(".rodata.v1_a2"))) const short rodata_item1 = 101; --- which leads to plugin_layout_with_alignment test failure with Expected 12 sections, found 8 sections since 4 .rodata sections are missing. As a workaround, this patch changes plugin_layout_with_alignment test from C++ to C. * testsuite/plugin_layout_with_alignment.cc: Renamed to .. * testsuite/plugin_layout_with_alignment.c: This. * testsuite/Makefile.am (plugin_layout_with_alignment.o): Updated. (plugin_layout_with_alignment): Likewise. * testsuite/Makefile.in: Regenerated. --- gold/testsuite/Makefile.am | 6 +-- gold/testsuite/Makefile.in | 6 +-- gold/testsuite/plugin_layout_with_alignment.c | 72 ++++++++++++++++++++++++++ gold/testsuite/plugin_layout_with_alignment.cc | 72 -------------------------- 4 files changed, 78 insertions(+), 78 deletions(-) create mode 100644 gold/testsuite/plugin_layout_with_alignment.c delete mode 100644 gold/testsuite/plugin_layout_with_alignment.cc (limited to 'gold/testsuite') diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index 2920587..f5528d1 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -2110,10 +2110,10 @@ plugin_section_order.o: plugin_section_order.c check_SCRIPTS += plugin_layout_with_alignment.sh check_DATA += plugin_layout_with_alignment.stdout MOSTLYCLEANFILES += plugin_layout_with_alignment -plugin_layout_with_alignment.o: plugin_layout_with_alignment.cc - $(CXXCOMPILE) -O0 -c -ffunction-sections -fdata-sections -g -o $@ $< +plugin_layout_with_alignment.o: plugin_layout_with_alignment.c + $(COMPILE) -O0 -c -ffunction-sections -fdata-sections -g -o $@ $< plugin_layout_with_alignment: plugin_layout_with_alignment.o plugin_section_alignment.so gcctestdir/ld - $(CXXLINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_alignment.so" plugin_layout_with_alignment.o + $(LINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_alignment.so" plugin_layout_with_alignment.o plugin_layout_with_alignment.stdout: plugin_layout_with_alignment $(TEST_NM) -n --synthetic plugin_layout_with_alignment > plugin_layout_with_alignment.stdout diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index 4eafa54..988d6f7 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -6146,10 +6146,10 @@ uninstall-am: @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(LINK) -Bgcctestdir/ -shared plugin_section_order.o @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_section_order.o: plugin_section_order.c @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(COMPILE) -O0 -c -fpic -o $@ $< -@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_layout_with_alignment.o: plugin_layout_with_alignment.cc -@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXCOMPILE) -O0 -c -ffunction-sections -fdata-sections -g -o $@ $< +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_layout_with_alignment.o: plugin_layout_with_alignment.c +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(COMPILE) -O0 -c -ffunction-sections -fdata-sections -g -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_layout_with_alignment: plugin_layout_with_alignment.o plugin_section_alignment.so gcctestdir/ld -@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXLINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_alignment.so" plugin_layout_with_alignment.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(LINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_alignment.so" plugin_layout_with_alignment.o @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_layout_with_alignment.stdout: plugin_layout_with_alignment @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(TEST_NM) -n --synthetic plugin_layout_with_alignment > plugin_layout_with_alignment.stdout diff --git a/gold/testsuite/plugin_layout_with_alignment.c b/gold/testsuite/plugin_layout_with_alignment.c new file mode 100644 index 0000000..5d6ff1f --- /dev/null +++ b/gold/testsuite/plugin_layout_with_alignment.c @@ -0,0 +1,72 @@ +// plugin_layout_with_alignment.cc -- a test case for gold + +// Copyright (C) 2016 Free Software Foundation, Inc. +// Written by Than McIntosh <thanm@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. + +// Verify that plugin interfaces for section size and alignment work +// correctly, and that section ordering via plugins is working +// for .bss/.rodata/.data sections. + +// --- Initialized .rodata items + +__attribute__ ((section(".rodata.v1_a2"))) +const short rodata_item1 = 101; + +__attribute__ ((section(".rodata.v2_a1"))) +const char rodata_item2 = 'a'; + +__attribute__ ((section(".rodata.v3_a8"))) +const double rodata_item3 = 777.777; + +__attribute__ ((section(".rodata.v4_a1"))) +const char rodata_item4[7] = {'1', '2', '3', '4', '5', '6', '7'}; + +// --- Initialized .data items + +__attribute__ ((section(".data.v1_a2"))) +short rwdata_item1 = 101; + +__attribute__ ((section(".data.v2_a1"))) +char rwdata_item2 = 'a'; + +__attribute__ ((section(".data.v3_a8"))) +double rwdata_item3 = 'b'; + +__attribute__ ((section(".data.v4_a1"))) +char rwdata_item4[3] = {'a', 'b', 'c'}; + +// --- Uninitialized .data items + +__attribute__ ((section(".bss.v1_a2"))) +short bss_item1; + +__attribute__ ((section(".bss.v2_a1"))) +char bss_item2; + +__attribute__ ((section(".bss.v3_a8"))) +struct blah { union { double d; char c; } u; } bss_item3; + +__attribute__ ((section(".bss.v4_a1"))) +char bss_item4[3]; + +int main (void) +{ + return 0; +} diff --git a/gold/testsuite/plugin_layout_with_alignment.cc b/gold/testsuite/plugin_layout_with_alignment.cc deleted file mode 100644 index 0824d74..0000000 --- a/gold/testsuite/plugin_layout_with_alignment.cc +++ /dev/null @@ -1,72 +0,0 @@ -// plugin_layout_with_alignment.cc -- a test case for gold - -// Copyright (C) 2016 Free Software Foundation, Inc. -// Written by Than McIntosh <thanm@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. - -// Verify that plugin interfaces for section size and alignment work -// correctly, and that section ordering via plugins is working -// for .bss/.rodata/.data sections. - -// --- Initialized .rodata items - -__attribute__ ((section(".rodata.v1_a2"))) -const short rodata_item1 = 101; - -__attribute__ ((section(".rodata.v2_a1"))) -const char rodata_item2 = 'a'; - -__attribute__ ((section(".rodata.v3_a8"))) -const double rodata_item3 = 777.777; - -__attribute__ ((section(".rodata.v4_a1"))) -const char rodata_item4[7] = {'1', '2', '3', '4', '5', '6', '7'}; - -// --- Initialized .data items - -__attribute__ ((section(".data.v1_a2"))) -short rwdata_item1 = 101; - -__attribute__ ((section(".data.v2_a1"))) -char rwdata_item2 = 'a'; - -__attribute__ ((section(".data.v3_a8"))) -double rwdata_item3 = 'b'; - -__attribute__ ((section(".data.v4_a1"))) -char rwdata_item4[3] = {'a', 'b', 'c'}; - -// --- Uninitialized .data items - -__attribute__ ((section(".bss.v1_a2"))) -short bss_item1; - -__attribute__ ((section(".bss.v2_a1"))) -char bss_item2; - -__attribute__ ((section(".bss.v3_a8"))) -struct blah { union { double d; char c; } u; } bss_item3; - -__attribute__ ((section(".bss.v4_a1"))) -char bss_item4[3]; - -int main () -{ - return 0; -} -- cgit v1.1