__noinline \
__noreturn \
__used \
+ __user_data \
__user_page_aligned_bss \
+ __user_text \
__weak \
if ( !test_wants_user_mappings )
{
extern const char __start_user_text[], __end_user_text[];
+ extern const char __start_user_data[], __end_user_data[];
extern const char __start_user_bss[], __end_user_bss[];
remap_user(virt_to_gfn(__start_user_text),
virt_to_gfn(__end_user_text));
+ remap_user(virt_to_gfn(__start_user_data),
+ virt_to_gfn(__end_user_data));
+
remap_user(virt_to_gfn(__start_user_bss),
virt_to_gfn(__end_user_bss));
. = ALIGN(PAGE_SIZE);
*(.data.page_aligned)
. = ALIGN(PAGE_SIZE);
+
+ __start_user_data = .;
+ *(.data.user)
+ . = ALIGN(PAGE_SIZE);
+ __end_user_data = .;
+
}
.rodata : {
ASSERT(IS_ALIGNED(__start_user_text, PAGE_SIZE), "__start_user_text misaligned");
ASSERT(IS_ALIGNED(__end_user_text, PAGE_SIZE), "__end_user_text misaligned");
+ASSERT(IS_ALIGNED(__start_user_data, PAGE_SIZE), "__start_user_data misaligned");
+ASSERT(IS_ALIGNED(__end_user_data, PAGE_SIZE), "__end_user_data misaligned")
+ASSERT(IS_ALIGNED(__start_user_bss, PAGE_SIZE), "__start_user_data misaligned");
+ASSERT(IS_ALIGNED(__end_user_bss, PAGE_SIZE), "__end_user_data misaligned")
#ifdef CONFIG_HVM
* structures which specifically want to be user.
*/
extern const char __start_user_text[], __end_user_text[];
+ extern const char __start_user_data[], __end_user_data[];
extern const char __start_user_bss[], __end_user_bss[];
remap_linear_range(__start_user_text, __end_user_text,
PF_SYM(AD, U, RW, P));
+ remap_linear_range(__start_user_data, __end_user_data,
+ PF_SYM(AD, U, RW, P));
+
remap_linear_range(__start_user_bss, __end_user_bss,
PF_SYM(AD, U, RW, P));
}
/* Convenience wrappers. */
#define __user_text __section(".text.user")
+#define __user_data __section(".data.user")
+
#define __page_aligned_data __section(".data.page_aligned") __aligned(4096)
#define __page_aligned_bss __section(".bss.page_aligned") __aligned(4096)