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. */