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:
Cary Coutant 2016-12-21 16:21:23 -08:00
parent 514b85276b
commit eb3908448b
4 changed files with 19 additions and 2 deletions

View File

@ -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>
* arm.cc: Fix comment chars with high bit set.

View File

@ -4801,7 +4801,7 @@ Output_segment::first_section() const
return (*p)->output_section();
}
}
gold_unreachable();
return NULL;
}
// Return the number of Output_sections in an Output_segment.

View File

@ -4741,6 +4741,7 @@ class Output_segment
first_section_load_address() const
{
const Output_section* os = this->first_section();
gold_assert(os != NULL);
return os->has_load_address() ? os->load_address() : os->address();
}

View File

@ -3120,7 +3120,14 @@ Symbol_table::sized_write_globals(const Stringpool* sympool,
break;
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;
case Symbol::IS_CONSTANT: