* compressed_output.h (class Output_compressed_section): Use
unsigned buffer. * compressed_output.cc (zlib_compress): Use unsigned buffers, add zlib header. (zlib_compressed_suffix): Removed. (Output_compressed_section::set_final_data_size): Use unsigned buffers. * testsuite/Makefile.am (flagstest_compress_debug_sections): Fix linker invocation. (flagstest_o_specialfile_and_compress_debug_sections): Likewise. * testsuite/Makefile.in: Regenerated.
This commit is contained in:
parent
c0f3af977b
commit
126f3ece27
@ -1,3 +1,18 @@
|
|||||||
|
2008-04-03 Craig Silverstein <csilvers@google.com>
|
||||||
|
|
||||||
|
* compressed_output.h (class Output_compressed_section): Use
|
||||||
|
unsigned buffer.
|
||||||
|
* compressed_output.cc (zlib_compress): Use unsigned buffers,
|
||||||
|
add zlib header.
|
||||||
|
(zlib_compressed_suffix): Removed.
|
||||||
|
(Output_compressed_section::set_final_data_size): Use unsigned
|
||||||
|
buffers.
|
||||||
|
* testsuite/Makefile.am (flagstest_compress_debug_sections):
|
||||||
|
Fix linker invocation.
|
||||||
|
(flagstest_o_specialfile_and_compress_debug_sections):
|
||||||
|
Likewise.
|
||||||
|
* testsuite/Makefile.in: Regenerated.
|
||||||
|
|
||||||
2008-04-02 David S. Miller <davem@davemloft.net>
|
2008-04-02 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
* dwarf_reader.cc (Sized_dwarf_line_info::read_header_prolog,
|
* dwarf_reader.cc (Sized_dwarf_line_info::read_header_prolog,
|
||||||
|
@ -50,7 +50,7 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \
|
|||||||
$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
|
$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
|
||||||
$(srcdir)/Makefile.in $(srcdir)/config.in \
|
$(srcdir)/Makefile.in $(srcdir)/config.in \
|
||||||
$(top_srcdir)/configure $(top_srcdir)/po/Make-in ChangeLog \
|
$(top_srcdir)/configure $(top_srcdir)/po/Make-in ChangeLog \
|
||||||
NEWS pread.c yyscript.c yyscript.h
|
NEWS TODO pread.c yyscript.c yyscript.h
|
||||||
subdir = .
|
subdir = .
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
|
am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
|
||||||
|
@ -38,15 +38,21 @@ namespace gold
|
|||||||
// (including not having zlib support in the library). If it returns
|
// (including not having zlib support in the library). If it returns
|
||||||
// true, it allocates memory for the compressed data using new, and
|
// true, it allocates memory for the compressed data using new, and
|
||||||
// sets *COMPRESSED_DATA and *COMPRESSED_SIZE to appropriate values.
|
// sets *COMPRESSED_DATA and *COMPRESSED_SIZE to appropriate values.
|
||||||
|
// It also writes a header before COMPRESSED_DATA: 4 bytes saying
|
||||||
|
// "ZLIB", and 8 bytes indicating the uncompressed size, in big-endian
|
||||||
|
// order.
|
||||||
|
|
||||||
#ifdef HAVE_ZLIB_H
|
#ifdef HAVE_ZLIB_H
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
zlib_compress(const char* uncompressed_data, unsigned long uncompressed_size,
|
zlib_compress(const unsigned char* uncompressed_data,
|
||||||
char** compressed_data, unsigned long* compressed_size)
|
unsigned long uncompressed_size,
|
||||||
|
unsigned char** compressed_data,
|
||||||
|
unsigned long* compressed_size)
|
||||||
{
|
{
|
||||||
|
const int header_size = 12;
|
||||||
*compressed_size = uncompressed_size + uncompressed_size / 1000 + 128;
|
*compressed_size = uncompressed_size + uncompressed_size / 1000 + 128;
|
||||||
*compressed_data = new char[*compressed_size];
|
*compressed_data = new unsigned char[*compressed_size + header_size];
|
||||||
|
|
||||||
int compress_level;
|
int compress_level;
|
||||||
if (parameters->options().optimize() >= 1)
|
if (parameters->options().optimize() >= 1)
|
||||||
@ -54,13 +60,19 @@ zlib_compress(const char* uncompressed_data, unsigned long uncompressed_size,
|
|||||||
else
|
else
|
||||||
compress_level = 1;
|
compress_level = 1;
|
||||||
|
|
||||||
int rc = compress2(reinterpret_cast<Bytef*>(*compressed_data),
|
int rc = compress2(reinterpret_cast<Bytef*>(*compressed_data) + header_size,
|
||||||
compressed_size,
|
compressed_size,
|
||||||
reinterpret_cast<const Bytef*>(uncompressed_data),
|
reinterpret_cast<const Bytef*>(uncompressed_data),
|
||||||
uncompressed_size,
|
uncompressed_size,
|
||||||
compress_level);
|
compress_level);
|
||||||
if (rc == Z_OK)
|
if (rc == Z_OK)
|
||||||
return true;
|
{
|
||||||
|
memcpy(*compressed_data, "ZLIB", 4);
|
||||||
|
elfcpp::Swap_unaligned<64, true>::writeval(*compressed_data + 4,
|
||||||
|
uncompressed_size);
|
||||||
|
*compressed_size += header_size;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
delete[] *compressed_data;
|
delete[] *compressed_data;
|
||||||
@ -72,24 +84,14 @@ zlib_compress(const char* uncompressed_data, unsigned long uncompressed_size,
|
|||||||
#else // !defined(HAVE_ZLIB_H)
|
#else // !defined(HAVE_ZLIB_H)
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
zlib_compress(const char*, unsigned long, char**, unsigned long*)
|
zlib_compress(const unsigned char*, unsigned long,
|
||||||
|
unsigned char**, unsigned long*)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !defined(HAVE_ZLIB_H)
|
#endif // !defined(HAVE_ZLIB_H)
|
||||||
|
|
||||||
// After compressing an output section, we rename it from foo to
|
|
||||||
// foo.zlib.nnnn, where nnnn is the uncompressed size of the section.
|
|
||||||
|
|
||||||
static std::string
|
|
||||||
zlib_compressed_suffix(unsigned long uncompressed_size)
|
|
||||||
{
|
|
||||||
char size_string[64];
|
|
||||||
snprintf(size_string, sizeof(size_string), "%lu", uncompressed_size);
|
|
||||||
return std::string(".zlib.") + size_string;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Class Output_compressed_section.
|
// Class Output_compressed_section.
|
||||||
|
|
||||||
// Set the final data size of a compressed section. This is where
|
// Set the final data size of a compressed section. This is where
|
||||||
@ -102,8 +104,7 @@ Output_compressed_section::set_final_data_size()
|
|||||||
|
|
||||||
// (Try to) compress the data.
|
// (Try to) compress the data.
|
||||||
unsigned long compressed_size;
|
unsigned long compressed_size;
|
||||||
unsigned char* u_uncompressed_data = this->postprocessing_buffer();
|
unsigned char* uncompressed_data = this->postprocessing_buffer();
|
||||||
char* uncompressed_data = reinterpret_cast<char*>(u_uncompressed_data);
|
|
||||||
|
|
||||||
// At this point the contents of all regular input sections will
|
// At this point the contents of all regular input sections will
|
||||||
// have been copied into the postprocessing buffer, and relocations
|
// have been copied into the postprocessing buffer, and relocations
|
||||||
@ -117,8 +118,8 @@ Output_compressed_section::set_final_data_size()
|
|||||||
&this->data_, &compressed_size);
|
&this->data_, &compressed_size);
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
std::string suffix(zlib_compressed_suffix(uncompressed_size));
|
// This converts .debug_foo to .zdebug_foo
|
||||||
this->new_section_name_ = std::string(this->name()) + suffix;
|
this->new_section_name_ = std::string(".z") + (this->name() + 1);
|
||||||
this->set_name(this->new_section_name_.c_str());
|
this->set_name(this->new_section_name_.c_str());
|
||||||
this->set_data_size(compressed_size);
|
this->set_data_size(compressed_size);
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ class Output_compressed_section : public Output_section
|
|||||||
// The options--this includes the compression type.
|
// The options--this includes the compression type.
|
||||||
const General_options* options_;
|
const General_options* options_;
|
||||||
// The compressed data.
|
// The compressed data.
|
||||||
char* data_;
|
unsigned char* data_;
|
||||||
// The new section name if we do compress.
|
// The new section name if we do compress.
|
||||||
std::string new_section_name_;
|
std::string new_section_name_;
|
||||||
};
|
};
|
||||||
|
@ -507,7 +507,7 @@ undef_symbol.err: undef_symbol_main.o undef_symbol.so gcctestdir/ld
|
|||||||
# Test --compress-debug-sections. FIXME: check we actually compress.
|
# Test --compress-debug-sections. FIXME: check we actually compress.
|
||||||
check_PROGRAMS += flagstest_compress_debug_sections
|
check_PROGRAMS += flagstest_compress_debug_sections
|
||||||
flagstest_compress_debug_sections: flagstest_debug.o gcctestdir/ld
|
flagstest_compress_debug_sections: flagstest_debug.o gcctestdir/ld
|
||||||
$(CXXLINK) -Bgcctestdir/ -o $@ $< --compress-debug-sections=zlib
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,--compress-debug-sections=zlib
|
||||||
test -s $@
|
test -s $@
|
||||||
|
|
||||||
|
|
||||||
@ -523,7 +523,7 @@ flagstest_o_specialfile: flagstest_debug.o gcctestdir/ld
|
|||||||
check_PROGRAMS += flagstest_o_specialfile_and_compress_debug_sections
|
check_PROGRAMS += flagstest_o_specialfile_and_compress_debug_sections
|
||||||
flagstest_o_specialfile_and_compress_debug_sections: flagstest_debug.o \
|
flagstest_o_specialfile_and_compress_debug_sections: flagstest_debug.o \
|
||||||
gcctestdir/ld
|
gcctestdir/ld
|
||||||
$(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< --compress-debug-sections=zlib 2>&1 | cat > $@
|
$(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< -Wl,--compress-debug-sections=zlib 2>&1 | cat > $@
|
||||||
chmod a+x $@
|
chmod a+x $@
|
||||||
test -s $@
|
test -s $@
|
||||||
|
|
||||||
|
@ -1813,7 +1813,7 @@ uninstall-am: uninstall-info-am
|
|||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exit 1; \
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exit 1; \
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ fi
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ fi
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_compress_debug_sections: flagstest_debug.o gcctestdir/ld
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_compress_debug_sections: flagstest_debug.o gcctestdir/ld
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -o $@ $< --compress-debug-sections=zlib
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,--compress-debug-sections=zlib
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ test -s $@
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ test -s $@
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_o_specialfile: flagstest_debug.o gcctestdir/ld
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_o_specialfile: flagstest_debug.o gcctestdir/ld
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< 2>&1 | cat > $@
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< 2>&1 | cat > $@
|
||||||
@ -1821,7 +1821,7 @@ uninstall-am: uninstall-info-am
|
|||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ test -s $@
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ test -s $@
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_o_specialfile_and_compress_debug_sections: flagstest_debug.o \
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_o_specialfile_and_compress_debug_sections: flagstest_debug.o \
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< --compress-debug-sections=zlib 2>&1 | cat > $@
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< -Wl,--compress-debug-sections=zlib 2>&1 | cat > $@
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ chmod a+x $@
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ chmod a+x $@
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ test -s $@
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ test -s $@
|
||||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_1.so: ver_test_1.o ver_test_2.so ver_test_3.o ver_test_4.so gcctestdir/ld
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_1.so: ver_test_1.o ver_test_2.so ver_test_3.o ver_test_4.so gcctestdir/ld
|
||||||
|
Loading…
Reference in New Issue
Block a user