summaryrefslogtreecommitdiff
path: root/gcc/unwind-dw2-fde.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2001-11-20 11:08:17 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2001-11-20 11:08:17 +0000
commit1093a4f3ba000c12f6dbb0cbc0f7e4b4dedf2cb6 (patch)
tree448df8be40b9b79f08946f787229e142913e7922 /gcc/unwind-dw2-fde.c
parent1a6f9700fdfc258198db6436b3015489850da8c4 (diff)
downloadgcc-1093a4f3ba000c12f6dbb0cbc0f7e4b4dedf2cb6.tar.gz
* unwind-dw2-fde.c (__register_frame_info_bases, __register_frame):
Don't register empty .eh_frame sections. (__deregister_frame_info_bases, __deregister_frame): Don't unregister them either. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47211 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/unwind-dw2-fde.c')
-rw-r--r--gcc/unwind-dw2-fde.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/gcc/unwind-dw2-fde.c b/gcc/unwind-dw2-fde.c
index 70526856a14..c8e6c5dc0de 100644
--- a/gcc/unwind-dw2-fde.c
+++ b/gcc/unwind-dw2-fde.c
@@ -73,6 +73,10 @@ void
__register_frame_info_bases (void *begin, struct object *ob,
void *tbase, void *dbase)
{
+ /* If .eh_frame is empty, don't register at all. */
+ if (*(uword *)begin == 0)
+ return;
+
ob->pc_begin = (void *)-1;
ob->tbase = tbase;
ob->dbase = dbase;
@@ -98,7 +102,13 @@ __register_frame_info (void *begin, struct object *ob)
void
__register_frame (void *begin)
{
- struct object *ob = (struct object *) malloc (sizeof (struct object));
+ struct object *ob;
+
+ /* If .eh_frame is empty, don't register at all. */
+ if (*(uword *)begin == 0)
+ return;
+
+ ob = (struct object *) malloc (sizeof (struct object));
__register_frame_info (begin, ob);
}
@@ -158,6 +168,10 @@ __deregister_frame_info_bases (void *begin)
struct object **p;
struct object *ob = 0;
+ /* If .eh_frame is empty, we haven't registered. */
+ if (*(uword *)begin == 0)
+ return;
+
init_object_mutex_once ();
__gthread_mutex_lock (&object_mutex);
@@ -207,7 +221,9 @@ __deregister_frame_info (void *begin)
void
__deregister_frame (void *begin)
{
- free (__deregister_frame_info (begin));
+ /* If .eh_frame is empty, we haven't registered. */
+ if (*(uword *)begin != 0)
+ free (__deregister_frame_info (begin));
}