OSDN Git Service

* unwind-dw2-fde.c (__register_frame_info_bases, __register_frame):
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2001 11:08:17 +0000 (11:08 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2001 11:08:17 +0000 (11:08 +0000)
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

gcc/ChangeLog
gcc/unwind-dw2-fde.c

index bab397a..ecf3e82 100644 (file)
@@ -1,3 +1,10 @@
+2001-11-20  Jakub Jelinek  <jakub@redhat.com>
+
+       * 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.
+
 2001-11-19  Geoffrey Keating  <geoffk@redhat.com>
 
        * configure.in (HAVE_AS_GDWARF2_DEBUG_FLAG): Define.
index 7052685..c8e6c5d 100644 (file)
@@ -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));
 }
 
 \f