frame.h: Update some comments.
* frame.h: Update some comments. * defaults.h (TARGET_ATTRIBUTE_WEAK): Define. * crtstuff.c (__register_frame_info, __deregister_frame_info): Declare using TARGET_WEAK_ATTRIBUTE. (__do_global_dtors_aux): Check if __deregister_frame_info is zero before calling it. (__do_global_dtors): Likewise. (frame_dummy): Check if __register_frame_info is zero before calling it. (__frame_dummy): Likewise. Co-Authored-By: Jeffrey A Law <law@cygnus.com> From-SVN: r25487
This commit is contained in:
parent
b78abfe951
commit
8f08ea1e47
@ -1,3 +1,17 @@
|
||||
Sat Feb 27 22:48:38 1999 H.J. Lu (hjl@gnu.org)
|
||||
Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* frame.h: Update some comments.
|
||||
* defaults.h (TARGET_ATTRIBUTE_WEAK): Define.
|
||||
* crtstuff.c (__register_frame_info, __deregister_frame_info): Declare
|
||||
using TARGET_WEAK_ATTRIBUTE.
|
||||
(__do_global_dtors_aux): Check if __deregister_frame_info is
|
||||
zero before calling it.
|
||||
(__do_global_dtors): Likewise.
|
||||
(frame_dummy): Check if __register_frame_info is zero before
|
||||
calling it.
|
||||
(__frame_dummy): Likewise.
|
||||
|
||||
Sat Feb 27 19:18:24 1999 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* SERVICE: Update from the FSF.
|
||||
|
@ -56,6 +56,34 @@ Boston, MA 02111-1307, USA. */
|
||||
#include <stddef.h>
|
||||
#include "frame.h"
|
||||
|
||||
/* We do not want to add the weak attribute to the declarations of these
|
||||
routines in frame.h because that will cause the definition of these
|
||||
symbols to be weak as well.
|
||||
|
||||
This exposes a core issue, how to handle creating weak references vs
|
||||
how to create weak definitions. Either we have to have the definition
|
||||
of TARGET_WEAK_ATTRIBUTE be conditional in the shared header files or
|
||||
have a second declaration if we want a function's references to be weak,
|
||||
but not its definition.
|
||||
|
||||
Making TARGET_WEAK_ATTRIBUTE conditional seems like a good solution until
|
||||
one thinks about scaling to larger problems -- ie, the condition under
|
||||
which TARGET_WEAK_ATTRIBUTE is active will eventually get far too
|
||||
complicated.
|
||||
|
||||
So, we take an approach similar to #pragma weak -- we have a second
|
||||
declaration for functions that we want to have weak references.
|
||||
|
||||
Neither way is particularly good. */
|
||||
|
||||
/* References to __register_frame_info and __deregister_frame_info should
|
||||
be weak in this file if at all possible. */
|
||||
extern void __register_frame_info (void *, struct object *)
|
||||
TARGET_ATTRIBUTE_WEAK;
|
||||
|
||||
extern void *__deregister_frame_info (void *)
|
||||
TARGET_ATTRIBUTE_WEAK;
|
||||
|
||||
#ifndef OBJECT_FORMAT_MACHO
|
||||
|
||||
/* Provide default definitions for the pseudo-ops used to switch to the
|
||||
@ -144,7 +172,8 @@ __do_global_dtors_aux ()
|
||||
}
|
||||
|
||||
#ifdef EH_FRAME_SECTION_ASM_OP
|
||||
__deregister_frame_info (__EH_FRAME_BEGIN__);
|
||||
if (__deregister_frame_info)
|
||||
__deregister_frame_info (__EH_FRAME_BEGIN__);
|
||||
#endif
|
||||
completed = 1;
|
||||
}
|
||||
@ -172,7 +201,8 @@ static void
|
||||
frame_dummy ()
|
||||
{
|
||||
static struct object object;
|
||||
__register_frame_info (__EH_FRAME_BEGIN__, &object);
|
||||
if (__register_frame_info)
|
||||
__register_frame_info (__EH_FRAME_BEGIN__, &object);
|
||||
}
|
||||
|
||||
static void __attribute__ ((__unused__))
|
||||
@ -256,7 +286,8 @@ __do_global_dtors ()
|
||||
(*p) ();
|
||||
|
||||
#ifdef EH_FRAME_SECTION_ASM_OP
|
||||
__deregister_frame_info (__EH_FRAME_BEGIN__);
|
||||
if (__deregister_frame_info)
|
||||
__deregister_frame_info (__EH_FRAME_BEGIN__);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -268,7 +299,8 @@ void
|
||||
__frame_dummy ()
|
||||
{
|
||||
static struct object object;
|
||||
__register_frame_info (__EH_FRAME_BEGIN__, &object);
|
||||
if (__register_frame_info)
|
||||
__register_frame_info (__EH_FRAME_BEGIN__, &object);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -133,6 +133,22 @@ do { fprintf (FILE, "\t%s\t", ASM_LONG); \
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* If the target supports weak symbols, define TARGET_ATTRIBUTE_WEAK to
|
||||
provide a weak attribute. Else define it to nothing.
|
||||
|
||||
This would normally belong in gansidecl.h, but SUPPORTS_WEAK is
|
||||
not available at that time.
|
||||
|
||||
Note, this is only for use by target files which we know are to be
|
||||
compiled by GCC. */
|
||||
#ifndef TARGET_ATTRIBUTE_WEAK
|
||||
# if SUPPORTS_WEAK
|
||||
# define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak))
|
||||
# else
|
||||
# define TARGET_ATTRIBUTE_WEAK
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
|
||||
the rest of the DWARF 2 frame unwind support is also provided. */
|
||||
#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
|
||||
|
@ -54,6 +54,11 @@ struct object {
|
||||
struct object *next;
|
||||
};
|
||||
|
||||
/* Note the following routines are exported interfaces from libgcc; do not
|
||||
change these interfaces. Instead create new interfaces. Also note
|
||||
references to these functions may be made weak in files where they
|
||||
are referenced. */
|
||||
|
||||
extern void __register_frame (void * );
|
||||
extern void __register_frame_table (void *);
|
||||
extern void __deregister_frame (void *);
|
||||
|
Loading…
Reference in New Issue
Block a user