summaryrefslogtreecommitdiffstats
path: root/binutils-2.25/gold/object.cc
diff options
context:
space:
mode:
Diffstat (limited to 'binutils-2.25/gold/object.cc')
-rw-r--r--binutils-2.25/gold/object.cc31
1 files changed, 17 insertions, 14 deletions
diff --git a/binutils-2.25/gold/object.cc b/binutils-2.25/gold/object.cc
index c90b67e8..56d22663 100644
--- a/binutils-2.25/gold/object.cc
+++ b/binutils-2.25/gold/object.cc
@@ -1,6 +1,6 @@
// object.cc -- support for an object file for linking in gold
-// Copyright (C) 2006-2015 Free Software Foundation, Inc.
+// Copyright (C) 2006-2014 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
@@ -432,8 +432,7 @@ Sized_relobj_file<size, big_endian>::Sized_relobj_file(
discarded_eh_frame_shndx_(-1U),
is_deferred_layout_(false),
deferred_layout_(),
- deferred_layout_relocs_(),
- compressed_sections_()
+ deferred_layout_relocs_()
{
this->e_type_ = ehdr.get_e_type();
}
@@ -675,7 +674,8 @@ build_compressed_section_map(
unsigned int shnum,
const char* names,
section_size_type names_size,
- Sized_relobj_file<size, big_endian>* obj)
+ Object* obj,
+ bool decompress_if_needed)
{
Compressed_section_map* uncompressed_map = new Compressed_section_map();
const unsigned int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
@@ -707,7 +707,7 @@ build_compressed_section_map(
if (uncompressed_size != -1ULL)
{
unsigned char* uncompressed_data = NULL;
- if (need_decompressed_section(name))
+ if (decompress_if_needed && need_decompressed_section(name))
{
uncompressed_data = new unsigned char[uncompressed_size];
if (decompress_input_section(contents, len,
@@ -741,9 +741,14 @@ Sized_relobj_file<size, big_endian>::do_find_special_sections(
this->has_eh_frame_ = true;
if (memmem(names, sd->section_names_size, ".zdebug_", 8) != NULL)
- this->compressed_sections_
- = build_compressed_section_map(pshdrs, this->shnum(), names,
- sd->section_names_size, this);
+ {
+ 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()
&& parameters->options().gdb_index()
@@ -1666,8 +1671,8 @@ Sized_relobj_file<size, big_endian>::do_layout(Symbol_table* symtab,
// is turned on this function is called twice; we only want to do this
// on the first pass.
if (!is_pass_two
- && this->is_deferred_layout()
- && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC))
+ && this->is_deferred_layout()
+ && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC))
{
this->deferred_layout_.push_back(Deferred_layout(i, name,
pshdrs,
@@ -2804,9 +2809,8 @@ Sized_relobj_file<size, big_endian>::do_get_global_symbol_counts(
// to the size. Set *IS_NEW to true if the contents need to be freed
// by the caller.
-template<int size, bool big_endian>
const unsigned char*
-Sized_relobj_file<size, big_endian>::do_decompressed_section_contents(
+Object::decompressed_section_contents(
unsigned int shndx,
section_size_type* plen,
bool* is_new)
@@ -2860,9 +2864,8 @@ Sized_relobj_file<size, big_endian>::do_decompressed_section_contents(
// Discard any buffers of uncompressed sections. This is done
// at the end of the Add_symbols task.
-template<int size, bool big_endian>
void
-Sized_relobj_file<size, big_endian>::do_discard_decompressed_sections()
+Object::discard_decompressed_sections()
{
if (this->compressed_sections_ == NULL)
return;