gold patch committed: Put .ctors in .init_array

Ian Lance Taylor iant@google.com
Thu Jun 23 00:46:00 GMT 2011


This patch to gold changes it to put .ctors in .init_array (and .dtors
in .fini_array) by default.  This is what GNU ld now does for most ELF
targets.  The resulting code is marginally more efficient.  It also
means that no crtbegin and crtend files are required.  Because it is
possible that not all operating systems support DT_INIT_ARRAY, I made
this optional, controlled by the new --ctors-in-init-array option.  The
new option defaults to true.  Committed to mainline.

Ian


2011-06-22  Ian Lance Taylor  <iant@google.com>

	PR gold/12910
	* options.h (class General_options): Add --ctors-in-init-array.
	* layout.cc (Layout::get_output_section): Treat SHT_INIT_ARRAY and
	friends as SHT_PROGBITS for merging sections.
	(Layout::layout): Remove special handling of .init_array and
	friends.  Don't sort if doing relocatable link.  Sort for .ctors
	and .dtors if ctors_in_init_array.
	(Layout::make_output_section): Force correct section types for
	.init_array and friends.  Don't sort if doing relocatable link,
	Don't sort .ctors and .dtors if ctors_in_init_array.
	(Layout::section_name_mapping): Remove .ctors. and .dtorso.
	(Layout::output_section_name): Add relobj parameter.  Change all
	callers.  Handle .ctors. and .dtors. in code rather than table.
	Handle .ctors and .dtors if ctors_in_init_array.
	(Layout::match_file_name): New function, moved from output.cc.
	* layout.h (class Layout): Update declarations.
	* output.cc: Include "layout.h".
	(Input_section_sort_entry::get_priority): New function.
	(Input_section_sort_entry::match_file_name): Just call
	Layout::match_file_name.
	(Output_section::Input_section_sort_init_fini_compare::operator()):
	Handle .ctors and .dtors.  Sort by explicit priority rather than
	by name.
	* configure.ac: Remove CONSTRUCTOR_PRIORITY test and conditional.
	* testsuite/initpri2.c: New test.
	* testsuite/Makefile.am: Don't test CONSTRUCTOR_PRIORITY.
	(check_PROGRAMS): Add initpri2.
	(initpri2_SOURCES, initpri2_DEPENDENCIES): New variables.
	(initpri2_LDFLAGS, initpri2_LDADD): New variables.
	* configure, testsuite/Makefile.in: Rebuild.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: foo.patch
Type: text/x-diff
Size: 21588 bytes
Desc: patch
URL: <https://sourceware.org/pipermail/binutils/attachments/20110623/bf9aa37e/attachment.bin>


More information about the Binutils mailing list