From 8d32f93595f28c70f21566384ca1dc8a441297b9 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 21 Dec 2007 23:08:25 +0000 Subject: [PATCH] Correct handling of non-section symbol in merged section. Avoid some 64-bit signed/unsigned warnings. --- gold/fileread.cc | 2 +- gold/object.cc | 7 ++++--- gold/output.cc | 2 -- gold/output.h | 3 ++- gold/reloc.cc | 3 ++- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/gold/fileread.cc b/gold/fileread.cc index baa681a24c0..defb3a02560 100644 --- a/gold/fileread.cc +++ b/gold/fileread.cc @@ -288,7 +288,7 @@ File_read::find_or_make_view(off_t start, section_size_type size, bool cache) section_size_type psize = File_read::pages(size + (start - poff)); - if (poff + psize >= this->size_) + if (poff + static_cast(psize) >= this->size_) { psize = this->size_ - poff; gold_assert(psize >= size); diff --git a/gold/object.cc b/gold/object.cc index e92a66d2e49..1a0d0647eba 100644 --- a/gold/object.cc +++ b/gold/object.cc @@ -896,12 +896,13 @@ Sized_relobj::do_finalize_local_symbols(unsigned int index, // value. If it is a section symbol, we can not, as in // that case we have to consider the addend to determine // the value to use in a relocation. - section_offset_type start = - os->starting_output_address(this, shndx); if (!lv.is_section_symbol()) - lv.set_output_value(lv.input_value() + start); + lv.set_output_value(os->output_address(this, shndx, + lv.input_value())); else { + section_offset_type start = + os->starting_output_address(this, shndx); Merged_symbol_value* msv = new Merged_symbol_value(lv.input_value(), start); lv.set_merged_symbol_value(msv); diff --git a/gold/output.cc b/gold/output.cc index 3d1d27e644a..8a9e9b3eec7 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -1695,8 +1695,6 @@ Output_section::output_address(const Relobj* object, unsigned int shndx, off_t offset) const { gold_assert(object->is_section_specially_mapped(shndx)); - // This can only be called meaningfully when layout is complete. - gold_assert(Output_data::is_layout_complete()); uint64_t addr = this->address() + this->first_input_offset_; for (Input_section_list::const_iterator p = this->input_sections_.begin(); diff --git a/gold/output.h b/gold/output.h index 3d1a44d9d54..07a336dcd53 100644 --- a/gold/output.h +++ b/gold/output.h @@ -2323,7 +2323,8 @@ class Output_file unsigned char* get_output_view(off_t start, size_t size) { - gold_assert(start >= 0 && start + size <= this->file_size_); + gold_assert(start >= 0 + && start + static_cast(size) <= this->file_size_); return this->base_ + start; } diff --git a/gold/reloc.cc b/gold/reloc.cc index e9c13266549..f88151fb0ec 100644 --- a/gold/reloc.cc +++ b/gold/reloc.cc @@ -459,7 +459,8 @@ Sized_relobj::write_sections(const unsigned char* pshdrs, gold_assert(output_offset == -1 || (output_offset >= 0 - && output_offset + view_size <= output_section_size)); + && (output_offset + static_cast(view_size) + <= output_section_size))); unsigned char* view; if (os->requires_postprocessing()) -- 2.30.2