int main(int argc, char **argv) { /* * This will crash if the entry-point breakpoint has been mishandled such * that our argc and argv values are bogus. This should catch any * regression of http://code.google.com/p/nativeclient/issues/detail?id=1730. */ argv[argc] = 0; if (argc < 2) { printf("Usage: debugger_test.nexe test_name\n"); return 1; } if (strcmp(argv[1], "test_getting_registers") == 0) { set_registers_and_stop(); return 0; } if (strcmp(argv[1], "test_jump_to_address_zero") == 0) { test_jump_to_address_zero(); } if (strcmp(argv[1], "test_setting_breakpoint") == 0) { breakpoint_target_func(); return 0; } if (strcmp(argv[1], "test_exit_code") == 0) { return non_zero_return(); } if (strcmp(argv[1], "test_single_step") == 0) { test_single_step(); return 0; } if (strcmp(argv[1], "test_interrupt") == 0) { test_interrupt(); return 0; } if (strcmp(argv[1], "test_suspending_threads") == 0) { test_suspending_threads(); return 0; } return 1; }
_mali_osk_irq_t *_mali_osk_irq_init(u32 irqnum, _mali_osk_irq_uhandler_t uhandler, void *int_data, _mali_osk_irq_trigger_t trigger_func, _mali_osk_irq_ack_t ack_func, void *probe_data, const char *description) { mali_osk_irq_object_t *irq_object; unsigned long irq_flags = 0; #if defined(CONFIG_MALI_SHARED_INTERRUPTS) irq_flags |= IRQF_SHARED; #endif /* defined(CONFIG_MALI_SHARED_INTERRUPTS) */ irq_object = kmalloc(sizeof(mali_osk_irq_object_t), GFP_KERNEL); if (NULL == irq_object) { return NULL; } if (-1 == irqnum) { /* Probe for IRQ */ if ((NULL != trigger_func) && (NULL != ack_func)) { unsigned long probe_count = 3; _mali_osk_errcode_t err; int irq; MALI_DEBUG_PRINT(2, ("Probing for irq\n")); do { unsigned long mask; mask = probe_irq_on(); trigger_func(probe_data); _mali_osk_time_ubusydelay(5); irq = probe_irq_off(mask); err = ack_func(probe_data); } while (irq < 0 && (err == _MALI_OSK_ERR_OK) && probe_count--); if (irq < 0 || (_MALI_OSK_ERR_OK != err)) irqnum = -1; else irqnum = irq; } else irqnum = -1; /* no probe functions, fault */ if (-1 != irqnum) { /* found an irq */ MALI_DEBUG_PRINT(2, ("Found irq %d\n", irqnum)); } else { MALI_DEBUG_PRINT(2, ("Probe for irq failed\n")); } } irq_object->irqnum = irqnum; irq_object->uhandler = uhandler; irq_object->data = int_data; if (-1 == irqnum) { MALI_DEBUG_PRINT(2, ("No IRQ for core '%s' found during probe\n", description)); kfree(irq_object); return NULL; } #if defined(DEBUG) /* Verify that the configured interrupt settings are working */ if (_MALI_OSK_ERR_OK != test_interrupt(irqnum, trigger_func, ack_func, probe_data, description)) { MALI_DEBUG_PRINT(2, ("Test of IRQ handler for core '%s' failed\n", description)); kfree(irq_object); return NULL; } #endif if (0 != request_irq(irqnum, irq_handler_upper_half, irq_flags, description, irq_object)) { MALI_DEBUG_PRINT(2, ("Unable to install IRQ handler for core '%s'\n", description)); kfree(irq_object); return NULL; } return irq_object; }