1#include <xtf/asm_macros.h>
 
    4#include <arch/processor.h>
 
    5#include <arch/msr-index.h>
 
    6#include <arch/segment.h>
 
    8#include <xen/elfnote.h>
 
   10        .section ".text.head", "ax", @progbits
 
   11        .code32                 /* Always starts in 32bit flat mode. */
 
   12GLOBAL(_elf_start)              /* HVM common setup. */
 
   14#if CONFIG_PAGING_LEVELS > 0    /* Paging setup for CR3 and CR4 */
 
   16#if CONFIG_PAGING_LEVELS == 2
 
   17        mov $X86_CR4_PSE, %eax
 
   18#elif CONFIG_PAGING_LEVELS == 3 || CONFIG_PAGING_LEVELS == 4
 
   19        mov $X86_CR4_PAE, %eax
 
   21# error Bad paging mode
 
   27#endif /* CONFIG_PAGING_LEVELS > 0 */
 
   29#ifdef __x86_64__               /* EFER.LME = 1 */
 
   34#endif /* __x86_64__ */
 
   36#if CONFIG_PAGING_LEVELS > 0    /* CR0.PG = 1 */
 
   37# define MAYBE_PG X86_CR0_PG
 
   40#endif /* CONFIG_PAGING_LEVELS > 0 */
 
   43        or $(X86_CR0_WP | MAYBE_PG), %eax
 
   48        /* Load code segment. */
 
   54        /* Load data segments. */
 
   551:      mov $__USER_DS, %eax
 
   63        /* Move onto the boot stack. */
 
   64        mov $boot_stack + PAGE_SIZE, %esp
 
   72        /* panic() if xtf_main manages to return. */
 
   74        lea .Lmain_err_msg(%rip), %rdi
 
   76        mov $.Lmain_err_msg, %eax
 
   81DECLSTR(.Lmain_err_msg, "xtf_main() returned\n")
 
   83/* All HVM XTF guests are compatible with the PVH ABI. */
 
   85        mov %ebx, pvh_start_info
 
   88ELFNOTE(Xen, XEN_ELFNOTE_PHYS32_ENTRY, .long _pvh_start)
 
   93 * indent-tabs-mode: nil