m4-commit@gnu.org
[Top] [All Lists]

Changes to m4/src/stackovf.c,v

Subject: Changes to m4/src/stackovf.c,v
From: Eric Blake
Date: Thu, 03 Aug 2006 13:15:45 +0000
CVSROOT:        /sources/m4
Module name:    m4
Changes by:     Eric Blake <ericb>      06/08/03 13:15:43

Index: src/stackovf.c
===================================================================
RCS file: /sources/m4/m4/src/stackovf.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- src/stackovf.c      22 Jul 2006 22:38:14 -0000      1.19
+++ src/stackovf.c      3 Aug 2006 13:15:43 -0000       1.20
@@ -124,7 +124,7 @@
 extern int     sigvec          (int, struct sigvec *, struct sigvec *);
 #endif
 
-static const char *stackbuf;
+static void *stackbuf;
 static const char *stackbot;
 static const char *stackend;
 static const char *arg0;
@@ -365,14 +365,21 @@
   {
     stack_t ss;
 
-    stackbuf = (char *) xmalloc (SIGSTKSZ);
+    stackbuf = xmalloc (SIGSTKSZ);
 
     ss.ss_size = SIGSTKSZ;
-    ss.ss_sp = (void *) stackbuf;
+    ss.ss_sp = stackbuf;
     ss.ss_flags = 0;
     if (sigaltstack (&ss, NULL) < 0)
       {
-       free ((void *) stackbuf);
+       /* Oops - sigstack exists but doesn't work.  We can't install
+          the overflow detector, but should gracefully treat it as
+          though sigstack doesn't exist.  For example, this happens
+          when compiled with Linux 2.1 headers but run against Linux
+          2.0 kernel.  */
+       free (stackbuf);
+       if (errno == ENOSYS)
+         return;
        error (EXIT_FAILURE, errno, "sigaltstack");
       }
   }
@@ -381,13 +388,20 @@
 
   {
     struct sigstack ss;
-    stackbuf = (char *) xmalloc (2 * SIGSTKSZ);
+    stackbuf = xmalloc (2 * SIGSTKSZ);
 
     ss.ss_sp = stackbuf + SIGSTKSZ;
     ss.ss_onstack = 0;
     if (sigstack (&ss, NULL) < 0)
       {
-       free ((void *) stackbuf);
+       /* Oops - sigstack exists but doesn't work.  We can't install
+          the overflow detector, but should gracefully treat it as
+          though sigstack doesn't exist.  For example, this happens
+          when compiled with Linux 2.1 headers but run against Linux
+          2.0 kernel.  */
+       free (stackbuf);
+       if (errno == ENOSYS)
+         return;
        error (EXIT_FAILURE, errno, "sigstack");
       }
   }


<Prev in Thread] Current Thread [Next in Thread>
  • Changes to m4/src/stackovf.c,v, Eric Blake <=