From: Andrew Cooper Date: Fri, 22 Apr 2016 18:57:17 +0000 (+0100) Subject: Annotate hvm pagetables as data X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=6164d2f2cb66c3ccc063f9a2b92f2328cae8aada;p=people%2Froyger%2Fxen-test-framework.git Annotate hvm pagetables as data Introduce PAGETABLE_{START,END}() helpers which wrap the appropriate directives. Fix a copy&paste bug from c/s 3382222 "Introduce the hvm32pse environment" which stated the size of pse_l1_identmap twice, and omitted pse_l2_identmap. Signed-off-by: Andrew Cooper --- diff --git a/arch/x86/hvm/pagetables.S b/arch/x86/hvm/pagetables.S index bb74233..b1a2183 100644 --- a/arch/x86/hvm/pagetables.S +++ b/arch/x86/hvm/pagetables.S @@ -2,6 +2,13 @@ #include +#define PAGETABLE_START(sym) \ + GLOBAL(sym) + +#define PAGETABLE_END(sym) \ + .type sym, STT_OBJECT; \ + SIZE(sym) + #define PAGE_COMMON _PAGE_DIRTY + _PAGE_ACCESSED + _PAGE_USER + _PAGE_RW + _PAGE_PRESENT #define PAE_IDX(sym) ((. - (sym)) / PAE_PTE_SZ) @@ -11,63 +18,63 @@ .p2align PAGE_SHIFT /* PAE mappings of first 2M of memory in 4k pages. Uses 1x 4k page. */ -GLOBAL(pae_l1_identmap) +PAGETABLE_START(pae_l1_identmap) .long 0, 0 /* Unmap page at 0 to catch errors with NULL pointers. */ .rept PAE_L1_PT_ENTRIES - 1 .long (PAE_IDX(pae_l1_identmap) << PAE_L1_PT_SHIFT) + PAGE_COMMON .long 0 .endr -SIZE(pae_l1_identmap) +PAGETABLE_END(pae_l1_identmap) /* PAE mappings up to 4G, mostly in 2M superpages. Uses 4x 4k pages. */ -GLOBAL(pae_l2_identmap) +PAGETABLE_START(pae_l2_identmap) .long pae_l1_identmap + PAGE_COMMON .long 0 .rept (4 * PAE_L2_PT_ENTRIES) - 1 .long (PAE_IDX(pae_l2_identmap) << PAE_L2_PT_SHIFT) + _PAGE_PSE + PAGE_COMMON .long 0 .endr -SIZE(pae_l2_identmap) +PAGETABLE_END(pae_l2_identmap) /* PAE l3 pagetable. Maps 4x l2 tables. */ -GLOBAL(pae_l3_identmap) +PAGETABLE_START(pae_l3_identmap) .rept 4 .long pae_l2_identmap + (PAE_IDX(pae_l3_identmap) << PAGE_SHIFT) + PAGE_COMMON .long 0 .endr .fill PAE_L3_PT_ENTRIES - 4, 8, 0 -SIZE(pae_l3_identmap) +PAGETABLE_END(pae_l3_identmap) /* PAE l4 pagetable. Maps 1x l3 table. */ -GLOBAL(pae_l4_identmap) +PAGETABLE_START(pae_l4_identmap) .long pae_l3_identmap + PAGE_COMMON .long 0 .fill PAE_L4_PT_ENTRIES - 1, 8, 0 -SIZE(pae_l4_identmap) +PAGETABLE_END(pae_l4_identmap) /* PSE mappings of the first 4M of memory in 4k pages. Uses 1x 4k page. */ -GLOBAL(pse_l1_identmap) +PAGETABLE_START(pse_l1_identmap) .long 0 /* Unmap page at 0 to catch errors with NULL pointers. */ .rept PSE_L1_PT_ENTRIES - 1 .long (PSE_IDX(pse_l1_identmap) << PSE_L1_PT_SHIFT) + PAGE_COMMON .endr -SIZE(pse_l1_identmap) +PAGETABLE_END(pse_l1_identmap) /* PSE mappings up to 4G, mostly in 4M superpages. Uses 1x 4k page. */ -GLOBAL(pse_l2_identmap) +PAGETABLE_START(pse_l2_identmap) .long pse_l1_identmap + PAGE_COMMON .rept PSE_L2_PT_ENTRIES - 1 .long (PSE_IDX(pse_l2_identmap) << PSE_L2_PT_SHIFT) + _PAGE_PSE + PAGE_COMMON .endr -SIZE(pse_l1_identmap) +PAGETABLE_END(pse_l2_identmap) /* PAE l3 32bit quad. Contains 4 64bit entries. */ -GLOBAL(pae32_l3_identmap) +PAGETABLE_START(pae32_l3_identmap) .rept PAE32_L3_ENTRIES .long pae_l2_identmap + (PAE_IDX(pae32_l3_identmap) << PAGE_SHIFT) + _PAGE_PRESENT .long 0 .endr -SIZE(pae32_l3_identmap) +PAGETABLE_END(pae32_l3_identmap) /* * Local variables: