annotate packages/kernel/current/tests/except1.cxx @ 161:ac086aa3217e

Merge from eCos master repository on 2001-06-08-21:11:51-BST
author jlarmour
date Sun, 10 Jun 2001 19:35:23 +0000
parents eb9fd8c04db3
children 353a011b23b8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 //=================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 // except1.cxx
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 // Exception test 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //=================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
9 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
10 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
12 // Version 1.1 (the "License"); you may not use this file except in
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
14 // http://www.redhat.com/
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
15 //
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
18 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
19 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
20 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
22 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
25 // Portions created by Red Hat are
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 130
diff changeset
26 // Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
27 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
28 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 10
diff changeset
29 //
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 //=================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 // Author(s): dsm
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
35 // Contributors: dsm, jlarmour
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
36 // Date: 1999-02-16
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 // Description: Test basic exception functionality
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 #include <pkgconf/kernel.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 #include <cyg/infra/testcase.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 #ifdef CYGPKG_KERNEL_EXCEPTIONS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #include <cyg/kernel/sched.hxx> // Cyg_Scheduler::start()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 #include <cyg/kernel/thread.hxx> // Cyg_Thread
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #include <cyg/kernel/intr.hxx> // cyg_VSR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 #include <cyg/hal/hal_intr.h> // exception ranges
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 #include <cyg/kernel/sched.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 #include <cyg/kernel/thread.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55 #define NTHREADS 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 #include "testaux.hxx"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
58 static int d0;
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
59 #ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 static cyg_exception_handler handler0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 static void handler0(CYG_ADDRWORD data, cyg_code number, CYG_ADDRWORD info)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 CYG_TEST_INFO("handler 0 called");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 CYG_TEST_CHECK((CYG_ADDRWORD)123 == data, "handler given wrong data");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 // ignore machine specific stuff
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 CYG_UNUSED_PARAM(cyg_code, number);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 CYG_UNUSED_PARAM(CYG_ADDRWORD, info);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 CYG_TEST_PASS_FINISH("Except 1 OK");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 }
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
74 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 static void handler1(CYG_ADDRWORD data, cyg_code number, CYG_ADDRWORD info)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 CYG_TEST_INFO("handler 1 called");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 CYG_TEST_CHECK((CYG_ADDRWORD)&d0 == data, "handler given wrong data");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 #ifdef CYGSEM_KERNEL_EXCEPTIONS_DECODE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
83 CYG_TEST_CHECK(number == CYGNUM_HAL_EXCEPTION_MAX, "handler given wrong number");
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 CYG_UNUSED_PARAM(cyg_code, number);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 CYG_TEST_CHECK((CYG_ADDRWORD)99 == info, "handler given wrong info");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
91 #ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 // The following function attempts to cause an exception in various
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 // hacky ways. It is machine dependent what exception is generated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 // It does reads rather than writes hoping not to corrupt anything
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 // important.
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
96 static int
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
97 cause_fpe(int num)
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
98 {
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
99 double a;
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
100
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
101 a = 1.0/num; // Depending on FPU emulation and/or
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
102 // the FPU architecture, this may
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
103 // cause an exception.
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
104 // (float division by zero)
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
105
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
106 return ((int)a)/num; // This may cause an exception if
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
107 // the architecture supports it.
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
108 // (integer division by zero).
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
109 } // cause_fpe()
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
110
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 void cause_exception(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 int x;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 unsigned int p=0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
116 // First try for an address exception (unaligned access exception
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
117 // or SEGV/BUS exceptions)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 do {
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
119 x=*(volatile int *)(p-1);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 p+=0x100000;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 } while(p != 0);
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
122
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
123 // Next try an integer or floating point divide-by-zero exception.
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
124 cause_fpe(0);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 }
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
126 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 static void entry0( CYG_ADDRWORD data )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 {
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
130 #ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 cyg_code n;
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
132 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 cyg_exception_handler *old_handler, *old_handler1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 CYG_ADDRWORD old_data, old_data1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 Cyg_Thread *p=Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 CYG_UNUSED_PARAM(CYG_ADDRESS, data);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 p->register_exception(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
140 CYGNUM_HAL_EXCEPTION_MAX,
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 &handler1,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 (CYG_ADDRWORD)&d0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 &old_handler,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 &old_data);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 p->register_exception(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
147 CYGNUM_HAL_EXCEPTION_MAX,
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 &handler1,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 (CYG_ADDRWORD)&d0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 &old_handler1,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 &old_data1);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 CYG_TEST_CHECK(old_handler1 == &handler1,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 "register exception: old_handler not the one previously registered");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 CYG_TEST_CHECK(old_data1 == (CYG_ADDRWORD)&d0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 "register exception: old_data not those previously registered");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
158 p->deliver_exception(CYGNUM_HAL_EXCEPTION_MAX, (CYG_ADDRWORD)99);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 CYG_TEST_INFO("handler 1 returned");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
162 p->deregister_exception(CYGNUM_HAL_EXCEPTION_MAX);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
163 p->deregister_exception(CYGNUM_HAL_EXCEPTION_MAX);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
165 #ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
166
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
167 #if 0
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
168 #elif defined(CYGPKG_HAL_POWERPC_SIM)
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
169 // The exception generated by the SIM is not recognized by GDB.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
170 // PR 19945 workaround.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
171 CYG_TEST_NA("Not applicable to PowerPC SIM");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
172 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
173
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
174 for(n = CYGNUM_HAL_EXCEPTION_MIN; n <= CYGNUM_HAL_EXCEPTION_MAX; n++) {
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 p->register_exception(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 n,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 handler0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 (CYG_ADDRWORD)123,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 &old_handler1,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 &old_data1);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
183 CYG_TEST_PASS("Attempting to provoke exception");
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 cause_exception();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 CYG_TEST_FAIL_FINISH("Couldn't cause exception");
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
188 #else // CYGNUM_HAL_EXCEPTION_DATA_ACCESS
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
189 CYG_TEST_NA("Platform does not support data exceptions");
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
190 #endif
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 70
diff changeset
191
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
194 #ifdef CYG_HAL_MIPS_TX39_JMR3904
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 externC cyg_VSR __default_exception_vsr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 cyg_VSR *old_vsr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 void except0_main( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
203 // Use CYG_TEST_GDBCMD _before_ CYG_TEST_INIT()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
204 CYG_TEST_GDBCMD("handle SIGBUS nostop");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
205 CYG_TEST_GDBCMD("handle SIGSEGV nostop");
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
206 CYG_TEST_GDBCMD("handle SIGFPE nostop");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
207
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 CYG_TEST_INIT();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
210 #ifdef HAL_VSR_SET_TO_ECOS_HANDLER
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
211 // Reclaim the VSR off CygMon possibly
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
212 #ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
213 HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_ACCESS, NULL );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
214 #endif
70
c5536bad4c24 Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents: 66
diff changeset
215 #ifdef CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS
c5536bad4c24 Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents: 66
diff changeset
216 HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS, NULL );
c5536bad4c24 Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents: 66
diff changeset
217 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
218 #ifdef CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
219 HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS, NULL );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
220 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
221 #ifdef CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
222 HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION, NULL );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
223 #endif
126
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
224 #ifdef CYGNUM_HAL_EXCEPTION_DIV_BY_ZERO
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
225 HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DIV_BY_ZERO, NULL );
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
226 #endif
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
227 #ifdef CYGNUM_HAL_EXCEPTION_FPU
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
228 HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_FPU, NULL );
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
229 #endif
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
230 #ifdef CYGNUM_HAL_EXCEPTION_FPU_DIV_BY_ZERO
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
231 HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_FPU_DIV_BY_ZERO, NULL );
518f42066aba Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents: 78
diff changeset
232 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 new_thread(entry0, 0);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 Cyg_Scheduler::start();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 CYG_TEST_FAIL_FINISH("Not reached");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 externC void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 cyg_start( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 {
130
eb9fd8c04db3 Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents: 126
diff changeset
244 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
eb9fd8c04db3 Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents: 126
diff changeset
245 cyg_hal_invoke_constructors();
eb9fd8c04db3 Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents: 126
diff changeset
246 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 except0_main();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 #else // def CYGPKG_KERNEL_EXCEPTIONS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 externC void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 cyg_start( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 CYG_TEST_INIT();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
254 CYG_TEST_NA("Exceptions disabled");
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 #endif // def CYGPKG_KERNEL_EXCEPTIONS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 // EOF except1.cxx