Index: include/plugin-api.h |
diff --git a/include/plugin-api.h b/include/plugin-api.h |
index 3220142ddaa7f2056db24df9870068cc23e20d69..5797d4dce93c1c6c9f83126f62180a9b2cc86ac7 100644 |
--- a/include/plugin-api.h |
+++ b/include/plugin-api.h |
@@ -318,6 +318,33 @@ typedef |
enum ld_plugin_status |
(*ld_plugin_allow_section_ordering) (void); |
+/* The linker's interface for specifying that a subset of sections is |
+ to be mapped to a unique segment. If the plugin wants to call |
+ unique_segment_for_sections, it must call this function from a |
+ claim_file_handler or when it is first loaded. */ |
+ |
+typedef |
+enum ld_plugin_status |
+(*ld_plugin_allow_unique_segment_for_sections) (void); |
+ |
+/* The linker's interface for specifying that a specific set of sections |
+ must be mapped to a unique segment. ELF segments do not have names |
+ and the NAME is used as the name of the newly created output section |
+ that is then placed in the unique PT_LOAD segment. FLAGS is used to |
+ specify if any additional segment flags need to be set. For instance, |
+ a specific segment flag can be set to identify this segment. Unsetting |
+ segment flags that would be set by default is not possible. The |
+ parameter SEGMENT_ALIGNMENT when non-zero will override the default. */ |
+ |
+typedef |
+enum ld_plugin_status |
+(*ld_plugin_unique_segment_for_sections) ( |
+ const char* segment_name, |
+ uint64_t segment_flags, |
+ uint64_t segment_alignment, |
+ const struct ld_plugin_section * section_list, |
+ unsigned int num_sections); |
+ |
enum ld_plugin_level |
{ |
LDPL_INFO, |
@@ -331,31 +358,33 @@ enum ld_plugin_level |
enum ld_plugin_tag |
{ |
LDPT_NULL = 0, |
- LDPT_API_VERSION, |
- LDPT_GOLD_VERSION, |
- LDPT_LINKER_OUTPUT, |
- LDPT_OPTION, |
- LDPT_REGISTER_CLAIM_FILE_HOOK, |
- LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK, |
- LDPT_REGISTER_CLEANUP_HOOK, |
- LDPT_ADD_SYMBOLS, |
- LDPT_GET_SYMBOLS, |
- LDPT_ADD_INPUT_FILE, |
- LDPT_MESSAGE, |
- LDPT_GET_INPUT_FILE, |
- LDPT_RELEASE_INPUT_FILE, |
- LDPT_ADD_INPUT_LIBRARY, |
- LDPT_OUTPUT_NAME, |
- LDPT_SET_EXTRA_LIBRARY_PATH, |
- LDPT_GNU_LD_VERSION, |
- LDPT_GET_VIEW, |
- LDPT_GET_INPUT_SECTION_COUNT, |
- LDPT_GET_INPUT_SECTION_TYPE, |
- LDPT_GET_INPUT_SECTION_NAME, |
- LDPT_GET_INPUT_SECTION_CONTENTS, |
- LDPT_UPDATE_SECTION_ORDER, |
- LDPT_ALLOW_SECTION_ORDERING, |
- LDPT_GET_SYMBOLS_V2 |
+ LDPT_API_VERSION = 1, |
+ LDPT_GOLD_VERSION = 2, |
+ LDPT_LINKER_OUTPUT = 3, |
+ LDPT_OPTION = 4, |
+ LDPT_REGISTER_CLAIM_FILE_HOOK = 5, |
+ LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK = 6, |
+ LDPT_REGISTER_CLEANUP_HOOK = 7, |
+ LDPT_ADD_SYMBOLS = 8, |
+ LDPT_GET_SYMBOLS = 9, |
+ LDPT_ADD_INPUT_FILE = 10, |
+ LDPT_MESSAGE = 11, |
+ LDPT_GET_INPUT_FILE = 12, |
+ LDPT_RELEASE_INPUT_FILE = 13, |
+ LDPT_ADD_INPUT_LIBRARY = 14, |
+ LDPT_OUTPUT_NAME = 15, |
+ LDPT_SET_EXTRA_LIBRARY_PATH = 16, |
+ LDPT_GNU_LD_VERSION = 17, |
+ LDPT_GET_VIEW = 18, |
+ LDPT_GET_INPUT_SECTION_COUNT = 19, |
+ LDPT_GET_INPUT_SECTION_TYPE = 20, |
+ LDPT_GET_INPUT_SECTION_NAME = 21, |
+ LDPT_GET_INPUT_SECTION_CONTENTS = 22, |
+ LDPT_UPDATE_SECTION_ORDER = 23, |
+ LDPT_ALLOW_SECTION_ORDERING = 24, |
+ LDPT_GET_SYMBOLS_V2 = 25, |
+ LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS = 26, |
+ LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27 |
}; |
/* The plugin transfer vector. */ |
@@ -385,6 +414,8 @@ struct ld_plugin_tv |
ld_plugin_get_input_section_contents tv_get_input_section_contents; |
ld_plugin_update_section_order tv_update_section_order; |
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; |
} tv_u; |
}; |