changeset 10476:4d87344e6dfb

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Thu, 19 Jan 1995 07:25:03 +0000
parents 2d9590603a06
children b0ac61aef336
files lispref/internals.texi
diffstat 1 files changed, 12 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lispref/internals.texi	Thu Jan 19 07:18:47 1995 +0000
+++ b/lispref/internals.texi	Thu Jan 19 07:25:03 1995 +0000
@@ -503,6 +503,18 @@
 you use @code{GCPRO2}, you must declare @code{gcpro1} and @code{gcpro2}.
 Alas, we can't explain all the tricky details here.
 
+  Remember that you must never initialise external variables (whether
+static or not).  If you do that, the linker will put the variable into
+the initialised data area of the process, which on many architectures
+becomes read-only when emacs is dumped (@pxref {Pure Storage}).
+
+  Remember also that the keyword @code{static} is defined as nothing on
+many architectures whose linkers would put every static variable in the
+initialised data area, which becomes read-only after dumping.  This
+means that you must never use static local variables, because on those
+architectures they would lose the @code{static} specifier and become
+automatic.  Use static external variables instead.
+
   Defining the C function is not enough to make a Lisp primitive
 available; you must also create the Lisp symbol for the primitive and
 store a suitable subr object in its function cell.  The code looks like