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]

Gold patch to create separate output sections for certain text section prefixes


Hi,

This patch creates separate output sections for .text.hot,
.text.startup, .text.exit and .text.unlikely and is controlled by
-z,keep-text-section-prefix.  With this feature, the PT_LOAD segment
would look like this:

 Section to Segment mapping:
  Segment Sections...
   00
   01     .interp
   02     .interp  ... .rela.dyn .rela.plt .init .plt .text.hot .text
.text.startup .text.exit .text.unlikely .fini .rodata .eh_frame
.eh_frame_hdr ...
....

This feature would be useful to:

a) Map only a subset of  the text sections to huge pages.
b) m(un)lock a subset  the text sections.
c) Code layout verification.

I added -z,text-unlikely-segment here:
https://sourceware.org/ml/binutils/2017-10/msg00023.html for similar
reasons.

However, we found out that creating multiple executable ELF segments
has other issues as some other tools like symbolizers make assumptions
about ELF binaries having just one executable segment and this breaks
them.  We are looking at fixing these but an alternate approach gives
us flexibility in deploying this.

Thoughts?  Patch attached.

* layout.cc (Layout::default_section_order): Check for text section
prefixes.
(Layout::text_section_name_mapping): New static member.
(Layout::text_section_name_mapping_count): New static member.
(Layout::match_section_name): New static function.
(Layout::output_section_name): Check for text section prefixes.
* layout.h (Output_section_order::ORDER_TEXT_HOT): New enum value.
(Output_section_order::ORDER_TEXT_STARTUP): New enum value.
(Output_section_order::ORDER_TEXT_EXIT): New enum value.
(Output_section_order::ORDER_TEXT_UNLIKELY): New enum value.
(Layout::text_section_name_mapping): New static member.
(Layout::text_section_name_mapping_count): New static member.
(Layout::match_section_name): New static function.
* options.h (keep_text_section_prefix): New -z option.
* testsuite/Makefile.am (keep_text_section_prefix): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/keep_text_section_prefix.cc: New test source.
* testsuite/keep_text_section_prefix.sh: New test script.

Thanks
Sri

Attachment: keep_text_section_prefix_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]