From 55fae1a97f164c030db1b90d5d804ecc583a1ea9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 20 Nov 2001 12:08:17 +0100 Subject: [PATCH] unwind-dw2-fde.c (__register_frame_info_bases, [...]): Don't register empty .eh_frame sections. * 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. From-SVN: r47211 --- gcc/ChangeLog | 7 +++++++ gcc/unwind-dw2-fde.c | 20 ++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bab397a..ecf3e82 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2001-11-20 Jakub Jelinek + + * 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 * configure.in (HAVE_AS_GDWARF2_DEBUG_FLAG): Define. diff --git a/gcc/unwind-dw2-fde.c b/gcc/unwind-dw2-fde.c index 7052685..c8e6c5d 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)); } -- 2.7.4