void _bsp_cpu_init(void) { #ifdef CYGPKG_KERNEL int d0; cyg_exception_set_handler(CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION, _bsp_handle_exception, (cyg_addrword_t)&d0, 0, 0); #endif #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS bsp_install_dbg_handler((bsp_handler_t)__handle_exception); __install_traps(); #else bsp_install_dbg_handler(unhandled_exception); #endif }
static void entry0( CYG_ADDRWORD data ) { #ifdef EXCEPTION_DATA_ACCESS cyg_code_t n; #endif cyg_exception_handler_t *old_handler, *old_handler1; cyg_addrword_t old_data, old_data1; CYG_UNUSED_PARAM(CYG_ADDRESS, data); cyg_exception_set_handler( CYGNUM_HAL_EXCEPTION_MAX, &handler1, (cyg_addrword_t)&d0, &old_handler, &old_data); cyg_exception_set_handler( CYGNUM_HAL_EXCEPTION_MAX, &handler1, (cyg_addrword_t)&d0, &old_handler1, &old_data1); CYG_TEST_CHECK(old_handler1 == &handler1, "register exception: old_handler not the one previously registered"); CYG_TEST_CHECK(old_data1 == (cyg_addrword_t)&d0, "register exception: old_data not those previously registered"); cyg_exception_call_handler( cyg_thread_self(), CYGNUM_HAL_EXCEPTION_MAX, (cyg_addrword_t)99); CYG_TEST_INFO("handler 1 returned"); cyg_exception_clear_handler(CYGNUM_HAL_EXCEPTION_MAX); cyg_exception_clear_handler(CYGNUM_HAL_EXCEPTION_MAX); #ifdef EXCEPTION_DATA_ACCESS #if 0 #elif defined(CYGPKG_HAL_POWERPC_SIM) // The exception generated by the SIM is not recognized by GDB. // PR 19945 workaround. CYG_TEST_NA("Not applicable to PowerPC SIM"); #endif for(n = CYGNUM_HAL_EXCEPTION_MIN; n <= CYGNUM_HAL_EXCEPTION_MAX; n++) { cyg_exception_set_handler( n, handler0, (cyg_addrword_t)123, &old_handler1, &old_data1); } CYG_TEST_PASS("Attempting to provoke exception"); cause_exception(); CYG_TEST_FAIL_FINISH("Couldn't cause exception"); #else // EXCEPTION_DATA_ACCESS CYG_TEST_NA("Platform does not support data exceptions"); #endif }