Mercurial > emacs
comparison src/emacs.c @ 98957:9fe4a5c6bf9c
(main): Unconditionally set PER_LINUX32 and exec
temacs when dumping if HAVE_PERSONALITY_LINUX32 is defined
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Tue, 21 Oct 2008 06:32:28 +0000 |
parents | bc9970afd5be |
children | 638063658f67 |
comparison
equal
deleted
inserted
replaced
98956:7505448cbcf2 | 98957:9fe4a5c6bf9c |
---|---|
210 static void *my_heap_start; | 210 static void *my_heap_start; |
211 | 211 |
212 /* The gap between BSS end and heap start as far as we can tell. */ | 212 /* The gap between BSS end and heap start as far as we can tell. */ |
213 static unsigned long heap_bss_diff; | 213 static unsigned long heap_bss_diff; |
214 | 214 |
215 /* If the gap between BSS end and heap start is larger than this we try to | 215 /* If the gap between BSS end and heap start is larger than this |
216 work around it, and if that fails, output a warning in dump-emacs. */ | 216 output a warning in dump-emacs. */ |
217 #define MAX_HEAP_BSS_DIFF (1024*1024) | 217 #define MAX_HEAP_BSS_DIFF (1024*1024) |
218 | 218 |
219 | 219 |
220 #ifdef HAVE_WINDOW_SYSTEM | 220 #ifdef HAVE_WINDOW_SYSTEM |
221 extern Lisp_Object Vinitial_window_system; | 221 extern Lisp_Object Vinitial_window_system; |
859 exit (0); | 859 exit (0); |
860 } | 860 } |
861 } | 861 } |
862 | 862 |
863 #ifdef HAVE_PERSONALITY_LINUX32 | 863 #ifdef HAVE_PERSONALITY_LINUX32 |
864 /* See if there is a gap between the end of BSS and the heap. | |
865 In that case, set personality and exec ourself again. */ | |
866 if (!initialized | 864 if (!initialized |
867 && (strcmp (argv[argc-1], "dump") == 0 | 865 && (strcmp (argv[argc-1], "dump") == 0 |
868 || strcmp (argv[argc-1], "bootstrap") == 0) | 866 || strcmp (argv[argc-1], "bootstrap") == 0) |
869 && heap_bss_diff > MAX_HEAP_BSS_DIFF) | 867 && ! getenv ("EMACS_HEAP_EXEC")) |
870 { | 868 { |
871 if (! getenv ("EMACS_HEAP_EXEC")) | 869 /* Set this so we only do this once. */ |
872 { | 870 putenv("EMACS_HEAP_EXEC=true"); |
873 /* Set this so we only do this once. */ | 871 |
874 putenv("EMACS_HEAP_EXEC=true"); | 872 /* A flag to turn off address randomization which is introduced |
875 | 873 in linux kernel shipped with fedora core 4 */ |
876 /* A flag to turn off address randomization which is introduced | |
877 in linux kernel shipped with fedora core 4 */ | |
878 #define ADD_NO_RANDOMIZE 0x0040000 | 874 #define ADD_NO_RANDOMIZE 0x0040000 |
879 personality (PER_LINUX32 | ADD_NO_RANDOMIZE); | 875 personality (PER_LINUX32 | ADD_NO_RANDOMIZE); |
880 #undef ADD_NO_RANDOMIZE | 876 #undef ADD_NO_RANDOMIZE |
881 | 877 |
882 execvp (argv[0], argv); | 878 execvp (argv[0], argv); |
883 | 879 |
884 /* If the exec fails, try to dump anyway. */ | 880 /* If the exec fails, try to dump anyway. */ |
885 perror ("execvp"); | 881 perror ("execvp"); |
886 } | |
887 } | 882 } |
888 #endif /* HAVE_PERSONALITY_LINUX32 */ | 883 #endif /* HAVE_PERSONALITY_LINUX32 */ |
889 | 884 |
890 | 885 |
891 /* Map in shared memory, if we are using that. */ | 886 /* Map in shared memory, if we are using that. */ |