diff -dur gcl-2.6.8.ORIG/configure gcl-2.6.8/configure
--- gcl-2.6.8.ORIG/configure 2009-04-27 09:50:47.000000000 -0600
+++ gcl-2.6.8/configure 2009-04-27 09:51:31.000000000 -0600
@@ -10024,9 +10024,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
@@ -10091,12 +10093,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;}
@@ -10153,12 +10154,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;}
@@ -10309,6 +10309,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include "h/unrandomize.h"
void gprof_cleanup() {}
int
@@ -10317,9 +10318,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 2009-04-27 09:50:47.000000000 -0600
+++ gcl-2.6.8/configure.in 2009-04-27 09:51:09.000000000 -0600
@@ -1104,9 +1104,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
@@ -1119,12 +1121,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)
@@ -1133,12 +1134,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)
@@ -1180,6 +1180,7 @@
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdlib.h>
+#include "h/unrandomize.h"
void gprof_cleanup() {}
int
@@ -1188,9 +1189,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 2009-04-27 09:51:09.000000000 -0600
@@ -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 2009-04-27 09:51:09.000000000 -0600
@@ -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)
{