diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-01-09 18:20:55 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2012-01-09 18:20:55 +0000 |
commit | 3d137660a5e34ba65d4b2c1e13c887796b43378b (patch) | |
tree | 5d1af631f6932f93241c8a3097e503a89ffc4751 /libgcc/config/sparc | |
parent | fabe41e40f37003467d3376f1661a75e807813de (diff) | |
download | gcc-3d137660a5e34ba65d4b2c1e13c887796b43378b.zip gcc-3d137660a5e34ba65d4b2c1e13c887796b43378b.tar.gz gcc-3d137660a5e34ba65d4b2c1e13c887796b43378b.tar.bz2 |
sol2-unwind.h (sparc64_is_sighandler): Check that the purported sigacthandler address isn't null before dereferencing it.
* config/sparc/sol2-unwind.h (sparc64_is_sighandler): Check that the
purported sigacthandler address isn't null before dereferencing it.
(sparc_is_sighandler): Likewise.
From-SVN: r183020
Diffstat (limited to 'libgcc/config/sparc')
-rw-r--r-- | libgcc/config/sparc/sol2-unwind.h | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/libgcc/config/sparc/sol2-unwind.h b/libgcc/config/sparc/sol2-unwind.h index ea4c541..7d6bd22 100644 --- a/libgcc/config/sparc/sol2-unwind.h +++ b/libgcc/config/sparc/sol2-unwind.h @@ -124,10 +124,9 @@ sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes) /* This matches the call_user_handler pattern for Solaris 10. There are 2 cases so we look for the return address of the caller's caller frame in order to do more pattern matching. */ - unsigned int sah_pattern - = *(unsigned int *)(*(unsigned long *)(cfa + 176 + 15*8) - 4); + unsigned long sah_address = *(unsigned long *)(cfa + 176 + 15*8); - if (sah_pattern == 0x92100019) + if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019) /* This is the same setup as for Solaris 9, see below. */ *nframes = 3; else @@ -302,10 +301,9 @@ sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes) /* This matches the call_user_handler pattern for Solaris 10. There are 2 cases so we look for the return address of the caller's caller frame in order to do more pattern matching. */ - unsigned int sah_pattern - = *(unsigned int *)(*(unsigned int *)(cfa + 96 + 15*4) - 4); + unsigned int sah_address = *(unsigned int *)(cfa + 96 + 15*4); - if (sah_pattern == 0x92100019) + if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019) /* This is the same setup as for Solaris 9, see below. */ *nframes = 3; else |