mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-11 11:50:06 +00:00
Use PTR_MANGLE on libgcc unwinder function pointers.
This commit is contained in:
parent
f0481d971e
commit
3eb5d2fc71
@ -1,3 +1,10 @@
|
|||||||
|
2014-12-16 Roland McGrath <roland@hack.frob.com>
|
||||||
|
|
||||||
|
* sysdeps/gnu/unwind-resume.c: #include <sysdep.h>.
|
||||||
|
(init): Apply PTR_MANGLE to pointers before storing them.
|
||||||
|
(_Unwind_Resume, __gcc_personality_v0): Apply PTR_DEMANGLE to pointers
|
||||||
|
before using them.
|
||||||
|
|
||||||
2014-12-16 Joseph Myers <joseph@codesourcery.com>
|
2014-12-16 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
[BZ #17719]
|
[BZ #17719]
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
#include <gnu/lib-names.h>
|
#include <gnu/lib-names.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
|
static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
|
||||||
__attribute__ ((noreturn));
|
__attribute__ ((noreturn));
|
||||||
@ -41,7 +42,9 @@ init (void)
|
|||||||
__libc_fatal (LIBGCC_S_SO
|
__libc_fatal (LIBGCC_S_SO
|
||||||
" must be installed for pthread_cancel to work\n");
|
" must be installed for pthread_cancel to work\n");
|
||||||
|
|
||||||
|
PTR_MANGLE (resume);
|
||||||
libgcc_s_resume = resume;
|
libgcc_s_resume = resume;
|
||||||
|
PTR_MANGLE (personality);
|
||||||
libgcc_s_personality = personality;
|
libgcc_s_personality = personality;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +53,10 @@ _Unwind_Resume (struct _Unwind_Exception *exc)
|
|||||||
{
|
{
|
||||||
if (__glibc_unlikely (libgcc_s_resume == NULL))
|
if (__glibc_unlikely (libgcc_s_resume == NULL))
|
||||||
init ();
|
init ();
|
||||||
(*libgcc_s_resume) (exc);
|
|
||||||
|
__typeof (libgcc_s_resume) resume = libgcc_s_resume;
|
||||||
|
PTR_DEMANGLE (resume);
|
||||||
|
(*resume) (exc);
|
||||||
}
|
}
|
||||||
|
|
||||||
_Unwind_Reason_Code
|
_Unwind_Reason_Code
|
||||||
@ -61,6 +67,9 @@ __gcc_personality_v0 (int version, _Unwind_Action actions,
|
|||||||
{
|
{
|
||||||
if (__glibc_unlikely (libgcc_s_personality == NULL))
|
if (__glibc_unlikely (libgcc_s_personality == NULL))
|
||||||
init ();
|
init ();
|
||||||
return (*libgcc_s_personality) (version, actions, exception_class,
|
|
||||||
ue_header, context);
|
__typeof (libgcc_s_personality) personality = libgcc_s_personality;
|
||||||
|
PTR_DEMANGLE (personality);
|
||||||
|
|
||||||
|
return (*personality) (version, actions, exception_class, ue_header, context);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user