]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sol2-unwind.h (sparc64_is_sighandler): Check that the purported sigacthandler address...
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 9 Jan 2012 18:21:52 +0000 (18:21 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 9 Jan 2012 18:21:52 +0000 (18:21 +0000)
* 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: r183021

gcc/ChangeLog
gcc/config/sparc/sol2-unwind.h

index ca61c0ba976eaa011c1b140b2d9115a628e465a9..fd296121e94ce3d56274a1bf7e706c6065fdffaf 100644 (file)
@@ -1,3 +1,9 @@
+2012-01-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/sparc/sol2-unwind.h (sparc64_is_sighandler): Check that the
+       purported sigacthandler address isn't null before dereferencing it.
+       (sparc_is_sighandler): Likewise.
+
 2012-01-09  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
 
        Backport from mainline
index ae7a57172694695a1292ee52fdcc643b4c359421..db10807425089dcaf5854678709e1af1c3a4211b 100644 (file)
@@ -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
@@ -293,10 +292,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