This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [gold][PATCH] Add SHF_COMPRESSED section decompression to gold
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Cary Coutant <ccoutant at gmail dot com>, Binutils <binutils at sourceware dot org>
- Date: Wed, 15 Apr 2015 05:04:03 -0700
- Subject: Re: [gold][PATCH] Add SHF_COMPRESSED section decompression to gold
- Authentication-results: sourceware.org; auth=none
- References: <20150408180516 dot GA23138 at intel dot com> <CAHACq4ouQY4M6_EnRjTd=jGb7PvDp6Fy394uB_sZUOKSW_iK+Q at mail dot gmail dot com> <CAMe9rOrCqdSdX_tOh_RkpAoHixr8JwNkG4-YjEWQt_rP2v8XrQ at mail dot gmail dot com> <CAJimCsEZTJe=ETyXj0TJx5ZZ0PKLoXuiY=p0C_NojavRN0r4Qg at mail dot gmail dot com> <CAMe9rOrT57W5GqpMK0wUhnOjUXu34_GGb7GQW8ps8s73eHZ78w at mail dot gmail dot com> <20150409233533 dot GG27812 at bubble dot grove dot modra dot org>
On Thu, Apr 9, 2015 at 4:35 PM, Alan Modra <amodra@gmail.com> wrote:
> On Thu, Apr 09, 2015 at 03:09:26PM -0700, H.J. Lu wrote:
>> I have found automake 1.11.1 generated different Makefile.in for no
>> apparent reason.
>
> Yes, just running exactly the same automake with exactly the same
> starting conditions (rm -r autom3te.cache) can generate differing
> Makefile.in. Last time I looked, I came to the conclusion that it was
> due to threading in automake.
>
Here is the updated patch. OK for master?
--
H.J.
From 7f20e709cc792ebbc61757a17c511de0d8b7f8f7 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Wed, 18 Mar 2015 06:50:18 -0700
Subject: [PATCH 1/2] Add SHF_COMPRESSED section decompression to gold
This patch adds SHF_COMPRESSED section decompression to gold.
* object.h (Compressed_section_info): Add flag to store sh_flags.
* object.cc (build_compressed_section_map): Check SHF_COMPRESSED
for compression header. Store sh_flags in Compressed_section_info.
(Sized_relobj_file<size, big_endian>::do_find_special_section):
Also check ".debug_*" sections.
(Object::decompressed_section_contents): Check SHF_COMPRESSED
for compression header.
* reloc.cc (Sized_relobj_file<size, big_endian>::write_sections):
Check SHF_COMPRESSED for compression header.
* testsuite/Makefile.am (check_DATA): Add
debug_msg_cdebug_gabi.err and gdb_index_test_2_gabi.stdout.
(MOSTLYCLEANFILES): Add debug_msg_cdebug_gabi.err and
gdb_index_test_2_gabi.stdout.
(debug_msg_cdebug_gabi.o): New.
(odr_violation1_cdebug_gabi.o): Likewise.
(odr_violation2_cdebug_gabi.o): Likewise.
(debug_msg_cdebug_gabi.err): Likewise.
(check_SCRIPTS): Add gdb_index_test_2_gabi.sh.
(gdb_index_test_cdebug_gabi.o): Likewise.
(gdb_index_test_2_gabi): Likewise.
(gdb_index_test_2_gabi.stdout): Likewise.
* testsuite/gdb_index_test_2_gabi.sh: New file.
* testsuite/Makefile.in: Regenerated.
---
gold/object.cc | 65 ++++++++++++++++++++++++++++-----
gold/object.h | 1 +
gold/reloc.cc | 9 ++++-
gold/testsuite/Makefile.am | 25 +++++++++++++
gold/testsuite/Makefile.in | 28 ++++++++++++++
gold/testsuite/gdb_index_test_2_gabi.sh | 26 +++++++++++++
6 files changed, 144 insertions(+), 10 deletions(-)
create mode 100755 gold/testsuite/gdb_index_test_2_gabi.sh
diff --git a/gold/object.cc b/gold/object.cc
index f28305b..932632c 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -740,23 +740,56 @@ build_compressed_section_map(
continue;
}
- const char* name = names + shdr.get_sh_name();
- if (is_compressed_debug_section(name))
+ bool is_zcompressed = false;
+ bool is_compressed
+ = (shdr.get_sh_flags() & elfcpp::SHF_COMPRESSED) != 0;
+ const char* name;
+
+ if (is_compressed)
+ name = NULL;
+ else
+ {
+ name = names + shdr.get_sh_name();
+ if (is_compressed_debug_section(name))
+ is_zcompressed = true;
+ }
+ if (is_zcompressed || is_compressed)
{
+ int compression_header_size;
section_size_type len;
const unsigned char* contents =
- obj->section_contents(i, &len, false);
- uint64_t uncompressed_size = get_uncompressed_size(contents, len);
+ obj->section_contents(i, &len, false);
+ if (is_zcompressed)
+ compression_header_size = 0;
+ else
+ compression_header_size
+ = elfcpp::Elf_sizes<size>::chdr_size;
+ uint64_t uncompressed_size
+ = get_uncompressed_size(contents + compression_header_size,
+ len - compression_header_size);
Compressed_section_info info;
info.size = convert_to_section_size_type(uncompressed_size);
+ info.flag = convert_to_section_size_type(shdr.get_sh_flags());
info.contents = NULL;
if (uncompressed_size != -1ULL)
{
+ if (is_compressed)
+ {
+ typename elfcpp::Chdr<size, big_endian> chdr(contents);
+ if (chdr.get_ch_type() != elfcpp::ELFCOMPRESS_ZLIB
+ || chdr.get_ch_size() != uncompressed_size
+ || (chdr.get_ch_addralign()
+ != shdr.get_sh_addralign()))
+ return uncompressed_map;
+ }
unsigned char* uncompressed_data = NULL;
- if (decompress_if_needed && need_decompressed_section(name))
+ if (decompress_if_needed
+ && (is_compressed
+ || need_decompressed_section(name)))
{
uncompressed_data = new unsigned char[uncompressed_size];
- if (decompress_input_section(contents, len,
+ if (decompress_input_section(contents + compression_header_size,
+ len - compression_header_size,
uncompressed_data,
uncompressed_size))
info.contents = uncompressed_data;
@@ -786,7 +819,8 @@ Sized_relobj_file<size, big_endian>::do_find_special_sections(
if (this->find_eh_frame(pshdrs, names, sd->section_names_size))
this->has_eh_frame_ = true;
- if (memmem(names, sd->section_names_size, ".zdebug_", 8) != NULL)
+ if (memmem(names, sd->section_names_size, ".zdebug_", 8) != NULL
+ || memmem(names, sd->section_names_size, ".debug_", 7) != NULL)
{
Compressed_section_map* compressed_sections =
build_compressed_section_map<size, big_endian>(
@@ -2889,9 +2923,22 @@ Object::decompressed_section_contents(
return p->second.contents;
}
+ int compression_header_size;
+ if ((p->second.flag & elfcpp::SHF_COMPRESSED) != 0)
+ {
+ const int size = parameters->target().get_size();
+ if (size == 32)
+ compression_header_size = elfcpp::Elf_sizes<32>::chdr_size;
+ else if (size == 64)
+ compression_header_size = elfcpp::Elf_sizes<64>::chdr_size;
+ else
+ gold_unreachable();
+ }
+ else
+ compression_header_size = 0;
unsigned char* uncompressed_data = new unsigned char[uncompressed_size];
- if (!decompress_input_section(buffer,
- buffer_size,
+ if (!decompress_input_section(buffer + compression_header_size,
+ buffer_size - compression_header_size,
uncompressed_data,
uncompressed_size))
this->error(_("could not decompress section %s"),
diff --git a/gold/object.h b/gold/object.h
index fc93abd..fc44e17 100644
--- a/gold/object.h
+++ b/gold/object.h
@@ -320,6 +320,7 @@ class Got_offset_list
struct Compressed_section_info
{
section_size_type size;
+ section_size_type flag;
const unsigned char* contents;
};
typedef std::map<unsigned int, Compressed_section_info> Compressed_section_map;
diff --git a/gold/reloc.cc b/gold/reloc.cc
index 910c4ee..bd91144 100644
--- a/gold/reloc.cc
+++ b/gold/reloc.cc
@@ -866,7 +866,14 @@ Sized_relobj_file<size, big_endian>::write_sections(const Layout* layout,
// Read and decompress the section.
section_size_type len;
const unsigned char* p = this->section_contents(i, &len, false);
- if (!decompress_input_section(p, len, view, view_size))
+ int compression_header_size;
+ if ((shdr.get_sh_flags() & elfcpp::SHF_COMPRESSED) != 0)
+ compression_header_size = elfcpp::Elf_sizes<size>::chdr_size;
+ else
+ compression_header_size = 0;
+ if (!decompress_input_section(p + compression_header_size,
+ len - compression_header_size,
+ view, view_size))
this->error(_("could not decompress section %s"),
this->section_name(i).c_str());
}
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index c57b2b3..fb1026c 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -1226,6 +1226,22 @@ debug_msg_cdebug.err: debug_msg_cdebug.o odr_violation1_cdebug.o odr_violation2_
rm -f $@; \
exit 1; \
fi
+check_DATA += debug_msg_cdebug_gabi.err
+MOSTLYCLEANFILES += debug_msg_cdebug_gabi.err
+debug_msg_cdebug_gabi.o: debug_msg.cc gcctestdir/as
+ $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/debug_msg.cc
+odr_violation1_cdebug_gabi.o: odr_violation1.cc gcctestdir/as
+ $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/odr_violation1.cc
+odr_violation2_cdebug_gabi.o: odr_violation2.cc gcctestdir/as
+ $(CXXCOMPILE) -Bgcctestdir/ -O2 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/odr_violation2.cc
+debug_msg_cdebug_gabi.err: debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o gcctestdir/ld
+ @echo $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o "2>$@"
+ @if $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug_gabi debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o 2>$@; \
+ then \
+ echo 1>&2 "Link of debug_msg_cdebug_gabi should have failed"; \
+ rm -f $@; \
+ exit 1; \
+ fi
# See if we can also detect problems when we're linking .so's, not .o's.
check_DATA += debug_msg_so.err
@@ -2366,6 +2382,15 @@ gdb_index_test_2: gdb_index_test_cdebug.o gcctestdir/ld
$(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
gdb_index_test_2.stdout: gdb_index_test_2
$(TEST_READELF) --debug-dump=gdb_index $< > $@
+check_SCRIPTS += gdb_index_test_2_gabi.sh
+check_DATA += gdb_index_test_2_gabi.stdout
+MOSTLYCLEANFILES += gdb_index_test_2.stdout gdb_index_test_2
+gdb_index_test_cdebug_gabi.o: gdb_index_test.cc
+ $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -o $@ $<
+gdb_index_test_2_gabi: gdb_index_test_cdebug_gabi.o gcctestdir/ld
+ $(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
+gdb_index_test_2_gabi.stdout: gdb_index_test_2_gabi
+ $(TEST_READELF) --debug-dump=gdb_index $< > $@
# Another simple C test (DW_AT_high_pc encoding) for --gdb-index.
check_SCRIPTS += gdb_index_test_3.sh
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 90c3054..e0046bc 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -266,6 +266,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ missing_key_func.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_cdebug.err \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_cdebug_gabi.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_so.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_ndebug.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ undef_symbol.err \
@@ -339,6 +340,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_36 = debug_msg.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ missing_key_func.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_cdebug.err \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_cdebug_gabi.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_so.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_ndebug.err \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ undef_symbol.err \
@@ -591,16 +593,20 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
# Test that --gdb-index functions correctly with gcc-generated pubnames.
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_65 = gdb_index_test_1.sh \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2.sh \
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2_gabi.sh \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_3.sh \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_4.sh
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_66 = gdb_index_test_1.stdout \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2.stdout \
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2_gabi.stdout \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_3.stdout \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_4.stdout
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_67 = gdb_index_test_1.stdout \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_1 \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2.stdout \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2 \
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2.stdout \
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2 \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_3.stdout \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_3 \
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_4.stdout \
@@ -4305,6 +4311,8 @@ gdb_index_test_1.sh.log: gdb_index_test_1.sh
@p='gdb_index_test_1.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
gdb_index_test_2.sh.log: gdb_index_test_2.sh
@p='gdb_index_test_2.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+gdb_index_test_2_gabi.sh.log: gdb_index_test_2_gabi.sh
+ @p='gdb_index_test_2_gabi.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
gdb_index_test_3.sh.log: gdb_index_test_3.sh
@p='gdb_index_test_3.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
gdb_index_test_4.sh.log: gdb_index_test_4.sh
@@ -5333,6 +5341,20 @@ uninstall-am:
@GCC_TRUE@@NATIVE_LINKER_TRUE@ rm -f $@; \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exit 1; \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ fi
+@GCC_TRUE@@NATIVE_LINKER_TRUE@debug_msg_cdebug_gabi.o: debug_msg.cc gcctestdir/as
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/debug_msg.cc
+@GCC_TRUE@@NATIVE_LINKER_TRUE@odr_violation1_cdebug_gabi.o: odr_violation1.cc gcctestdir/as
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/odr_violation1.cc
+@GCC_TRUE@@NATIVE_LINKER_TRUE@odr_violation2_cdebug_gabi.o: odr_violation2.cc gcctestdir/as
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -Bgcctestdir/ -O2 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/odr_violation2.cc
+@GCC_TRUE@@NATIVE_LINKER_TRUE@debug_msg_cdebug_gabi.err: debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o gcctestdir/ld
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ @echo $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o "2>$@"
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ @if $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug_gabi debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o 2>$@; \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ then \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ echo 1>&2 "Link of debug_msg_cdebug_gabi should have failed"; \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ rm -f $@; \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ exit 1; \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ fi
@GCC_TRUE@@NATIVE_LINKER_TRUE@debug_msg.so: debug_msg.cc gcctestdir/ld
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -shared -fPIC -w -o $@ $(srcdir)/debug_msg.cc
@GCC_TRUE@@NATIVE_LINKER_TRUE@odr_violation1.so: odr_violation1.cc gcctestdir/ld
@@ -5906,6 +5928,12 @@ uninstall-am:
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@gdb_index_test_2.stdout: gdb_index_test_2
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) --debug-dump=gdb_index $< > $@
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@gdb_index_test_cdebug_gabi.o: gdb_index_test.cc
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -o $@ $<
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@gdb_index_test_2_gabi: gdb_index_test_cdebug_gabi.o gcctestdir/ld
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@gdb_index_test_2_gabi.stdout: gdb_index_test_2_gabi
+@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) --debug-dump=gdb_index $< > $@
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@gdb_index_test_3.o: gdb_index_test_3.c
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -O0 -g -c -o $@ $<
@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@gdb_index_test_3: gdb_index_test_3.o gcctestdir/ld
diff --git a/gold/testsuite/gdb_index_test_2_gabi.sh b/gold/testsuite/gdb_index_test_2_gabi.sh
new file mode 100755
index 0000000..def9bea
--- /dev/null
+++ b/gold/testsuite/gdb_index_test_2_gabi.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# gdb_index_test_2gabi.sh -- a test case for the --gdb-index option.
+
+# Copyright (C) 2015 Free Software Foundation, Inc.
+# Written by Cary Coutant <ccoutant@google.com>.
+# Modified by H.J. Lu <hongjiu.lu@intel.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.
+
+exec ${srcdir}/gdb_index_test_comm.sh gdb_index_test_2_gabi.stdout
--
2.1.0