Changeset a201f7b
- Timestamp:
- Apr 8, 2020, 4:06:51 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- cb20dcd
- Parents:
- 72828a8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/exception.c
r72828a8 ra201f7b 10 10 // Created On : Mon Jun 26 15:13:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Apr 06 14:40:00 202013 // Update Count : 1 512 // Last Modified On : Wed Apr 08 15:45:00 2020 13 // Update Count : 16 14 14 // 15 15 … … 28 28 #include <unwind.h> 29 29 #include <bits/debug.hfa> 30 #include "stdhdr/assert.h" 30 31 31 32 // FIX ME: temporary hack to keep ARM build working … … 216 217 struct _Unwind_Context * unwind_context, 217 218 void * stop_param) { 218 if ( actions & _UA_END_OF_STACK ) exit(1); 219 if ( actions & _UA_CLEANUP_PHASE ) return _URC_NO_REASON; 220 221 return _URC_FATAL_PHASE2_ERROR; 219 // Verify actions follow the rules we expect. 220 verify((actions & _UA_CLEANUP_PHASE) && actions & (_UA_FORCE_UNWIND)); 221 verify(!(actions & (_UA_SEARCH_PHASE | _UA_HANDER_FRAME))); 222 223 if ( actions & _UA_END_OF_STACK ) { 224 exit(1); 225 } else { 226 return _URC_NO_REASON; 227 } 222 228 } 223 229 … … 282 288 version, actions, exception_class, unwind_exception, unwind_context); 283 289 284 // If we've reached the end of the stack then there is nothing much we can do... 285 if (actions & _UA_END_OF_STACK) return _URC_END_OF_STACK; 286 290 // Verify that actions follow the rules we expect. 291 // This function should never be called at the end of the stack. 292 verify(!(actions & _UA_END_OF_STACK)); 293 // Either only the search phase flag is set or... 287 294 if (actions & _UA_SEARCH_PHASE) { 295 verify(actions == _UA_SEARCH_PHASE); 288 296 __cfaabi_dbg_print_safe(" lookup phase"); 289 } 290 else if (actions & _UA_CLEANUP_PHASE) { 297 // ... we are in clean-up phase. 298 } else { 299 verify(actions & _UA_CLEANUP_PHASE); 291 300 __cfaabi_dbg_print_safe(" cleanup phase"); 292 } 293 // Just in case, probably can't actually happen 294 else { 295 printf(" error\n"); 296 return _URC_FATAL_PHASE1_ERROR; 301 // We shouldn't be the handler frame during forced unwind. 302 if (actions & _UA_HANDLER_FRAME) { 303 verify(!(actions & _UA_FORCE_UNWIND)); 304 __cfaabi_dbg_print_safe(" (handler frame)"); 305 } else if (actions & _UA_FORCE_UNWIND) { 306 __cfaabi_dbg_print_safe(" (force unwind)"); 307 } 297 308 } 298 309 … … 396 407 // This is only a cleanup handler, ignore it 397 408 __cfaabi_dbg_print_safe(" no action"); 398 } else if (actions & _UA_CLEANUP_PHASE){409 } else { 399 410 // In clean-up phase, no destructors here but this could be the handler. 400 411
Note: See TracChangeset
for help on using the changeset viewer.