Signed-off-by: Anthony Xu <anthony.xu@intel.com>
END(unw_init_running)
#ifdef XEN
+GLOBAL_ENTRY(ia64_do_multicall_call)
+ movl r2=ia64_hypercall_table;;
+ shladd r2=r38,3,r2;;
+ ld8 r2=[r2];;
+ mov b6=r2
+ br.sptk.many b6;;
+END(ia64_do_multicall_call)
+
+
.rodata
.align 8
.globl ia64_hypercall_table
#include <public/xen.h>
#include <xen/errno.h>
-typedef unsigned long (*hypercall_t)(
+extern unsigned long ia64_do_multicall_call(
unsigned long arg0,
unsigned long arg1,
unsigned long arg2,
unsigned long arg3,
unsigned long arg4,
- unsigned long arg5);
-
-extern const hypercall_t ia64_hypercall_table[];
+ unsigned long arg5,
+ unsigned long op);
static inline void do_multicall_call(multicall_entry_t *call)
{
if (call->op < NR_hypercalls)
- call->result = (*ia64_hypercall_table[call->op])(
+ call->result = ia64_do_multicall_call(
call->args[0],
call->args[1],
call->args[2],
call->args[3],
call->args[4],
- call->args[5]);
+ call->args[5],
+ call->op);
else
call->result = -ENOSYS;
}