help
This feature will cause the VMM to intercept the execution
of software interrupts (i.e. the INTn instruction) and enable
- any INT vector to be hooked
+ any INT vector to be hooked. Extension name is "swintr_intercept"
config DEBUG_EXT_SW_INTERRUPTS
bool "Enable debugging of software interrupt interception code"
config DEBUG_EXT_SYSCALL_HIJACK
bool "Enable Syscall Hijack Debug in Palacios"
+ depends on EXT_SYSCALL_HIJACK
default n
help
Enable Debugging printouts for syscall hijacking code
#include <interfaces/sw_intr.h>
+#ifndef V3_CONFIG_DEBUG_EXT_SW_INTERRUPTS
+#undef PrintDebug
+#define PrintDebug(fmt, args...)
+#endif
+
static int init_swintr_intercept (struct v3_vm_info * vm, v3_cfg_tree_t * cfg, void ** priv_data) {
ret = hook->handler(core, vector, NULL);
if (ret == -1) {
-#ifdef V3_CONFIG_DEBUG_EXT_SW_INTERRUPTS
PrintDebug("V3 SWintr Handler: Error in swintr hook\n");
-#endif
return -1;
}
int v3_signal_swintr (struct guest_info * core, uint8_t vector) {
struct v3_intr_core_state * intr_state = &(core->intr_core_state);
-#ifdef V3_CONFIG_DEBUG_EXT_SW_INTERRUPTS
PrintDebug("Signaling software interrupt in v3_signal_swintr()\n");
PrintDebug("\tINT vector: %d\n", vector);
-#endif
intr_state->swintr_posted = 1;
intr_state->swintr_vector = vector;
static int passthrough_swintr_handler (struct guest_info * core, uint8_t vector, void * priv_data) {
-#ifdef V3_CONFIG_DEBUG_EXT_SW_INTERRUPTS
PrintDebug("[passthrough_swint_handler] INT vector=%d (guest=0x%p)\n",
vector, (void*)core);
-#endif
return 0;
}
PrintError("guest_swintr_injection: failed to hook swint 0x%x (guest=0x%p)\n", vector, (void*)core);
return -1;
} else {
-#ifdef V3_CONFIG_DEBUG_EXT_SW_INTERRUPTS
PrintDebug("guest_swintr_injection: hooked swint 0x%x (guest=0x%p)\n", vector, (void*)core);
-#endif
return 0;
}
}
-
-
-
-
-
-
-