diff options
author | Cary Coutant <ccoutant@gmail.com> | 2016-03-03 12:09:06 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2016-03-03 12:09:06 -0800 |
commit | 82838bd626b10f1a82b0de29728c26f4458ec514 (patch) | |
tree | 696a1f1565a3a667826b6b1c62bbf7e9449e67cb /include/plugin-api.h | |
parent | 95ecdfbfcbf508919652a0254ee2b8c6572a949e (diff) | |
download | gdb-82838bd626b10f1a82b0de29728c26f4458ec514.zip gdb-82838bd626b10f1a82b0de29728c26f4458ec514.tar.gz gdb-82838bd626b10f1a82b0de29728c26f4458ec514.tar.bz2 |
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.
Diffstat (limited to 'include/plugin-api.h')
-rw-r--r-- | include/plugin-api.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/include/plugin-api.h b/include/plugin-api.h index 811e6e4..a794a37 100644 --- a/include/plugin-api.h +++ b/include/plugin-api.h @@ -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; }; |