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.
This commit is contained in:
parent
15969b63f9
commit
e02a4046e0
2 changed files with 21 additions and 4 deletions
|
@ -1,3 +1,12 @@
|
|||
2014-12-16 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2014-12-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* aarch64.cc (AArch64_relocate_functions::maybe_apply_stub):
|
||||
|
|
|
@ -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_);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue