diff options
Diffstat (limited to 'lispref')
-rw-r--r-- | lispref/internals.texi | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/lispref/internals.texi b/lispref/internals.texi index df9672b05b6..cc3550e4832 100644 --- a/lispref/internals.texi +++ b/lispref/internals.texi @@ -503,17 +503,18 @@ must declare these explicitly, with type @code{struct gcpro}. Thus, if 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. + You must not use C initializers for static or global variables unless +they are never written once Emacs is dumped. These variables with +initializers are allocated in an area of memory that becomes read-only +(on certain operating systems) as a result of dumping Emacs. @xref{Pure +Storage}. + + Do not use static variables within functions---place all static +variables at top level in the file. This is necessary because Emacs on +some operating systems defines the keyword @code{static} as a null +macro. (This definition is used because those systems put all variables +declared static in a place that becomes read-only after dumping, whether +they have initializers or not.) Defining the C function is not enough to make a Lisp primitive available; you must also create the Lisp symbol for the primitive and |