unwind-dw2-fde.c (__deregister_frame_info): Stubbify in favour of...
* unwind-dw2-fde.c (__deregister_frame_info): Stubbify in favour of... (__deregister_frame_info_bases): New. * unwind-dw2-fde.h: Declare it. * libgcc-std.ver: Export it. * crtstuff.c (__do_global_dtors_aux): Call it if we would have called __register_frame_info_bases. From-SVN: r42473
This commit is contained in:
parent
b5e85669dd
commit
101fa48cd8
@ -1,3 +1,12 @@
|
||||
2001-05-22 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* unwind-dw2-fde.c (__deregister_frame_info): Stubbify in favour of...
|
||||
(__deregister_frame_info_bases): New.
|
||||
* unwind-dw2-fde.h: Declare it.
|
||||
* libgcc-std.ver: Export it.
|
||||
* crtstuff.c (__do_global_dtors_aux): Call it if we would have
|
||||
called __register_frame_info_bases.
|
||||
|
||||
2001-05-22 Loren J. Rittle <ljrittle@acm.org>
|
||||
|
||||
* config/freebsd.h (FBSD_CPP_PREDEFINES): Use #endif/#if pair
|
||||
|
@ -95,6 +95,8 @@ extern void __register_frame_info_bases (void *, struct object *,
|
||||
TARGET_ATTRIBUTE_WEAK;
|
||||
extern void *__deregister_frame_info (void *)
|
||||
TARGET_ATTRIBUTE_WEAK;
|
||||
extern void *__deregister_frame_info_bases (void *)
|
||||
TARGET_ATTRIBUTE_WEAK;
|
||||
|
||||
#ifndef OBJECT_FORMAT_MACHO
|
||||
|
||||
@ -210,9 +212,17 @@ __do_global_dtors_aux (void)
|
||||
}
|
||||
|
||||
#ifdef EH_FRAME_SECTION_ASM_OP
|
||||
#if defined(CRT_GET_RFIB_TEXT) || defined(CRT_GET_RFIB_DATA)
|
||||
/* If we used the new __register_frame_info_bases interface,
|
||||
make sure that we deregister from the same place. */
|
||||
if (__deregister_frame_info_bases)
|
||||
__deregister_frame_info_bases (__EH_FRAME_BEGIN__);
|
||||
#else
|
||||
if (__deregister_frame_info)
|
||||
__deregister_frame_info (__EH_FRAME_BEGIN__);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
completed = 1;
|
||||
}
|
||||
|
||||
|
@ -125,6 +125,7 @@ GCC_3.0 {
|
||||
_Unwind_SetIP
|
||||
__deregister_frame
|
||||
__deregister_frame_info
|
||||
__deregister_frame_info_bases
|
||||
__register_frame
|
||||
__register_frame_info
|
||||
__register_frame_info_bases
|
||||
|
@ -140,9 +140,19 @@ __register_frame_table (void *begin)
|
||||
}
|
||||
|
||||
/* Called from crtbegin.o to deregister the unwind info for an object. */
|
||||
/* ??? Glibc has for a while now exported __register_frame_info and
|
||||
__deregister_frame_info. If we call __register_frame_info_bases
|
||||
from crtbegin (wherein it is declared weak), and this object does
|
||||
not get pulled from libgcc.a for other reasons, then the
|
||||
invocation of __deregister_frame_info will be resolved from glibc.
|
||||
Since the registration did not happen there, we'll abort.
|
||||
|
||||
Therefore, declare a new deregistration entry point that does the
|
||||
exact same thing, but will resolve to the same library as
|
||||
implements __register_frame_info_bases. */
|
||||
|
||||
void *
|
||||
__deregister_frame_info (void *begin)
|
||||
__deregister_frame_info_bases (void *begin)
|
||||
{
|
||||
struct object **p;
|
||||
struct object *ob = 0;
|
||||
@ -187,6 +197,18 @@ __deregister_frame_info (void *begin)
|
||||
return (void *) ob;
|
||||
}
|
||||
|
||||
#ifdef ASM_OUTPUT_DEF
|
||||
void *
|
||||
__deregister_frame_info (void *)
|
||||
__attribute__((alias(__USER_LABEL_PREFIX__ "__deregister_frame_info_bases")));
|
||||
#else
|
||||
void *
|
||||
__deregister_frame_info (void *begin)
|
||||
{
|
||||
return __deregister_frame_info_bases (begin);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
__deregister_frame (void *begin)
|
||||
{
|
||||
|
@ -94,6 +94,7 @@ extern void __register_frame_info_table_bases (void *, struct object *,
|
||||
extern void __register_frame_info_table (void *, struct object *);
|
||||
extern void __register_frame_table (void *);
|
||||
extern void *__deregister_frame_info (void *);
|
||||
extern void *__deregister_frame_info_bases (void *);
|
||||
extern void __deregister_frame (void *);
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user