This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch to do reorder text and data sections according to a user specified sequence.


Hi,

   I have attached a patch to reorder text and data sections in the
linker according to a user specified sequence. I have added a new
option --final-layout to do this. Currently, this could be done using
linker scripts but this patch makes it really easy to do this. Let me
explain using a simple example.

test.cc

void foo()
{ }

void bar()
{ }

int main()
{
  return 0;
}

$ g++ -ffunction-sections test.cc
$ nm -n a.out
...
000000000040038c T _Z3foov
0000000000400392 T _Z3barv
....

foo is laid to be before bar. Now, I can change this order as follows.

$ (echo "_Z3barv" && echo "_Z3foov") > sequence.txt
$ g++ -ffunction-sections test.cc -Wl,--final-layout,sequence.txt
$ nm -n a.out
...
0000000000400658 T _Z3barv
000000000040065e T _Z3foov
...

The order is changed.

This can be done for text or data sections.

I am planning to write a linker plugin to be able to do a feed-back
directed function/data layout according to the Pettis-Hansen code
positioning algorithm. The feed-back information will be supplied by
the compiler, FDO in the case of gcc. This patch is the first in the
series to do that.

Comments please.

	* layout.cc (Layout::read_layout_from_file): New method.
	(Layout::section_reorder): New method.
	(Layout::finalize): Call section_reorder when --final-layout is
	passed.
	* layout.h (Layout::read_layout_from_file): New method.
	(Layout::section_reorder): New method.
	(Layout::input_section_order): New method.
	(Layout::input_section_order_): New private member.
	* options.h (--final-layout): New option.
	* output.cc (Output_section::add_input_section): Keep input sections
	when --final-layout is used.
	(Output_section::reorder_layout): New method.
	* output.h (Output_section::reorder_layout): New method.
	(Input_section::Input_section): Initialize secname_.
	(Input_section::section_name): New method.
	(Input_section::set_section_name): New method.
	(Input_section::secname_): New member.
	* testsuite/Makefile.am (final_layout): New test case.
	* testsuite.Makefile.in: Regenerate.
	* testsuite/final_layout.cc: New file.
	* testsuite/final_layout.sh: New file.



Thanks,
-Sriraman.

Attachment: final_layout_patch.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]