mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-20 18:50:11 +08:00
libgo: print reason code if throwing unwind exception fails
Calls to _Unwind_RaiseException and friends *can* return due to bugs in libgo or memory corruption. When this occurs, print a message to stderr with the reason code before aborting to aid debugging. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261257
This commit is contained in:
parent
14d83c6f58
commit
28774a6015
@ -1,4 +1,4 @@
|
||||
cc1f7d613f9b0666bbf8aac3dd208d5adfe88546
|
||||
b73a8f17dfe8d7c7ecc9ccd0317be5abe71c5509
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
@ -59,20 +59,22 @@ void
|
||||
rethrowException ()
|
||||
{
|
||||
struct _Unwind_Exception *hdr;
|
||||
_Unwind_Reason_Code reason;
|
||||
|
||||
hdr = (struct _Unwind_Exception *) runtime_g()->exception;
|
||||
|
||||
#ifdef __USING_SJLJ_EXCEPTIONS__
|
||||
_Unwind_SjLj_Resume_or_Rethrow (hdr);
|
||||
reason = _Unwind_SjLj_Resume_or_Rethrow (hdr);
|
||||
#else
|
||||
#if defined(_LIBUNWIND_STD_ABI)
|
||||
_Unwind_RaiseException (hdr);
|
||||
reason = _Unwind_RaiseException (hdr);
|
||||
#else
|
||||
_Unwind_Resume_or_Rethrow (hdr);
|
||||
reason = _Unwind_Resume_or_Rethrow (hdr);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Rethrowing the exception should not return. */
|
||||
runtime_printf ("failed to rethrow unwind exception (reason=%d)\n", reason);
|
||||
abort();
|
||||
}
|
||||
|
||||
@ -105,6 +107,7 @@ throwException ()
|
||||
{
|
||||
struct _Unwind_Exception *hdr;
|
||||
uintptr align;
|
||||
_Unwind_Reason_Code reason;
|
||||
|
||||
hdr = (struct _Unwind_Exception *)runtime_g ()->exception;
|
||||
|
||||
@ -119,12 +122,13 @@ throwException ()
|
||||
hdr->exception_cleanup = NULL;
|
||||
|
||||
#ifdef __USING_SJLJ_EXCEPTIONS__
|
||||
_Unwind_SjLj_RaiseException (hdr);
|
||||
reason = _Unwind_SjLj_RaiseException (hdr);
|
||||
#else
|
||||
_Unwind_RaiseException (hdr);
|
||||
reason = _Unwind_RaiseException (hdr);
|
||||
#endif
|
||||
|
||||
/* Raising an exception should not return. */
|
||||
runtime_printf ("failed to throw unwind exception (reason=%d)\n", reason);
|
||||
abort ();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user