Add new plugin hooks to support querying section alignment and size.
include/ 2016-03-03 Than McIntosh <thanm@google.com> * plugin-api.h: Add new hooks to the plugin transfer vector to to support querying section alignment and section size. (ld_plugin_get_input_section_alignment): New hook. (ld_plugin_get_input_section_size): New hook. (ld_plugin_tag): Add LDPT_GET_INPUT_SECTION_ALIGNMENT and LDPT_GET_INPUT_SECTION_SIZE. (ld_plugin_tv): Add tv_get_input_section_alignment and tv_get_input_section_size. gold/ 2016-03-03 Than McIntosh <thanm@google.com> * plugin.cc (Plugin::load): Include hooks for get_input_section_size and get_input_section_alignment in transfer vector. (get_input_section_alignment): New function. (get_input_section_size): New function. * testsuite/Makefile.am: Add plugin_layout_with_alignment.sh test. * testsuite/Makefile.in: [Regenerate.] * testsuite/plugin_section_alignment.cc: New test file. * testsuite/plugin_layout_with_alignment.cc: New test file. * testsuite/plugin_layout_with_alignment.sh: New test file.
This commit is contained in:
parent
95ecdfbfcb
commit
82838bd626
7 changed files with 530 additions and 5 deletions
|
@ -345,6 +345,26 @@ enum ld_plugin_status
|
|||
const struct ld_plugin_section * section_list,
|
||||
unsigned int num_sections);
|
||||
|
||||
/* The linker's interface for retrieving the section alignment requirement
|
||||
of a specific section in an object. This interface should only be invoked in the
|
||||
claim_file handler. This function sets *ADDRALIGN to the ELF sh_addralign
|
||||
value of the input section. */
|
||||
|
||||
typedef
|
||||
enum ld_plugin_status
|
||||
(*ld_plugin_get_input_section_alignment) (const struct ld_plugin_section section,
|
||||
unsigned int *addralign);
|
||||
|
||||
/* The linker's interface for retrieving the section size of a specific section
|
||||
in an object. This interface should only be invoked in the claim_file handler.
|
||||
This function sets *SECSIZE to the ELF sh_size
|
||||
value of the input section. */
|
||||
|
||||
typedef
|
||||
enum ld_plugin_status
|
||||
(*ld_plugin_get_input_section_size) (const struct ld_plugin_section section,
|
||||
uint64_t *secsize);
|
||||
|
||||
enum ld_plugin_level
|
||||
{
|
||||
LDPL_INFO,
|
||||
|
@ -385,7 +405,9 @@ enum ld_plugin_tag
|
|||
LDPT_GET_SYMBOLS_V2 = 25,
|
||||
LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS = 26,
|
||||
LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27,
|
||||
LDPT_GET_SYMBOLS_V3 = 28
|
||||
LDPT_GET_SYMBOLS_V3 = 28,
|
||||
LDPT_GET_INPUT_SECTION_ALIGNMENT = 29,
|
||||
LDPT_GET_INPUT_SECTION_SIZE = 30
|
||||
};
|
||||
|
||||
/* The plugin transfer vector. */
|
||||
|
@ -417,6 +439,8 @@ struct ld_plugin_tv
|
|||
ld_plugin_allow_section_ordering tv_allow_section_ordering;
|
||||
ld_plugin_allow_unique_segment_for_sections tv_allow_unique_segment_for_sections;
|
||||
ld_plugin_unique_segment_for_sections tv_unique_segment_for_sections;
|
||||
ld_plugin_get_input_section_alignment tv_get_input_section_alignment;
|
||||
ld_plugin_get_input_section_size tv_get_input_section_size;
|
||||
} tv_u;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue