diff src/vm-limit.c @ 109168:fb5779a6cf4b

Simplify start_of_data, start_of_text and related code. * src/mem-limits.h: Remove !emacs and _LIBC conditional code. (start_of_data): Merge into start_of_data function. * src/sysdep.c (start_of_text): Remove. Move simplified versions of it in the only users: src/unexaix.c and unexec.c. (read_input_waiting): Remove local declaration of quit_char. (start, etext): Remove declarations. (start_of_data): Merge with the version in mem-limits.h and move to vm-limits.c. * src/vm-limit.c (start_of_data): Merged and simplified version of the code formerly in mem-limits.h and sysdep.c. * src/unexec.c (start): New declaration, moved from sysdep.c. (start_of_text): Simplified version of the code formerly in sysdep.c. * unexaix.c (start_of_text): Simplified version of the code formerly in sysdep.c. * src/m/alpha.h (HAVE_TEXT_START): Remove. (TEXT_START): Move ... * src/unexalpha.c (TEXT_START): ... here. * src/s/hpux10-20.h (TEXT_START): Remove. * src/s/darwin.h (TEXT_START): * src/m/mips.h (TEXT_START): * src/m/macppc.h (HAVE_TEXT_START): * src/m/m68k.h (TEXT_START): * src/m/iris4d.h (TEXT_START): * src/m/intel386.h (TEXT_START): * src/m/ibmrs6000.h (TEXT_START): * src/m/ia64.h (HAVE_TEXT_START): * src/s/msdos.h (TEXT_START): Likewise.
author Dan Nicolaescu <dann@ics.uci.edu>
date Wed, 07 Jul 2010 20:03:52 -0700
parents d0090a8b66c3
children e856a274549b
line wrap: on
line diff
--- a/src/vm-limit.c	Wed Jul 07 19:37:32 2010 -0700
+++ b/src/vm-limit.c	Wed Jul 07 20:03:52 2010 -0700
@@ -244,6 +244,46 @@
     (*warn_function) ("Warning: memory in use exceeds lisp pointer size");
 }
 
+#if !defined(CANNOT_DUMP) || !defined(SYSTEM_MALLOC)
+/* Some systems that cannot dump also cannot implement these.  */
+
+/*
+ *	Return the address of the start of the data segment prior to
+ *	doing an unexec.  After unexec the return value is undefined.
+ *	See crt0.c for further information and definition of data_start.
+ *
+ *	Apparently, on BSD systems this is etext at startup.  On
+ *	USG systems (swapping) this is highly mmu dependent and
+ *	is also dependent on whether or not the program is running
+ *	with shared text.  Generally there is a (possibly large)
+ *	gap between end of text and start of data with shared text.
+ *
+ */
+
+POINTER
+start_of_data (void)
+{
+#ifdef BSD_SYSTEM
+  extern char etext;
+  return (POINTER)(&etext);
+#elif defined DATA_START
+  return ((POINTER) DATA_START);
+#elif defined ORDINARY_LINK
+  /*
+   * This is a hack.  Since we're not linking crt0.c or pre_crt0.c,
+   * data_start isn't defined.  We take the address of environ, which
+   * is known to live at or near the start of the system crt0.c, and
+   * we don't sweat the handful of bytes that might lose.
+   */
+  extern char **environ;
+  return ((POINTER) &environ);
+#else
+  extern int data_start;
+  return ((POINTER) &data_start);
+#endif
+}
+#endif /* (not CANNOT_DUMP or not SYSTEM_MALLOC) */
+
 /* Enable memory usage warnings.
    START says where the end of pure storage is.
    WARNFUN specifies the function to call to issue a warning.  */