Group text sections with prefixes .text.unlikely,.text.hot and .text.startup

by default.


2012-12-18  Sriraman Tallam  <tmsriram@google.com>

	* layout.cc (Layout::is_section_name_prefix_grouped): New function.
	* layout.h (Layout::is_section_name_prefix_grouped): New function.
	* output.cc (Output_section::add_input_section): Check if section
	name contains special prefix.  Keep input sections to sort such
	sections.
	(Output_section::Input_section_sort_section_order_index_compare
	 ::operator()): Group sections according to prefixes.
	* (Output_section::sort_attached_input_sections): Add condition
	to Input_section_entry constructor call.
	* testsuite/Makefile.am (text_section_grouping): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/text_section_grouping.cc: New file.
	* testsuite/text_section_grouping.sh: New file.
This commit is contained in:
Sriraman Tallam
2012-12-19 02:55:15 +00:00
parent e0e51b2391
commit 28f2a4ac6f
8 changed files with 265 additions and 7 deletions

View File

@@ -2409,6 +2409,20 @@ Layout::relaxation_loop_body(
return off;
}
// By default, gold groups input sections with certain prefixes. This
// function returns true if this section name NAME contains such a prefix.
bool
Layout::is_section_name_prefix_grouped(const char *name)
{
if (is_prefix_of(".text.unlikely", name)
|| is_prefix_of(".text.startup", name)
|| is_prefix_of(".text.hot", name))
return true;
return false;
}
// Search the list of patterns and find the postion of the given section
// name in the output section. If the section name matches a glob
// pattern and a non-glob name, then the non-glob position takes