Add SHF_COMPRESSED section decompression to gold
This patch adds SHF_COMPRESSED section decompression to gold. PR gold/18321 * compressed_output.h (decompress_input_section): Add arguments for ELF class, big endian and sh_flags. * compressed_output.cc (decompress_input_section): Likewise. Support the SHF_COMPRESSED section. * dynobj.h (Dynobj): Add elfsize and is_big_endian member functions. * plugin.h (Pluginobj): Likewise. * layout.cc (Layout::get_output_section_flags): Also clear the SHF_COMPRESSED bit. * object.h (Compressed_section_info): Add flag to store sh_flags. (Object): Add pure virtual elfsize and is_big_endian member functions. * object.cc (need_decompressed_section): Don't skip the ".zdebug" prefix here. (build_compressed_section_map): Check SHF_COMPRESSED for uncompressed size. Store sh_flags in Compressed_section_info. Pass size, big_endian and sh_flags to decompress_input_section. Skip the ".debug"/".zdebug" prefix when passing section name to need_decompressed_section. (Sized_relobj_file<size, big_endian>::do_find_special_section): Don't check ".zdebug_*" sections. (Object::decompressed_section_contents): Pass ELF class, big endian and sh_flags to decompress_input_section. * reloc.cc (Sized_relobj_file<size, big_endian>::write_sections): Likewise. * 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.
This commit is contained in:
parent
8d6dbeb44c
commit
480586639d
12 changed files with 237 additions and 19 deletions
|
@ -1,3 +1,46 @@
|
|||
2015-07-12 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR gold/18321
|
||||
* compressed_output.h (decompress_input_section): Add arguments
|
||||
for ELF class, big endian and sh_flags.
|
||||
* compressed_output.cc (decompress_input_section): Likewise.
|
||||
Support the SHF_COMPRESSED section.
|
||||
* dynobj.h (Dynobj): Add elfsize and is_big_endian member
|
||||
functions.
|
||||
* plugin.h (Pluginobj): Likewise.
|
||||
* layout.cc (Layout::get_output_section_flags): Also clear the
|
||||
SHF_COMPRESSED bit.
|
||||
* object.h (Compressed_section_info): Add flag to store sh_flags.
|
||||
(Object): Add pure virtual elfsize and is_big_endian member
|
||||
functions.
|
||||
* object.cc (need_decompressed_section): Don't skip the ".zdebug"
|
||||
prefix here.
|
||||
(build_compressed_section_map): Check SHF_COMPRESSED for
|
||||
uncompressed size. Store sh_flags in Compressed_section_info.
|
||||
Pass size, big_endian and sh_flags to decompress_input_section.
|
||||
Skip the ".debug"/".zdebug" prefix when passing section name to
|
||||
need_decompressed_section.
|
||||
(Sized_relobj_file<size, big_endian>::do_find_special_section):
|
||||
Don't check ".zdebug_*" sections.
|
||||
(Object::decompressed_section_contents): Pass ELF class, big
|
||||
endian and sh_flags to decompress_input_section.
|
||||
* reloc.cc (Sized_relobj_file<size, big_endian>::write_sections):
|
||||
Likewise.
|
||||
* 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.
|
||||
|
||||
2015-07-09 Han Shen <shenhan@google.com>
|
||||
|
||||
Use "gold_info" instead of "gold_warning" for erratum fix.
|
||||
|
|
|
@ -143,8 +143,55 @@ bool
|
|||
decompress_input_section(const unsigned char* compressed_data,
|
||||
unsigned long compressed_size,
|
||||
unsigned char* uncompressed_data,
|
||||
unsigned long uncompressed_size)
|
||||
unsigned long uncompressed_size,
|
||||
int size,
|
||||
bool big_endian,
|
||||
elfcpp::Elf_Xword sh_flags)
|
||||
{
|
||||
if ((sh_flags & elfcpp::SHF_COMPRESSED) != 0)
|
||||
{
|
||||
unsigned int compression_header_size;
|
||||
if (size == 32)
|
||||
{
|
||||
compression_header_size = elfcpp::Elf_sizes<32>::chdr_size;
|
||||
if (big_endian)
|
||||
{
|
||||
elfcpp::Chdr<32, true> chdr(compressed_data);
|
||||
if (chdr.get_ch_type() != elfcpp::ELFCOMPRESS_ZLIB)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
elfcpp::Chdr<32, false> chdr(compressed_data);
|
||||
if (chdr.get_ch_type() != elfcpp::ELFCOMPRESS_ZLIB)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (size == 64)
|
||||
{
|
||||
compression_header_size = elfcpp::Elf_sizes<64>::chdr_size;
|
||||
if (big_endian)
|
||||
{
|
||||
elfcpp::Chdr<64, true> chdr(compressed_data);
|
||||
if (chdr.get_ch_type() != elfcpp::ELFCOMPRESS_ZLIB)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
elfcpp::Chdr<64, false> chdr(compressed_data);
|
||||
if (chdr.get_ch_type() != elfcpp::ELFCOMPRESS_ZLIB)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
gold_unreachable();
|
||||
|
||||
return zlib_decompress(compressed_data + compression_header_size,
|
||||
compressed_size - compression_header_size,
|
||||
uncompressed_data,
|
||||
uncompressed_size);
|
||||
}
|
||||
|
||||
const unsigned int zlib_header_size = 12;
|
||||
|
||||
/* Verify the compression header. Currently, we support only zlib
|
||||
|
|
|
@ -47,7 +47,7 @@ get_uncompressed_size(const unsigned char*, section_size_type);
|
|||
|
||||
extern bool
|
||||
decompress_input_section(const unsigned char*, unsigned long, unsigned char*,
|
||||
unsigned long);
|
||||
unsigned long, int, bool, elfcpp::Elf_Xword);
|
||||
|
||||
// This is used for a section whose data should be compressed. It is
|
||||
// a regular Output_section which computes its contents into a buffer
|
||||
|
|
|
@ -72,6 +72,16 @@ class Dynobj : public Object
|
|||
this->unknown_needed_ = set ? UNKNOWN_NEEDED_TRUE : UNKNOWN_NEEDED_FALSE;
|
||||
}
|
||||
|
||||
// Return the word size of the object file.
|
||||
int
|
||||
elfsize() const
|
||||
{ gold_unreachable(); }
|
||||
|
||||
// Return TRUE if this is a big-endian object file.
|
||||
bool
|
||||
is_big_endian() const
|
||||
{ gold_unreachable(); }
|
||||
|
||||
// Compute the ELF hash code for a string.
|
||||
static uint32_t
|
||||
elf_hash(const char*);
|
||||
|
|
|
@ -913,6 +913,7 @@ Layout::get_output_section_flags(elfcpp::Elf_Xword input_section_flags)
|
|||
// copied to the output section.
|
||||
input_section_flags &= ~ (elfcpp::SHF_INFO_LINK
|
||||
| elfcpp::SHF_GROUP
|
||||
| elfcpp::SHF_COMPRESSED
|
||||
| elfcpp::SHF_MERGE
|
||||
| elfcpp::SHF_STRINGS);
|
||||
|
||||
|
|
|
@ -663,14 +663,12 @@ Sized_relobj_file<size, big_endian>::find_eh_frame(
|
|||
|
||||
// Return TRUE if this is a section whose contents will be needed in the
|
||||
// Add_symbols task. This function is only called for sections that have
|
||||
// already passed the test in is_compressed_debug_section(), so we know
|
||||
// that the section name begins with ".zdebug".
|
||||
// already passed the test in is_compressed_debug_section() and the debug
|
||||
// section name prefix, ".debug"/".zdebug", has been skipped.
|
||||
|
||||
static bool
|
||||
need_decompressed_section(const char* name)
|
||||
{
|
||||
// Skip over the ".zdebug" and a quick check for the "_".
|
||||
name += 7;
|
||||
if (*name++ != '_')
|
||||
return false;
|
||||
|
||||
|
@ -741,14 +739,33 @@ build_compressed_section_map(
|
|||
}
|
||||
|
||||
const char* name = names + shdr.get_sh_name();
|
||||
if (is_compressed_debug_section(name))
|
||||
bool is_compressed = ((shdr.get_sh_flags()
|
||||
& elfcpp::SHF_COMPRESSED) != 0);
|
||||
bool is_zcompressed = (!is_compressed
|
||||
&& is_compressed_debug_section(name));
|
||||
|
||||
if (is_zcompressed || is_compressed)
|
||||
{
|
||||
section_size_type len;
|
||||
const unsigned char* contents =
|
||||
obj->section_contents(i, &len, false);
|
||||
uint64_t uncompressed_size = get_uncompressed_size(contents, len);
|
||||
uint64_t uncompressed_size;
|
||||
if (is_zcompressed)
|
||||
{
|
||||
// Skip over the ".zdebug" prefix.
|
||||
name += 7;
|
||||
uncompressed_size = get_uncompressed_size(contents, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Skip over the ".debug" prefix.
|
||||
name += 6;
|
||||
elfcpp::Chdr<size, big_endian> chdr(contents);
|
||||
uncompressed_size = chdr.get_ch_size();
|
||||
}
|
||||
Compressed_section_info info;
|
||||
info.size = convert_to_section_size_type(uncompressed_size);
|
||||
info.flag = shdr.get_sh_flags();
|
||||
info.contents = NULL;
|
||||
if (uncompressed_size != -1ULL)
|
||||
{
|
||||
|
@ -758,7 +775,9 @@ build_compressed_section_map(
|
|||
uncompressed_data = new unsigned char[uncompressed_size];
|
||||
if (decompress_input_section(contents, len,
|
||||
uncompressed_data,
|
||||
uncompressed_size))
|
||||
uncompressed_size,
|
||||
size, big_endian,
|
||||
shdr.get_sh_flags()))
|
||||
info.contents = uncompressed_data;
|
||||
else
|
||||
delete[] uncompressed_data;
|
||||
|
@ -786,14 +805,11 @@ 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)
|
||||
{
|
||||
Compressed_section_map* compressed_sections =
|
||||
build_compressed_section_map<size, big_endian>(
|
||||
pshdrs, this->shnum(), names, sd->section_names_size, this, true);
|
||||
if (compressed_sections != NULL)
|
||||
this->set_compressed_sections(compressed_sections);
|
||||
}
|
||||
Compressed_section_map* compressed_sections =
|
||||
build_compressed_section_map<size, big_endian>(
|
||||
pshdrs, this->shnum(), names, sd->section_names_size, this, true);
|
||||
if (compressed_sections != NULL)
|
||||
this->set_compressed_sections(compressed_sections);
|
||||
|
||||
return (this->has_eh_frame_
|
||||
|| (!parameters->options().relocatable()
|
||||
|
@ -2899,7 +2915,10 @@ Object::decompressed_section_contents(
|
|||
if (!decompress_input_section(buffer,
|
||||
buffer_size,
|
||||
uncompressed_data,
|
||||
uncompressed_size))
|
||||
uncompressed_size,
|
||||
elfsize(),
|
||||
is_big_endian(),
|
||||
p->second.flag))
|
||||
this->error(_("could not decompress section %s"),
|
||||
this->do_section_name(shndx).c_str());
|
||||
|
||||
|
|
|
@ -320,6 +320,7 @@ class Got_offset_list
|
|||
struct Compressed_section_info
|
||||
{
|
||||
section_size_type size;
|
||||
elfcpp::Elf_Xword flag;
|
||||
const unsigned char* contents;
|
||||
};
|
||||
typedef std::map<unsigned int, Compressed_section_info> Compressed_section_map;
|
||||
|
@ -380,6 +381,12 @@ class Object
|
|||
is_dynamic() const
|
||||
{ return this->is_dynamic_; }
|
||||
|
||||
// Return the word size of the object file.
|
||||
virtual int elfsize() const = 0;
|
||||
|
||||
// Return TRUE if this is a big-endian object file.
|
||||
virtual bool is_big_endian() const = 0;
|
||||
|
||||
// Return whether this object is needed--true if it is a dynamic
|
||||
// object which defines some symbol referenced by a regular object.
|
||||
// We keep the flag here rather than in Dynobj for convenience when
|
||||
|
|
|
@ -433,6 +433,16 @@ class Pluginobj : public Object
|
|||
filesize()
|
||||
{ return this->filesize_; }
|
||||
|
||||
// Return the word size of the object file.
|
||||
int
|
||||
elfsize() const
|
||||
{ gold_unreachable(); }
|
||||
|
||||
// Return TRUE if this is a big-endian object file.
|
||||
bool
|
||||
is_big_endian() const
|
||||
{ gold_unreachable(); }
|
||||
|
||||
protected:
|
||||
// Return TRUE if this is an object claimed by a plugin.
|
||||
virtual Pluginobj*
|
||||
|
|
|
@ -866,7 +866,9 @@ 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))
|
||||
if (!decompress_input_section(p, len, view, view_size,
|
||||
size, big_endian,
|
||||
shdr.get_sh_flags()))
|
||||
this->error(_("could not decompress section %s"),
|
||||
this->section_name(i).c_str());
|
||||
}
|
||||
|
|
|
@ -1239,6 +1239,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
|
||||
|
@ -2400,6 +2416,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
|
||||
|
|
|
@ -274,6 +274,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 \
|
||||
|
@ -347,6 +348,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 \
|
||||
|
@ -599,16 +601,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 \
|
||||
|
@ -4412,6 +4418,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
|
||||
|
@ -5456,6 +5464,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
|
||||
|
@ -6043,6 +6065,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
|
||||
|
|
26
gold/testsuite/gdb_index_test_2_gabi.sh
Executable file
26
gold/testsuite/gdb_index_test_2_gabi.sh
Executable file
|
@ -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
|
Loading…
Reference in a new issue