Blob Blame History Raw
diff -dur gcl-2.6.8.ORIG/configure gcl-2.6.8/configure
--- gcl-2.6.8.ORIG/configure	2008-12-29 16:24:30.000000000 -0700
+++ gcl-2.6.8/configure	2008-12-29 16:45:51.000000000 -0700
@@ -9880,9 +9880,11 @@
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
+		    #define CAN_UNRANDOMIZE_SBRK 1
+		    #include "h/unrandomize.h"
 		    void gprof_cleanup() {}
 		    int main(int argc,char *argv[],char *envp[]) {
-	            #include "h/unrandomize.h"
+		    UNRANDOMIZE_SBRK;
 		    return 0;}
 _ACEOF
 rm -f conftest$ac_exeext
@@ -9947,12 +9949,11 @@
 /* end confdefs.h.  */
 
 		    #include <stdio.h>
+		    #include "h/unrandomize.h"
 	            void gprof_cleanup() {}
 		    int main(int argc,char * argv[],char * envp[]) {
 			FILE *f;
-			#ifdef CAN_UNRANDOMIZE_SBRK
-			#include "h/unrandomize.h"
-			#endif
+			UNRANDOMIZE_SBRK;
 			if (!(f=fopen("conftest1","w"))) return -1;
 			fprintf(f,"%u",sbrk(0));
 			return 0;}
@@ -10009,12 +10010,11 @@
 /* end confdefs.h.  */
 
 		    #include <stdio.h>
+		    #include "h/unrandomize.h"
                     void gprof_cleanup() {}
 		    int main(int argc,char * argv[],char * envp[]) {
 			FILE *f;
-			#ifdef CAN_UNRANDOMIZE_SBRK
-			#include "h/unrandomize.h"
-			#endif
+			UNRANDOMIZE_SBRK;
 			if (!(f=fopen("conftest1","w"))) return -1;
 			fprintf(f,"%u",sbrk(0));
 			return 0;}
@@ -10165,6 +10165,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include "h/unrandomize.h"
 
 void gprof_cleanup() {}
 int
@@ -10173,9 +10174,7 @@
   char *b,*b1;
   FILE *fp;
 
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include "h/unrandomize.h"
-#endif
+  UNRANDOMIZE_SBRK;
   b = (void *) malloc(1000);
   fp = fopen("conftest1","w");
 
diff -dur gcl-2.6.8.ORIG/configure.in gcl-2.6.8/configure.in
--- gcl-2.6.8.ORIG/configure.in	2008-12-29 16:24:30.000000000 -0700
+++ gcl-2.6.8/configure.in	2008-12-29 16:37:26.000000000 -0700
@@ -1087,9 +1087,11 @@
 
 	AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
 	AC_RUN_IFELSE([AC_LANG_SOURCE([[
+		    #define CAN_UNRANDOMIZE_SBRK 1
+		    #include "h/unrandomize.h"
 		    void gprof_cleanup() {}
 		    int main(int argc,char *argv[],char *envp[]) {
-	            #include "h/unrandomize.h"
+		    UNRANDOMIZE_SBRK;
 		    return 0;}]])],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
 
 	if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
@@ -1102,12 +1104,11 @@
 	AC_MSG_CHECKING([that sbrk is (now) non-random])
 	AC_RUN_IFELSE([AC_LANG_SOURCE([[
 		    #include <stdio.h>
+		    #include "h/unrandomize.h"
 	            void gprof_cleanup() {}
 		    int main(int argc,char * argv[],char * envp[]) {
 			FILE *f;
-			#ifdef CAN_UNRANDOMIZE_SBRK
-			#include "h/unrandomize.h"
-			#endif
+			UNRANDOMIZE_SBRK;
 			if (!(f=fopen("conftest1","w"))) return -1;
 			fprintf(f,"%u",sbrk(0));
 			return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
@@ -1116,12 +1117,11 @@
 	fi
 	AC_RUN_IFELSE([AC_LANG_SOURCE([[
 		    #include <stdio.h>
+		    #include "h/unrandomize.h"
                     void gprof_cleanup() {}
 		    int main(int argc,char * argv[],char * envp[]) {
 			FILE *f;
-			#ifdef CAN_UNRANDOMIZE_SBRK
-			#include "h/unrandomize.h"
-			#endif
+			UNRANDOMIZE_SBRK;
 			if (!(f=fopen("conftest1","w"))) return -1;
 			fprintf(f,"%u",sbrk(0));
 			return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
@@ -1163,6 +1163,7 @@
 AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #include <stdlib.h>
+#include "h/unrandomize.h"
 
 void gprof_cleanup() {}
 int
@@ -1171,9 +1172,7 @@
   char *b,*b1;
   FILE *fp;
 
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include "h/unrandomize.h"
-#endif
+  UNRANDOMIZE_SBRK;
   b = (void *) malloc(1000);
   fp = fopen("conftest1","w");
 
diff -dur gcl-2.6.8.ORIG/h/unrandomize.h gcl-2.6.8/h/unrandomize.h
--- gcl-2.6.8.ORIG/h/unrandomize.h	2008-08-20 19:13:58.000000000 -0600
+++ gcl-2.6.8/h/unrandomize.h	2008-12-29 16:42:15.000000000 -0700
@@ -1,25 +1,33 @@
+#include <stdlib.h>
 #include <sys/personality.h>
 #include <syscall.h>
 #include <unistd.h>
 #include <alloca.h>
 
-{
+#ifdef CAN_UNRANDOMIZE_SBRK
+# ifdef GCL_GPROF
+#  define GPROF_CLEANUP gprof_cleanup()
+# else
+#  define GPROF_CLEANUP
+# endif
 
-  long pers = personality(0xffffffffUL);
-  if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE"))
-    if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) {
-      int i;
-      char **n;
-      for (i=0;envp[i];i++);
-      n=alloca((i+2)*sizeof(*n));
-      n[i+1]=0;
-      n[i--]="GCL_UNRANDOMIZE=t";
-      for (;i>=0;i--)
-	n[i]=envp[i];
-#ifdef GCL_GPROF
-      gprof_cleanup();
+#define UNRANDOMIZE_SBRK do						\
+{									\
+  long pers = personality(0xffffffffUL);				\
+  if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE"))	\
+    if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) { \
+      int i;								\
+      char **n;								\
+      for (i=0;envp[i];i++);						\
+      n=alloca((i+2)*sizeof(*n));					\
+      n[i+1]=0;								\
+      n[i--]="GCL_UNRANDOMIZE=t";					\
+      for (;i>=0;i--)							\
+	n[i]=envp[i];							\
+      GPROF_CLEANUP;							\
+      execve(*argv,argv,n);						\
+    }									\
+ } while(0)
+#else
+# define UNRANDOMIZE_SBRK
 #endif
-      execve(*argv,argv,n);    
-    }
-
-}
diff -dur gcl-2.6.8.ORIG/o/main.c gcl-2.6.8/o/main.c
--- gcl-2.6.8.ORIG/o/main.c	2008-07-31 13:12:59.000000000 -0600
+++ gcl-2.6.8/o/main.c	2008-12-29 16:43:14.000000000 -0700
@@ -51,6 +51,7 @@
 #include <signal.h>
 #endif
 #include "page.h"
+#include "unrandomize.h"
 
 bool saving_system ;
 
@@ -125,9 +126,7 @@
 #endif
 #endif
 
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include "unrandomize.h"
-#endif
+	UNRANDOMIZE_SBRK;
 
 #if defined(DARWIN)
 	{