mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
Correct handling of non-section symbol in merged section. Avoid some
64-bit signed/unsigned warnings.
This commit is contained in:
@ -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));
|
section_size_type psize = File_read::pages(size + (start - poff));
|
||||||
|
|
||||||
if (poff + psize >= this->size_)
|
if (poff + static_cast<off_t>(psize) >= this->size_)
|
||||||
{
|
{
|
||||||
psize = this->size_ - poff;
|
psize = this->size_ - poff;
|
||||||
gold_assert(psize >= size);
|
gold_assert(psize >= size);
|
||||||
|
@ -896,12 +896,13 @@ Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
|
|||||||
// value. If it is a section symbol, we can not, as in
|
// value. If it is a section symbol, we can not, as in
|
||||||
// that case we have to consider the addend to determine
|
// that case we have to consider the addend to determine
|
||||||
// the value to use in a relocation.
|
// the value to use in a relocation.
|
||||||
section_offset_type start =
|
|
||||||
os->starting_output_address(this, shndx);
|
|
||||||
if (!lv.is_section_symbol())
|
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
|
else
|
||||||
{
|
{
|
||||||
|
section_offset_type start =
|
||||||
|
os->starting_output_address(this, shndx);
|
||||||
Merged_symbol_value<size>* msv =
|
Merged_symbol_value<size>* msv =
|
||||||
new Merged_symbol_value<size>(lv.input_value(), start);
|
new Merged_symbol_value<size>(lv.input_value(), start);
|
||||||
lv.set_merged_symbol_value(msv);
|
lv.set_merged_symbol_value(msv);
|
||||||
|
@ -1695,8 +1695,6 @@ Output_section::output_address(const Relobj* object, unsigned int shndx,
|
|||||||
off_t offset) const
|
off_t offset) const
|
||||||
{
|
{
|
||||||
gold_assert(object->is_section_specially_mapped(shndx));
|
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_;
|
uint64_t addr = this->address() + this->first_input_offset_;
|
||||||
for (Input_section_list::const_iterator p = this->input_sections_.begin();
|
for (Input_section_list::const_iterator p = this->input_sections_.begin();
|
||||||
|
@ -2323,7 +2323,8 @@ class Output_file
|
|||||||
unsigned char*
|
unsigned char*
|
||||||
get_output_view(off_t start, size_t size)
|
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<off_t>(size) <= this->file_size_);
|
||||||
return this->base_ + start;
|
return this->base_ + start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,7 +459,8 @@ Sized_relobj<size, big_endian>::write_sections(const unsigned char* pshdrs,
|
|||||||
|
|
||||||
gold_assert(output_offset == -1
|
gold_assert(output_offset == -1
|
||||||
|| (output_offset >= 0
|
|| (output_offset >= 0
|
||||||
&& output_offset + view_size <= output_section_size));
|
&& (output_offset + static_cast<off_t>(view_size)
|
||||||
|
<= output_section_size)));
|
||||||
|
|
||||||
unsigned char* view;
|
unsigned char* view;
|
||||||
if (os->requires_postprocessing())
|
if (os->requires_postprocessing())
|
||||||
|
Reference in New Issue
Block a user