diff options
author | Cary Coutant <ccoutant@google.com> | 2014-12-16 14:57:17 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2014-12-16 14:58:15 -0800 |
commit | e02a4046e0617f3e2c1b811a1888db3fa998dfa4 (patch) | |
tree | c445e4ffc70e26081c00c06fad580b1ba5f89516 /gold/mapfile.cc | |
parent | 15969b63f98e669afd097a1878b191a01bf95d82 (diff) | |
download | gdb-e02a4046e0617f3e2c1b811a1888db3fa998dfa4.zip gdb-e02a4046e0617f3e2c1b811a1888db3fa998dfa4.tar.gz gdb-e02a4046e0617f3e2c1b811a1888db3fa998dfa4.tar.bz2 |
Fix internal error in gold when -Map and --compress-debug-sections are used
together.
gold/
* mapfile.cc (Mapfile::print_input_section): Print uncompressed sizes.
(Mapfile::print_output_data): Use current_data_size() to avoid
assert for sections requiring postprocessing; if address is not valid,
print 0.
(Mapfile::print_output_section): Use current_data_size(); print note
that addresses and sizes are before compression.
Diffstat (limited to 'gold/mapfile.cc')
-rw-r--r-- | gold/mapfile.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gold/mapfile.cc b/gold/mapfile.cc index dc995e9..c6d7ed2 100644 --- a/gold/mapfile.cc +++ b/gold/mapfile.cc @@ -258,8 +258,11 @@ Mapfile::print_input_section(Relobj* relobj, unsigned int shndx) } char sizebuf[50]; + section_size_type size; + if (!relobj->section_is_compressed(shndx, &size)) + size = relobj->section_size(shndx); snprintf(sizebuf, sizeof sizebuf, "0x%llx", - static_cast<unsigned long long>(relobj->section_size(shndx))); + static_cast<unsigned long long>(size)); fprintf(this->map_file_, "0x%0*llx %10s %s\n", parameters->target().get_size() / 4, @@ -328,11 +331,13 @@ Mapfile::print_output_data(const Output_data* od, const char* name) char sizebuf[50]; snprintf(sizebuf, sizeof sizebuf, "0x%llx", - static_cast<unsigned long long>(od->data_size())); + static_cast<unsigned long long>(od->current_data_size())); fprintf(this->map_file_, "0x%0*llx %10s\n", parameters->target().get_size() / 4, - static_cast<unsigned long long>(od->address()), + (od->is_address_valid() + ? static_cast<unsigned long long>(od->address()) + : 0), sizebuf); } @@ -387,7 +392,7 @@ Mapfile::print_output_section(const Output_section* os) char sizebuf[50]; snprintf(sizebuf, sizeof sizebuf, "0x%llx", - static_cast<unsigned long long>(os->data_size())); + static_cast<unsigned long long>(os->current_data_size())); fprintf(this->map_file_, "0x%0*llx %10s", parameters->target().get_size() / 4, @@ -398,6 +403,9 @@ Mapfile::print_output_section(const Output_section* os) parameters->target().get_size() / 4, static_cast<unsigned long long>(os->load_address())); + if (os->requires_postprocessing()) + fprintf(this->map_file_, " (before compression)"); + putc('\n', this->map_file_); } |