On Tuesday 03 February 2026 11:33:22 LIU Hao wrote:
> 在 2025-12-26 07:33, Pali Rohár 写道:
> > __mingw_SEH_error_handler is processing only exceptions, not unwinds.
> > ---
> > mingw-w64-crt/crt/crt_handler.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/mingw-w64-crt/crt/crt_handler.c
> > b/mingw-w64-crt/crt/crt_handler.c
> > index 56d844730fb1..51752b6dd641 100644
> > --- a/mingw-w64-crt/crt/crt_handler.c
> > +++ b/mingw-w64-crt/crt/crt_handler.c
> > @@ -85,6 +85,9 @@ __mingw_SEH_error_handler (struct _EXCEPTION_RECORD*
> > ExceptionRecord,
> > void (*old_handler) (int);
> > int reset_fpu = 0;
> > + if (ExceptionRecord->ExceptionFlags & (EXCEPTION_UNWINDING |
> > EXCEPTION_EXIT_UNWIND))
> > + return ExceptionContinueSearch;
> > +
> > switch (ExceptionRecord->ExceptionCode)
> > {
> > case EXCEPTION_ACCESS_VIOLATION:
>
> There's no need to check for `EXCEPTION_EXIT_UNWIND`, which is set (by
> calling `RtlUnwind()` with null target pointers) always also with
> `EXCEPTION_UNWINDING`. On ARM64 testing two bits and branching would require
> one extra instruction.
Ok. I was not originally sure, so I added also second bit.
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public