@@ -156,17 +156,27 @@ unsafe fn unwind_tracer(mut frames: &mut ::StackFrames, exception: *mut _Unwind_
156156pub unsafe extern "C" fn _Unwind_Backtrace ( trace : _Unwind_Trace_Fn ,
157157 trace_argument : * mut c_void )
158158 -> _Unwind_Reason_Code {
159+ let mut reterr = _Unwind_Reason_Code:: _URC_END_OF_STACK;
159160 DwarfUnwinder :: default ( ) . trace ( |mut frames| {
160- while let Some ( frame) = frames. next ( ) . unwrap ( ) {
161- let mut ctx = _Unwind_Context {
162- lsda : frame. lsda . unwrap_or ( 0 ) ,
163- ip : frames. registers ( ) [ DwarfRegister :: IP ] . unwrap ( ) ,
164- initial_address : frame. initial_address ,
165- registers : frames. registers ( ) ,
166- } ;
167-
168- trace ( & mut ctx, trace_argument) ;
161+ loop {
162+ match frames. next ( ) {
163+ Ok ( Some ( frame) ) => {
164+ let mut ctx = _Unwind_Context {
165+ lsda : frame. lsda . unwrap_or ( 0 ) ,
166+ ip : frames. registers ( ) [ DwarfRegister :: IP ] . unwrap ( ) ,
167+ initial_address : frame. initial_address ,
168+ registers : frames. registers ( ) ,
169+ } ;
170+
171+ trace ( & mut ctx, trace_argument) ;
172+ } ,
173+ Ok ( None ) => break ,
174+ Err ( err) => {
175+ reterr = _Unwind_Reason_Code:: _URC_FATAL_PHASE1_ERROR;
176+ break ;
177+ }
178+ }
169179 }
170180 } ) ;
171- _Unwind_Reason_Code :: _URC_END_OF_STACK
181+ reterr
172182}
0 commit comments