mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
Make linker-created symbols relocatable where appropriate.
Linker-created symbols like __ehdr_start, __etext, __edata, and end should be relocatable, not absolute. gold/ * output.cc (Output_segment::first_section): Return NULL if there are no sections in the segment. * output.h (Output_segment::first_section_load_address): Assert that first section is not NULL. * symtab.cc (Symbol_table::sized_write_globals): Attach linker-created segment-relative symbols to first section of the segment.
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
2016-12-21 Cary Coutant <ccoutant@gmail.com>
|
||||||
|
|
||||||
|
* output.cc (Output_segment::first_section): Return NULL if there are
|
||||||
|
no sections in the segment.
|
||||||
|
* output.h (Output_segment::first_section_load_address): Assert that
|
||||||
|
first section is not NULL.
|
||||||
|
* symtab.cc (Symbol_table::sized_write_globals): Attach linker-created
|
||||||
|
segment-relative symbols to first section of the segment.
|
||||||
|
|
||||||
2016-12-21 Alan Modra <amodra@gmail.com>
|
2016-12-21 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* arm.cc: Fix comment chars with high bit set.
|
* arm.cc: Fix comment chars with high bit set.
|
||||||
|
@ -4801,7 +4801,7 @@ Output_segment::first_section() const
|
|||||||
return (*p)->output_section();
|
return (*p)->output_section();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gold_unreachable();
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the number of Output_sections in an Output_segment.
|
// Return the number of Output_sections in an Output_segment.
|
||||||
|
@ -4741,6 +4741,7 @@ class Output_segment
|
|||||||
first_section_load_address() const
|
first_section_load_address() const
|
||||||
{
|
{
|
||||||
const Output_section* os = this->first_section();
|
const Output_section* os = this->first_section();
|
||||||
|
gold_assert(os != NULL);
|
||||||
return os->has_load_address() ? os->load_address() : os->address();
|
return os->has_load_address() ? os->load_address() : os->address();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3120,7 +3120,14 @@ Symbol_table::sized_write_globals(const Stringpool* sympool,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case Symbol::IN_OUTPUT_SEGMENT:
|
case Symbol::IN_OUTPUT_SEGMENT:
|
||||||
shndx = elfcpp::SHN_ABS;
|
{
|
||||||
|
Output_segment* oseg = sym->output_segment();
|
||||||
|
Output_section* osect = oseg->first_section();
|
||||||
|
if (osect == NULL)
|
||||||
|
shndx = elfcpp::SHN_ABS;
|
||||||
|
else
|
||||||
|
shndx = osect->out_shndx();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Symbol::IS_CONSTANT:
|
case Symbol::IS_CONSTANT:
|
||||||
|
Reference in New Issue
Block a user