Changeset 7df014f for libcfa/src
- Timestamp:
- Apr 13, 2020, 3:40:48 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:
- 2d8f7b0
- Parents:
- 92976d9 (diff), 0100882 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/exception.c
r92976d9 r7df014f 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 : Thr Apr 9 12:20:00 2020 13 // Update Count : 17 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 … … 434 445 435 446 #pragma GCC push_options 436 #pragma GCC optimize(" O0")447 #pragma GCC optimize("no-toplevel-reorder") 437 448 438 449 // Try statements are hoisted out see comments for details. While this could probably be unique
Note:
See TracChangeset
for help on using the changeset viewer.