aboutsummaryrefslogtreecommitdiff
path: root/libgcc/config/sparc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2012-01-09 18:20:55 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2012-01-09 18:20:55 +0000
commit3d137660a5e34ba65d4b2c1e13c887796b43378b (patch)
tree5d1af631f6932f93241c8a3097e503a89ffc4751 /libgcc/config/sparc
parentfabe41e40f37003467d3376f1661a75e807813de (diff)
downloadgcc-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.h10
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