Mercurial > ecos
diff packages/kernel/current/tests/kexcept1.c @ 2:443894e2e912 ecos-v1_2_1-release
Block commit of eCos version 1.2.1
| author | jlarmour |
|---|---|
| date | Tue, 11 May 1999 12:24:34 +0000 |
| parents | 3111d98ba7b3 |
| children | 1d7f19c9e4d1 |
line wrap: on
line diff
--- a/packages/kernel/current/tests/kexcept1.c +++ b/packages/kernel/current/tests/kexcept1.c @@ -22,7 +22,7 @@ // September 30, 1998. // // The Initial Developer of the Original Code is Cygnus. Portions created -// by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved. +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. // ------------------------------------------- // //####COPYRIGHTEND#### @@ -30,12 +30,14 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): dsm -// Contributors: dsm -// Date: 1998-06-15 +// Contributors: dsm, jlarmour +// Date: 1999-02-16 // Description: Test basic exception functionality //####DESCRIPTIONEND#### */ +#include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL + #include <cyg/kernel/kapi.h> #include <cyg/infra/testcase.h> @@ -49,7 +51,7 @@ #include "testaux.h" #define NTHREADS 1 -#define STACKSIZE 4096 +#define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL static cyg_handle_t thread[NTHREADS]; @@ -80,7 +82,7 @@ static void handler1(cyg_addrword_t data CYG_TEST_CHECK((cyg_addrword_t)&d0 == data, "handler given wrong data"); #ifdef CYGSEM_KERNEL_EXCEPTIONS_DECODE - CYG_TEST_CHECK(number == CYG_EXCEPTION_MAX, "handler given wrong number"); + CYG_TEST_CHECK(number == CYGNUM_HAL_EXCEPTION_MAX, "handler given wrong number"); #else CYG_UNUSED_PARAM(cyg_code_t, number); #endif @@ -113,14 +115,14 @@ static void entry0( CYG_ADDRWORD data ) CYG_UNUSED_PARAM(CYG_ADDRESS, data); cyg_exception_set_handler( - CYG_EXCEPTION_MAX, + CYGNUM_HAL_EXCEPTION_MAX, &handler1, (cyg_addrword_t)&d0, &old_handler, &old_data); cyg_exception_set_handler( - CYG_EXCEPTION_MAX, + CYGNUM_HAL_EXCEPTION_MAX, &handler1, (cyg_addrword_t)&d0, &old_handler1, @@ -133,15 +135,20 @@ static void entry0( CYG_ADDRWORD data ) cyg_exception_call_handler( cyg_thread_self(), - CYG_EXCEPTION_MAX, + CYGNUM_HAL_EXCEPTION_MAX, (cyg_addrword_t)99); CYG_TEST_INFO("handler 1 returned"); - cyg_exception_clear_handler(CYG_EXCEPTION_MAX); - cyg_exception_clear_handler(CYG_EXCEPTION_MAX); + cyg_exception_clear_handler(CYGNUM_HAL_EXCEPTION_MAX); + cyg_exception_clear_handler(CYGNUM_HAL_EXCEPTION_MAX); - for(n = CYG_EXCEPTION_MIN; n <= CYG_EXCEPTION_MAX; n++) { +#ifdef CYGPKG_HAL_I386_LINUX + // We can't catch segmentation violation exceptions on Linux. + CYG_TEST_PASS_FINISH("Except 1 OK"); +#endif + + for(n = CYGNUM_HAL_EXCEPTION_MIN; n <= CYGNUM_HAL_EXCEPTION_MAX; n++) { cyg_exception_set_handler( n, handler0, @@ -150,7 +157,7 @@ static void entry0( CYG_ADDRWORD data ) &old_data1); } - CYG_TEST_INFO("Attempting to provoke exception"); + CYG_TEST_PASS("Attempting to provoke exception"); cause_exception(); @@ -165,16 +172,27 @@ extern void __default_exception_vsr(void void except0_main( void ) { + // Use CYG_TEST_GDBCMD _before_ CYG_TEST_INIT() + CYG_TEST_GDBCMD("handle SIGBUS nostop"); + CYG_TEST_GDBCMD("handle SIGSEGV nostop"); + CYG_TEST_INIT(); -#ifdef CYG_HAL_TX39_JMR3904 +#ifdef HAL_VSR_SET_TO_ECOS_HANDLER + // Reclaim the VSR off CygMon possibly +#ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS + HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_ACCESS, NULL ); +#endif +#ifdef CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS + HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS, NULL ); +#endif +#ifdef CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION + HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION, NULL ); +#endif +#endif - cyg_interrupt_set_vsr( CYG_VECTOR_LOAD_ADDRESS, __default_exception_vsr ); - -#endif - cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kexcept1", - (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]); + (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]); cyg_thread_resume(thread[0]); cyg_scheduler_start(); @@ -200,7 +218,7 @@ externC void cyg_start( void ) { CYG_TEST_INIT(); - CYG_TEST_PASS_FINISH( "N/A: " N_A_MSG); + CYG_TEST_NA( N_A_MSG); } #endif // N_A_MSG
