• Jeremy Fitzhardinge's avatar
    xen64: fix calls into hypercall page · e7435902
    Jeremy Fitzhardinge authored
    The 64-bit calling convention for hypercalls uses different registers
    from 32-bit.  Annoyingly, gcc's asm syntax doesn't have a way to
    specify one of the extra numeric reigisters in a constraint, so we
    must use explicitly placed register variables.  Given that we have to
    do it for some args, may as well do it for all.
    
    Also fix syntax gcc generates for the call instruction itself.  We
    need a plain direct call, but the asm expansion which works on 32-bit
    generates a rip-relative addressing mode in 64-bit, which is treated
    as an indirect call.  The alternative is to pass the hypercall page
    offset into the asm, and have it add it to the hypercall page start
    address to generate the call.
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    Cc: Stephen Tweedie <sct@redhat.com>
    Cc: Eduardo Habkost <ehabkost@redhat.com>
    Cc: Mark McLoughlin <markmc@redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    e7435902
hypercall.h 14.2 KB