diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-20 11:08:17 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-20 11:08:17 +0000 |
commit | 1093a4f3ba000c12f6dbb0cbc0f7e4b4dedf2cb6 (patch) | |
tree | 448df8be40b9b79f08946f787229e142913e7922 /gcc/unwind-dw2-fde.c | |
parent | 1a6f9700fdfc258198db6436b3015489850da8c4 (diff) | |
download | gcc-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.c | 20 |
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)); } |