Changes in libcfa/src/exception.c [cb20dcd:f1b6671]
- File:
-
- 1 edited
-
libcfa/src/exception.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/exception.c
rcb20dcd rf1b6671 10 10 // Created On : Mon Jun 26 15:13:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Apr 9 12:20:00 202013 // Update Count : 1 712 // Last Modified On : Mon Apr 06 14:40:00 2020 13 // Update Count : 15 14 14 // 15 15 … … 28 28 #include <unwind.h> 29 29 #include <bits/debug.hfa> 30 #include "stdhdr/assert.h"31 30 32 31 // FIX ME: temporary hack to keep ARM build working … … 217 216 struct _Unwind_Context * unwind_context, 218 217 void * stop_param) { 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 } 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; 228 222 } 229 223 … … 288 282 version, actions, exception_class, unwind_exception, unwind_context); 289 283 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... 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 294 287 if (actions & _UA_SEARCH_PHASE) { 295 verify(actions == _UA_SEARCH_PHASE);296 288 __cfaabi_dbg_print_safe(" lookup phase"); 297 // ... we are in clean-up phase. 298 } else { 299 verify(actions & _UA_CLEANUP_PHASE); 289 } 290 else if (actions & _UA_CLEANUP_PHASE) { 300 291 __cfaabi_dbg_print_safe(" cleanup phase"); 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 } 292 } 293 // Just in case, probably can't actually happen 294 else { 295 printf(" error\n"); 296 return _URC_FATAL_PHASE1_ERROR; 308 297 } 309 298 … … 407 396 // This is only a cleanup handler, ignore it 408 397 __cfaabi_dbg_print_safe(" no action"); 409 } else {398 } else if (actions & _UA_CLEANUP_PHASE) { 410 399 // In clean-up phase, no destructors here but this could be the handler. 411 400 … … 445 434 446 435 #pragma GCC push_options 447 #pragma GCC optimize(" no-toplevel-reorder")436 #pragma GCC optimize("O0") 448 437 449 438 // 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.