Merge from trunk
[emacs.git] / src / alloc.c
blobd83d89377222599dd3056ce6263c5e2a55c4a67d
1 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1988, 1993, 1994, 1995, 1997, 1998, 1999,
3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
6 This file is part of GNU Emacs.
8 GNU Emacs is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
21 #include <config.h>
22 #include <stdio.h>
23 #include <limits.h> /* For CHAR_BIT. */
24 #include <setjmp.h>
26 #ifdef ALLOC_DEBUG
27 #undef INLINE
28 #endif
30 #include <signal.h>
32 #ifdef HAVE_GTK_AND_PTHREAD
33 #include <pthread.h>
34 #endif
36 /* This file is part of the core Lisp implementation, and thus must
37 deal with the real data structures. If the Lisp implementation is
38 replaced, this file likely will not be used. */
40 #undef HIDE_LISP_IMPLEMENTATION
41 #include "lisp.h"
42 #include "process.h"
43 #include "intervals.h"
44 #include "puresize.h"
45 #include "buffer.h"
46 #include "window.h"
47 #include "keyboard.h"
48 #include "frame.h"
49 #include "blockinput.h"
50 #include "character.h"
51 #include "syssignal.h"
52 #include "termhooks.h" /* For struct terminal. */
53 #include <setjmp.h>
55 /* GC_MALLOC_CHECK defined means perform validity checks of malloc'd
56 memory. Can do this only if using gmalloc.c. */
58 #if defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC
59 #undef GC_MALLOC_CHECK
60 #endif
62 #ifdef HAVE_UNISTD_H
63 #include <unistd.h>
64 #else
65 extern POINTER_TYPE *sbrk ();
66 #endif
68 #ifdef HAVE_FCNTL_H
69 #include <fcntl.h>
70 #endif
71 #ifndef O_WRONLY
72 #define O_WRONLY 1
73 #endif
75 #ifdef WINDOWSNT
76 #include <fcntl.h>
77 #include "w32.h"
78 #endif
80 #ifdef DOUG_LEA_MALLOC
82 #include <malloc.h>
83 /* malloc.h #defines this as size_t, at least in glibc2. */
84 #ifndef __malloc_size_t
85 #define __malloc_size_t int
86 #endif
88 /* Specify maximum number of areas to mmap. It would be nice to use a
89 value that explicitly means "no limit". */
91 #define MMAP_MAX_AREAS 100000000
93 #else /* not DOUG_LEA_MALLOC */
95 /* The following come from gmalloc.c. */
97 #define __malloc_size_t size_t
98 extern __malloc_size_t _bytes_used;
99 extern __malloc_size_t __malloc_extra_blocks;
101 #endif /* not DOUG_LEA_MALLOC */
103 #if ! defined (SYSTEM_MALLOC) && defined (HAVE_GTK_AND_PTHREAD)
105 /* When GTK uses the file chooser dialog, different backends can be loaded
106 dynamically. One such a backend is the Gnome VFS backend that gets loaded
107 if you run Gnome. That backend creates several threads and also allocates
108 memory with malloc.
110 If Emacs sets malloc hooks (! SYSTEM_MALLOC) and the emacs_blocked_*
111 functions below are called from malloc, there is a chance that one
112 of these threads preempts the Emacs main thread and the hook variables
113 end up in an inconsistent state. So we have a mutex to prevent that (note
114 that the backend handles concurrent access to malloc within its own threads
115 but Emacs code running in the main thread is not included in that control).
117 When UNBLOCK_INPUT is called, reinvoke_input_signal may be called. If this
118 happens in one of the backend threads we will have two threads that tries
119 to run Emacs code at once, and the code is not prepared for that.
120 To prevent that, we only call BLOCK/UNBLOCK from the main thread. */
122 static pthread_mutex_t alloc_mutex;
124 #define BLOCK_INPUT_ALLOC \
125 do \
127 if (pthread_equal (pthread_self (), main_thread)) \
128 BLOCK_INPUT; \
129 pthread_mutex_lock (&alloc_mutex); \
131 while (0)
132 #define UNBLOCK_INPUT_ALLOC \
133 do \
135 pthread_mutex_unlock (&alloc_mutex); \
136 if (pthread_equal (pthread_self (), main_thread)) \
137 UNBLOCK_INPUT; \
139 while (0)
141 #else /* SYSTEM_MALLOC || not HAVE_GTK_AND_PTHREAD */
143 #define BLOCK_INPUT_ALLOC BLOCK_INPUT
144 #define UNBLOCK_INPUT_ALLOC UNBLOCK_INPUT
146 #endif /* SYSTEM_MALLOC || not HAVE_GTK_AND_PTHREAD */
148 /* Value of _bytes_used, when spare_memory was freed. */
150 static __malloc_size_t bytes_used_when_full;
152 static __malloc_size_t bytes_used_when_reconsidered;
154 /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
155 to a struct Lisp_String. */
157 #define MARK_STRING(S) ((S)->size |= ARRAY_MARK_FLAG)
158 #define UNMARK_STRING(S) ((S)->size &= ~ARRAY_MARK_FLAG)
159 #define STRING_MARKED_P(S) (((S)->size & ARRAY_MARK_FLAG) != 0)
161 #define VECTOR_MARK(V) ((V)->size |= ARRAY_MARK_FLAG)
162 #define VECTOR_UNMARK(V) ((V)->size &= ~ARRAY_MARK_FLAG)
163 #define VECTOR_MARKED_P(V) (((V)->size & ARRAY_MARK_FLAG) != 0)
165 /* Value is the number of bytes/chars of S, a pointer to a struct
166 Lisp_String. This must be used instead of STRING_BYTES (S) or
167 S->size during GC, because S->size contains the mark bit for
168 strings. */
170 #define GC_STRING_BYTES(S) (STRING_BYTES (S))
171 #define GC_STRING_CHARS(S) ((S)->size & ~ARRAY_MARK_FLAG)
173 /* Number of bytes of consing done since the last gc. */
175 int consing_since_gc;
177 /* Count the amount of consing of various sorts of space. */
179 EMACS_INT cons_cells_consed;
180 EMACS_INT floats_consed;
181 EMACS_INT vector_cells_consed;
182 EMACS_INT symbols_consed;
183 EMACS_INT string_chars_consed;
184 EMACS_INT misc_objects_consed;
185 EMACS_INT intervals_consed;
186 EMACS_INT strings_consed;
188 /* Minimum number of bytes of consing since GC before next GC. */
190 EMACS_INT gc_cons_threshold;
192 /* Similar minimum, computed from Vgc_cons_percentage. */
194 EMACS_INT gc_relative_threshold;
196 static Lisp_Object Vgc_cons_percentage;
198 /* Minimum number of bytes of consing since GC before next GC,
199 when memory is full. */
201 EMACS_INT memory_full_cons_threshold;
203 /* Nonzero during GC. */
205 int gc_in_progress;
207 /* Nonzero means abort if try to GC.
208 This is for code which is written on the assumption that
209 no GC will happen, so as to verify that assumption. */
211 int abort_on_gc;
213 /* Nonzero means display messages at beginning and end of GC. */
215 int garbage_collection_messages;
217 /* Number of live and free conses etc. */
219 static int total_conses, total_markers, total_symbols, total_vector_size;
220 static int total_free_conses, total_free_markers, total_free_symbols;
221 static int total_free_floats, total_floats;
223 /* Points to memory space allocated as "spare", to be freed if we run
224 out of memory. We keep one large block, four cons-blocks, and
225 two string blocks. */
227 static char *spare_memory[7];
229 /* Amount of spare memory to keep in large reserve block. */
231 #define SPARE_MEMORY (1 << 14)
233 /* Number of extra blocks malloc should get when it needs more core. */
235 static int malloc_hysteresis;
237 /* Non-nil means defun should do purecopy on the function definition. */
239 Lisp_Object Vpurify_flag;
241 /* Non-nil means we are handling a memory-full error. */
243 Lisp_Object Vmemory_full;
245 /* Initialize it to a nonzero value to force it into data space
246 (rather than bss space). That way unexec will remap it into text
247 space (pure), on some systems. We have not implemented the
248 remapping on more recent systems because this is less important
249 nowadays than in the days of small memories and timesharing. */
251 EMACS_INT pure[(PURESIZE + sizeof (EMACS_INT) - 1) / sizeof (EMACS_INT)] = {1,};
252 #define PUREBEG (char *) pure
254 /* Pointer to the pure area, and its size. */
256 static char *purebeg;
257 static size_t pure_size;
259 /* Number of bytes of pure storage used before pure storage overflowed.
260 If this is non-zero, this implies that an overflow occurred. */
262 static size_t pure_bytes_used_before_overflow;
264 /* Value is non-zero if P points into pure space. */
266 #define PURE_POINTER_P(P) \
267 (((PNTR_COMPARISON_TYPE) (P) \
268 < (PNTR_COMPARISON_TYPE) ((char *) purebeg + pure_size)) \
269 && ((PNTR_COMPARISON_TYPE) (P) \
270 >= (PNTR_COMPARISON_TYPE) purebeg))
272 /* Total number of bytes allocated in pure storage. */
274 EMACS_INT pure_bytes_used;
276 /* Index in pure at which next pure Lisp object will be allocated.. */
278 static EMACS_INT pure_bytes_used_lisp;
280 /* Number of bytes allocated for non-Lisp objects in pure storage. */
282 static EMACS_INT pure_bytes_used_non_lisp;
284 /* If nonzero, this is a warning delivered by malloc and not yet
285 displayed. */
287 const char *pending_malloc_warning;
289 /* Pre-computed signal argument for use when memory is exhausted. */
291 Lisp_Object Vmemory_signal_data;
293 /* Maximum amount of C stack to save when a GC happens. */
295 #ifndef MAX_SAVE_STACK
296 #define MAX_SAVE_STACK 16000
297 #endif
299 /* Buffer in which we save a copy of the C stack at each GC. */
301 static char *stack_copy;
302 static int stack_copy_size;
304 /* Non-zero means ignore malloc warnings. Set during initialization.
305 Currently not used. */
307 static int ignore_warnings;
309 Lisp_Object Qgc_cons_threshold, Qchar_table_extra_slots;
311 /* Hook run after GC has finished. */
313 Lisp_Object Vpost_gc_hook, Qpost_gc_hook;
315 Lisp_Object Vgc_elapsed; /* accumulated elapsed time in GC */
316 EMACS_INT gcs_done; /* accumulated GCs */
318 static void mark_buffer (Lisp_Object);
319 static void mark_terminals (void);
320 extern void mark_kboards (void);
321 extern void mark_ttys (void);
322 extern void mark_backtrace (void);
323 static void gc_sweep (void);
324 static void mark_glyph_matrix (struct glyph_matrix *);
325 static void mark_face_cache (struct face_cache *);
327 #ifdef HAVE_WINDOW_SYSTEM
328 extern void mark_fringe_data (void);
329 #endif /* HAVE_WINDOW_SYSTEM */
331 static struct Lisp_String *allocate_string (void);
332 static void compact_small_strings (void);
333 static void free_large_strings (void);
334 static void sweep_strings (void);
336 extern int message_enable_multibyte;
338 /* When scanning the C stack for live Lisp objects, Emacs keeps track
339 of what memory allocated via lisp_malloc is intended for what
340 purpose. This enumeration specifies the type of memory. */
342 enum mem_type
344 MEM_TYPE_NON_LISP,
345 MEM_TYPE_BUFFER,
346 MEM_TYPE_CONS,
347 MEM_TYPE_STRING,
348 MEM_TYPE_MISC,
349 MEM_TYPE_SYMBOL,
350 MEM_TYPE_FLOAT,
351 /* We used to keep separate mem_types for subtypes of vectors such as
352 process, hash_table, frame, terminal, and window, but we never made
353 use of the distinction, so it only caused source-code complexity
354 and runtime slowdown. Minor but pointless. */
355 MEM_TYPE_VECTORLIKE
358 static POINTER_TYPE *lisp_align_malloc (size_t, enum mem_type);
359 static POINTER_TYPE *lisp_malloc (size_t, enum mem_type);
360 void refill_memory_reserve (void);
363 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
365 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
366 #include <stdio.h> /* For fprintf. */
367 #endif
369 /* A unique object in pure space used to make some Lisp objects
370 on free lists recognizable in O(1). */
372 static Lisp_Object Vdead;
374 #ifdef GC_MALLOC_CHECK
376 enum mem_type allocated_mem_type;
377 static int dont_register_blocks;
379 #endif /* GC_MALLOC_CHECK */
381 /* A node in the red-black tree describing allocated memory containing
382 Lisp data. Each such block is recorded with its start and end
383 address when it is allocated, and removed from the tree when it
384 is freed.
386 A red-black tree is a balanced binary tree with the following
387 properties:
389 1. Every node is either red or black.
390 2. Every leaf is black.
391 3. If a node is red, then both of its children are black.
392 4. Every simple path from a node to a descendant leaf contains
393 the same number of black nodes.
394 5. The root is always black.
396 When nodes are inserted into the tree, or deleted from the tree,
397 the tree is "fixed" so that these properties are always true.
399 A red-black tree with N internal nodes has height at most 2
400 log(N+1). Searches, insertions and deletions are done in O(log N).
401 Please see a text book about data structures for a detailed
402 description of red-black trees. Any book worth its salt should
403 describe them. */
405 struct mem_node
407 /* Children of this node. These pointers are never NULL. When there
408 is no child, the value is MEM_NIL, which points to a dummy node. */
409 struct mem_node *left, *right;
411 /* The parent of this node. In the root node, this is NULL. */
412 struct mem_node *parent;
414 /* Start and end of allocated region. */
415 void *start, *end;
417 /* Node color. */
418 enum {MEM_BLACK, MEM_RED} color;
420 /* Memory type. */
421 enum mem_type type;
424 /* Base address of stack. Set in main. */
426 Lisp_Object *stack_base;
428 /* Root of the tree describing allocated Lisp memory. */
430 static struct mem_node *mem_root;
432 /* Lowest and highest known address in the heap. */
434 static void *min_heap_address, *max_heap_address;
436 /* Sentinel node of the tree. */
438 static struct mem_node mem_z;
439 #define MEM_NIL &mem_z
441 static struct Lisp_Vector *allocate_vectorlike (EMACS_INT);
442 static void lisp_free (POINTER_TYPE *);
443 static void mark_stack (void);
444 static int live_vector_p (struct mem_node *, void *);
445 static int live_buffer_p (struct mem_node *, void *);
446 static int live_string_p (struct mem_node *, void *);
447 static int live_cons_p (struct mem_node *, void *);
448 static int live_symbol_p (struct mem_node *, void *);
449 static int live_float_p (struct mem_node *, void *);
450 static int live_misc_p (struct mem_node *, void *);
451 static void mark_maybe_object (Lisp_Object);
452 static void mark_memory (void *, void *, int);
453 static void mem_init (void);
454 static struct mem_node *mem_insert (void *, void *, enum mem_type);
455 static void mem_insert_fixup (struct mem_node *);
456 static void mem_rotate_left (struct mem_node *);
457 static void mem_rotate_right (struct mem_node *);
458 static void mem_delete (struct mem_node *);
459 static void mem_delete_fixup (struct mem_node *);
460 static INLINE struct mem_node *mem_find (void *);
463 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
464 static void check_gcpros (void);
465 #endif
467 #endif /* GC_MARK_STACK || GC_MALLOC_CHECK */
469 /* Recording what needs to be marked for gc. */
471 struct gcpro *gcprolist;
473 /* Addresses of staticpro'd variables. Initialize it to a nonzero
474 value; otherwise some compilers put it into BSS. */
476 #define NSTATICS 0x640
477 static Lisp_Object *staticvec[NSTATICS] = {&Vpurify_flag};
479 /* Index of next unused slot in staticvec. */
481 static int staticidx = 0;
483 static POINTER_TYPE *pure_alloc (size_t, int);
486 /* Value is SZ rounded up to the next multiple of ALIGNMENT.
487 ALIGNMENT must be a power of 2. */
489 #define ALIGN(ptr, ALIGNMENT) \
490 ((POINTER_TYPE *) ((((EMACS_UINT)(ptr)) + (ALIGNMENT) - 1) \
491 & ~((ALIGNMENT) - 1)))
495 /************************************************************************
496 Malloc
497 ************************************************************************/
499 /* Function malloc calls this if it finds we are near exhausting storage. */
501 void
502 malloc_warning (const char *str)
504 pending_malloc_warning = str;
508 /* Display an already-pending malloc warning. */
510 void
511 display_malloc_warning (void)
513 call3 (intern ("display-warning"),
514 intern ("alloc"),
515 build_string (pending_malloc_warning),
516 intern ("emergency"));
517 pending_malloc_warning = 0;
521 #ifdef DOUG_LEA_MALLOC
522 # define BYTES_USED (mallinfo ().uordblks)
523 #else
524 # define BYTES_USED _bytes_used
525 #endif
527 /* Called if we can't allocate relocatable space for a buffer. */
529 void
530 buffer_memory_full (void)
532 /* If buffers use the relocating allocator, no need to free
533 spare_memory, because we may have plenty of malloc space left
534 that we could get, and if we don't, the malloc that fails will
535 itself cause spare_memory to be freed. If buffers don't use the
536 relocating allocator, treat this like any other failing
537 malloc. */
539 #ifndef REL_ALLOC
540 memory_full ();
541 #endif
543 /* This used to call error, but if we've run out of memory, we could
544 get infinite recursion trying to build the string. */
545 xsignal (Qnil, Vmemory_signal_data);
549 #ifdef XMALLOC_OVERRUN_CHECK
551 /* Check for overrun in malloc'ed buffers by wrapping a 16 byte header
552 and a 16 byte trailer around each block.
554 The header consists of 12 fixed bytes + a 4 byte integer contaning the
555 original block size, while the trailer consists of 16 fixed bytes.
557 The header is used to detect whether this block has been allocated
558 through these functions -- as it seems that some low-level libc
559 functions may bypass the malloc hooks.
563 #define XMALLOC_OVERRUN_CHECK_SIZE 16
565 static char xmalloc_overrun_check_header[XMALLOC_OVERRUN_CHECK_SIZE-4] =
566 { 0x9a, 0x9b, 0xae, 0xaf,
567 0xbf, 0xbe, 0xce, 0xcf,
568 0xea, 0xeb, 0xec, 0xed };
570 static char xmalloc_overrun_check_trailer[XMALLOC_OVERRUN_CHECK_SIZE] =
571 { 0xaa, 0xab, 0xac, 0xad,
572 0xba, 0xbb, 0xbc, 0xbd,
573 0xca, 0xcb, 0xcc, 0xcd,
574 0xda, 0xdb, 0xdc, 0xdd };
576 /* Macros to insert and extract the block size in the header. */
578 #define XMALLOC_PUT_SIZE(ptr, size) \
579 (ptr[-1] = (size & 0xff), \
580 ptr[-2] = ((size >> 8) & 0xff), \
581 ptr[-3] = ((size >> 16) & 0xff), \
582 ptr[-4] = ((size >> 24) & 0xff))
584 #define XMALLOC_GET_SIZE(ptr) \
585 (size_t)((unsigned)(ptr[-1]) | \
586 ((unsigned)(ptr[-2]) << 8) | \
587 ((unsigned)(ptr[-3]) << 16) | \
588 ((unsigned)(ptr[-4]) << 24))
591 /* The call depth in overrun_check functions. For example, this might happen:
592 xmalloc()
593 overrun_check_malloc()
594 -> malloc -> (via hook)_-> emacs_blocked_malloc
595 -> overrun_check_malloc
596 call malloc (hooks are NULL, so real malloc is called).
597 malloc returns 10000.
598 add overhead, return 10016.
599 <- (back in overrun_check_malloc)
600 add overhead again, return 10032
601 xmalloc returns 10032.
603 (time passes).
605 xfree(10032)
606 overrun_check_free(10032)
607 decrease overhed
608 free(10016) <- crash, because 10000 is the original pointer. */
610 static int check_depth;
612 /* Like malloc, but wraps allocated block with header and trailer. */
614 POINTER_TYPE *
615 overrun_check_malloc (size)
616 size_t size;
618 register unsigned char *val;
619 size_t overhead = ++check_depth == 1 ? XMALLOC_OVERRUN_CHECK_SIZE*2 : 0;
621 val = (unsigned char *) malloc (size + overhead);
622 if (val && check_depth == 1)
624 memcpy (val, xmalloc_overrun_check_header,
625 XMALLOC_OVERRUN_CHECK_SIZE - 4);
626 val += XMALLOC_OVERRUN_CHECK_SIZE;
627 XMALLOC_PUT_SIZE(val, size);
628 memcpy (val + size, xmalloc_overrun_check_trailer,
629 XMALLOC_OVERRUN_CHECK_SIZE);
631 --check_depth;
632 return (POINTER_TYPE *)val;
636 /* Like realloc, but checks old block for overrun, and wraps new block
637 with header and trailer. */
639 POINTER_TYPE *
640 overrun_check_realloc (block, size)
641 POINTER_TYPE *block;
642 size_t size;
644 register unsigned char *val = (unsigned char *)block;
645 size_t overhead = ++check_depth == 1 ? XMALLOC_OVERRUN_CHECK_SIZE*2 : 0;
647 if (val
648 && check_depth == 1
649 && memcmp (xmalloc_overrun_check_header,
650 val - XMALLOC_OVERRUN_CHECK_SIZE,
651 XMALLOC_OVERRUN_CHECK_SIZE - 4) == 0)
653 size_t osize = XMALLOC_GET_SIZE (val);
654 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
655 XMALLOC_OVERRUN_CHECK_SIZE))
656 abort ();
657 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
658 val -= XMALLOC_OVERRUN_CHECK_SIZE;
659 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE);
662 val = (unsigned char *) realloc ((POINTER_TYPE *)val, size + overhead);
664 if (val && check_depth == 1)
666 memcpy (val, xmalloc_overrun_check_header,
667 XMALLOC_OVERRUN_CHECK_SIZE - 4);
668 val += XMALLOC_OVERRUN_CHECK_SIZE;
669 XMALLOC_PUT_SIZE(val, size);
670 memcpy (val + size, xmalloc_overrun_check_trailer,
671 XMALLOC_OVERRUN_CHECK_SIZE);
673 --check_depth;
674 return (POINTER_TYPE *)val;
677 /* Like free, but checks block for overrun. */
679 void
680 overrun_check_free (block)
681 POINTER_TYPE *block;
683 unsigned char *val = (unsigned char *)block;
685 ++check_depth;
686 if (val
687 && check_depth == 1
688 && memcmp (xmalloc_overrun_check_header,
689 val - XMALLOC_OVERRUN_CHECK_SIZE,
690 XMALLOC_OVERRUN_CHECK_SIZE - 4) == 0)
692 size_t osize = XMALLOC_GET_SIZE (val);
693 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
694 XMALLOC_OVERRUN_CHECK_SIZE))
695 abort ();
696 #ifdef XMALLOC_CLEAR_FREE_MEMORY
697 val -= XMALLOC_OVERRUN_CHECK_SIZE;
698 memset (val, 0xff, osize + XMALLOC_OVERRUN_CHECK_SIZE*2);
699 #else
700 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
701 val -= XMALLOC_OVERRUN_CHECK_SIZE;
702 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE);
703 #endif
706 free (val);
707 --check_depth;
710 #undef malloc
711 #undef realloc
712 #undef free
713 #define malloc overrun_check_malloc
714 #define realloc overrun_check_realloc
715 #define free overrun_check_free
716 #endif
718 #ifdef SYNC_INPUT
719 /* When using SYNC_INPUT, we don't call malloc from a signal handler, so
720 there's no need to block input around malloc. */
721 #define MALLOC_BLOCK_INPUT ((void)0)
722 #define MALLOC_UNBLOCK_INPUT ((void)0)
723 #else
724 #define MALLOC_BLOCK_INPUT BLOCK_INPUT
725 #define MALLOC_UNBLOCK_INPUT UNBLOCK_INPUT
726 #endif
728 /* Like malloc but check for no memory and block interrupt input.. */
730 POINTER_TYPE *
731 xmalloc (size_t size)
733 register POINTER_TYPE *val;
735 MALLOC_BLOCK_INPUT;
736 val = (POINTER_TYPE *) malloc (size);
737 MALLOC_UNBLOCK_INPUT;
739 if (!val && size)
740 memory_full ();
741 return val;
745 /* Like realloc but check for no memory and block interrupt input.. */
747 POINTER_TYPE *
748 xrealloc (POINTER_TYPE *block, size_t size)
750 register POINTER_TYPE *val;
752 MALLOC_BLOCK_INPUT;
753 /* We must call malloc explicitly when BLOCK is 0, since some
754 reallocs don't do this. */
755 if (! block)
756 val = (POINTER_TYPE *) malloc (size);
757 else
758 val = (POINTER_TYPE *) realloc (block, size);
759 MALLOC_UNBLOCK_INPUT;
761 if (!val && size) memory_full ();
762 return val;
766 /* Like free but block interrupt input. */
768 void
769 xfree (POINTER_TYPE *block)
771 if (!block)
772 return;
773 MALLOC_BLOCK_INPUT;
774 free (block);
775 MALLOC_UNBLOCK_INPUT;
776 /* We don't call refill_memory_reserve here
777 because that duplicates doing so in emacs_blocked_free
778 and the criterion should go there. */
782 /* Like strdup, but uses xmalloc. */
784 char *
785 xstrdup (const char *s)
787 size_t len = strlen (s) + 1;
788 char *p = (char *) xmalloc (len);
789 memcpy (p, s, len);
790 return p;
794 /* Unwind for SAFE_ALLOCA */
796 Lisp_Object
797 safe_alloca_unwind (Lisp_Object arg)
799 register struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
801 p->dogc = 0;
802 xfree (p->pointer);
803 p->pointer = 0;
804 free_misc (arg);
805 return Qnil;
809 /* Like malloc but used for allocating Lisp data. NBYTES is the
810 number of bytes to allocate, TYPE describes the intended use of the
811 allcated memory block (for strings, for conses, ...). */
813 #ifndef USE_LSB_TAG
814 static void *lisp_malloc_loser;
815 #endif
817 static POINTER_TYPE *
818 lisp_malloc (size_t nbytes, enum mem_type type)
820 register void *val;
822 MALLOC_BLOCK_INPUT;
824 #ifdef GC_MALLOC_CHECK
825 allocated_mem_type = type;
826 #endif
828 val = (void *) malloc (nbytes);
830 #ifndef USE_LSB_TAG
831 /* If the memory just allocated cannot be addressed thru a Lisp
832 object's pointer, and it needs to be,
833 that's equivalent to running out of memory. */
834 if (val && type != MEM_TYPE_NON_LISP)
836 Lisp_Object tem;
837 XSETCONS (tem, (char *) val + nbytes - 1);
838 if ((char *) XCONS (tem) != (char *) val + nbytes - 1)
840 lisp_malloc_loser = val;
841 free (val);
842 val = 0;
845 #endif
847 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
848 if (val && type != MEM_TYPE_NON_LISP)
849 mem_insert (val, (char *) val + nbytes, type);
850 #endif
852 MALLOC_UNBLOCK_INPUT;
853 if (!val && nbytes)
854 memory_full ();
855 return val;
858 /* Free BLOCK. This must be called to free memory allocated with a
859 call to lisp_malloc. */
861 static void
862 lisp_free (POINTER_TYPE *block)
864 MALLOC_BLOCK_INPUT;
865 free (block);
866 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
867 mem_delete (mem_find (block));
868 #endif
869 MALLOC_UNBLOCK_INPUT;
872 /* Allocation of aligned blocks of memory to store Lisp data. */
873 /* The entry point is lisp_align_malloc which returns blocks of at most */
874 /* BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */
876 /* Use posix_memalloc if the system has it and we're using the system's
877 malloc (because our gmalloc.c routines don't have posix_memalign although
878 its memalloc could be used). */
879 #if defined (HAVE_POSIX_MEMALIGN) && defined (SYSTEM_MALLOC)
880 #define USE_POSIX_MEMALIGN 1
881 #endif
883 /* BLOCK_ALIGN has to be a power of 2. */
884 #define BLOCK_ALIGN (1 << 10)
886 /* Padding to leave at the end of a malloc'd block. This is to give
887 malloc a chance to minimize the amount of memory wasted to alignment.
888 It should be tuned to the particular malloc library used.
889 On glibc-2.3.2, malloc never tries to align, so a padding of 0 is best.
890 posix_memalign on the other hand would ideally prefer a value of 4
891 because otherwise, there's 1020 bytes wasted between each ablocks.
892 In Emacs, testing shows that those 1020 can most of the time be
893 efficiently used by malloc to place other objects, so a value of 0 can
894 still preferable unless you have a lot of aligned blocks and virtually
895 nothing else. */
896 #define BLOCK_PADDING 0
897 #define BLOCK_BYTES \
898 (BLOCK_ALIGN - sizeof (struct ablock *) - BLOCK_PADDING)
900 /* Internal data structures and constants. */
902 #define ABLOCKS_SIZE 16
904 /* An aligned block of memory. */
905 struct ablock
907 union
909 char payload[BLOCK_BYTES];
910 struct ablock *next_free;
911 } x;
912 /* `abase' is the aligned base of the ablocks. */
913 /* It is overloaded to hold the virtual `busy' field that counts
914 the number of used ablock in the parent ablocks.
915 The first ablock has the `busy' field, the others have the `abase'
916 field. To tell the difference, we assume that pointers will have
917 integer values larger than 2 * ABLOCKS_SIZE. The lowest bit of `busy'
918 is used to tell whether the real base of the parent ablocks is `abase'
919 (if not, the word before the first ablock holds a pointer to the
920 real base). */
921 struct ablocks *abase;
922 /* The padding of all but the last ablock is unused. The padding of
923 the last ablock in an ablocks is not allocated. */
924 #if BLOCK_PADDING
925 char padding[BLOCK_PADDING];
926 #endif
929 /* A bunch of consecutive aligned blocks. */
930 struct ablocks
932 struct ablock blocks[ABLOCKS_SIZE];
935 /* Size of the block requested from malloc or memalign. */
936 #define ABLOCKS_BYTES (sizeof (struct ablocks) - BLOCK_PADDING)
938 #define ABLOCK_ABASE(block) \
939 (((unsigned long) (block)->abase) <= (1 + 2 * ABLOCKS_SIZE) \
940 ? (struct ablocks *)(block) \
941 : (block)->abase)
943 /* Virtual `busy' field. */
944 #define ABLOCKS_BUSY(abase) ((abase)->blocks[0].abase)
946 /* Pointer to the (not necessarily aligned) malloc block. */
947 #ifdef USE_POSIX_MEMALIGN
948 #define ABLOCKS_BASE(abase) (abase)
949 #else
950 #define ABLOCKS_BASE(abase) \
951 (1 & (long) ABLOCKS_BUSY (abase) ? abase : ((void**)abase)[-1])
952 #endif
954 /* The list of free ablock. */
955 static struct ablock *free_ablock;
957 /* Allocate an aligned block of nbytes.
958 Alignment is on a multiple of BLOCK_ALIGN and `nbytes' has to be
959 smaller or equal to BLOCK_BYTES. */
960 static POINTER_TYPE *
961 lisp_align_malloc (size_t nbytes, enum mem_type type)
963 void *base, *val;
964 struct ablocks *abase;
966 eassert (nbytes <= BLOCK_BYTES);
968 MALLOC_BLOCK_INPUT;
970 #ifdef GC_MALLOC_CHECK
971 allocated_mem_type = type;
972 #endif
974 if (!free_ablock)
976 int i;
977 EMACS_INT aligned; /* int gets warning casting to 64-bit pointer. */
979 #ifdef DOUG_LEA_MALLOC
980 /* Prevent mmap'ing the chunk. Lisp data may not be mmap'ed
981 because mapped region contents are not preserved in
982 a dumped Emacs. */
983 mallopt (M_MMAP_MAX, 0);
984 #endif
986 #ifdef USE_POSIX_MEMALIGN
988 int err = posix_memalign (&base, BLOCK_ALIGN, ABLOCKS_BYTES);
989 if (err)
990 base = NULL;
991 abase = base;
993 #else
994 base = malloc (ABLOCKS_BYTES);
995 abase = ALIGN (base, BLOCK_ALIGN);
996 #endif
998 if (base == 0)
1000 MALLOC_UNBLOCK_INPUT;
1001 memory_full ();
1004 aligned = (base == abase);
1005 if (!aligned)
1006 ((void**)abase)[-1] = base;
1008 #ifdef DOUG_LEA_MALLOC
1009 /* Back to a reasonable maximum of mmap'ed areas. */
1010 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1011 #endif
1013 #ifndef USE_LSB_TAG
1014 /* If the memory just allocated cannot be addressed thru a Lisp
1015 object's pointer, and it needs to be, that's equivalent to
1016 running out of memory. */
1017 if (type != MEM_TYPE_NON_LISP)
1019 Lisp_Object tem;
1020 char *end = (char *) base + ABLOCKS_BYTES - 1;
1021 XSETCONS (tem, end);
1022 if ((char *) XCONS (tem) != end)
1024 lisp_malloc_loser = base;
1025 free (base);
1026 MALLOC_UNBLOCK_INPUT;
1027 memory_full ();
1030 #endif
1032 /* Initialize the blocks and put them on the free list.
1033 Is `base' was not properly aligned, we can't use the last block. */
1034 for (i = 0; i < (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1); i++)
1036 abase->blocks[i].abase = abase;
1037 abase->blocks[i].x.next_free = free_ablock;
1038 free_ablock = &abase->blocks[i];
1040 ABLOCKS_BUSY (abase) = (struct ablocks *) (long) aligned;
1042 eassert (0 == ((EMACS_UINT)abase) % BLOCK_ALIGN);
1043 eassert (ABLOCK_ABASE (&abase->blocks[3]) == abase); /* 3 is arbitrary */
1044 eassert (ABLOCK_ABASE (&abase->blocks[0]) == abase);
1045 eassert (ABLOCKS_BASE (abase) == base);
1046 eassert (aligned == (long) ABLOCKS_BUSY (abase));
1049 abase = ABLOCK_ABASE (free_ablock);
1050 ABLOCKS_BUSY (abase) = (struct ablocks *) (2 + (long) ABLOCKS_BUSY (abase));
1051 val = free_ablock;
1052 free_ablock = free_ablock->x.next_free;
1054 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
1055 if (val && type != MEM_TYPE_NON_LISP)
1056 mem_insert (val, (char *) val + nbytes, type);
1057 #endif
1059 MALLOC_UNBLOCK_INPUT;
1060 if (!val && nbytes)
1061 memory_full ();
1063 eassert (0 == ((EMACS_UINT)val) % BLOCK_ALIGN);
1064 return val;
1067 static void
1068 lisp_align_free (POINTER_TYPE *block)
1070 struct ablock *ablock = block;
1071 struct ablocks *abase = ABLOCK_ABASE (ablock);
1073 MALLOC_BLOCK_INPUT;
1074 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
1075 mem_delete (mem_find (block));
1076 #endif
1077 /* Put on free list. */
1078 ablock->x.next_free = free_ablock;
1079 free_ablock = ablock;
1080 /* Update busy count. */
1081 ABLOCKS_BUSY (abase) = (struct ablocks *) (-2 + (long) ABLOCKS_BUSY (abase));
1083 if (2 > (long) ABLOCKS_BUSY (abase))
1084 { /* All the blocks are free. */
1085 int i = 0, aligned = (long) ABLOCKS_BUSY (abase);
1086 struct ablock **tem = &free_ablock;
1087 struct ablock *atop = &abase->blocks[aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1];
1089 while (*tem)
1091 if (*tem >= (struct ablock *) abase && *tem < atop)
1093 i++;
1094 *tem = (*tem)->x.next_free;
1096 else
1097 tem = &(*tem)->x.next_free;
1099 eassert ((aligned & 1) == aligned);
1100 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1101 #ifdef USE_POSIX_MEMALIGN
1102 eassert ((unsigned long)ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1103 #endif
1104 free (ABLOCKS_BASE (abase));
1106 MALLOC_UNBLOCK_INPUT;
1109 /* Return a new buffer structure allocated from the heap with
1110 a call to lisp_malloc. */
1112 struct buffer *
1113 allocate_buffer (void)
1115 struct buffer *b
1116 = (struct buffer *) lisp_malloc (sizeof (struct buffer),
1117 MEM_TYPE_BUFFER);
1118 b->size = sizeof (struct buffer) / sizeof (EMACS_INT);
1119 XSETPVECTYPE (b, PVEC_BUFFER);
1120 return b;
1124 #ifndef SYSTEM_MALLOC
1126 /* Arranging to disable input signals while we're in malloc.
1128 This only works with GNU malloc. To help out systems which can't
1129 use GNU malloc, all the calls to malloc, realloc, and free
1130 elsewhere in the code should be inside a BLOCK_INPUT/UNBLOCK_INPUT
1131 pair; unfortunately, we have no idea what C library functions
1132 might call malloc, so we can't really protect them unless you're
1133 using GNU malloc. Fortunately, most of the major operating systems
1134 can use GNU malloc. */
1136 #ifndef SYNC_INPUT
1137 /* When using SYNC_INPUT, we don't call malloc from a signal handler, so
1138 there's no need to block input around malloc. */
1140 #ifndef DOUG_LEA_MALLOC
1141 extern void * (*__malloc_hook) (size_t, const void *);
1142 extern void * (*__realloc_hook) (void *, size_t, const void *);
1143 extern void (*__free_hook) (void *, const void *);
1144 /* Else declared in malloc.h, perhaps with an extra arg. */
1145 #endif /* DOUG_LEA_MALLOC */
1146 static void * (*old_malloc_hook) (size_t, const void *);
1147 static void * (*old_realloc_hook) (void *, size_t, const void*);
1148 static void (*old_free_hook) (void*, const void*);
1150 /* This function is used as the hook for free to call. */
1152 static void
1153 emacs_blocked_free (void *ptr, const void *ptr2)
1155 BLOCK_INPUT_ALLOC;
1157 #ifdef GC_MALLOC_CHECK
1158 if (ptr)
1160 struct mem_node *m;
1162 m = mem_find (ptr);
1163 if (m == MEM_NIL || m->start != ptr)
1165 fprintf (stderr,
1166 "Freeing `%p' which wasn't allocated with malloc\n", ptr);
1167 abort ();
1169 else
1171 /* fprintf (stderr, "free %p...%p (%p)\n", m->start, m->end, ptr); */
1172 mem_delete (m);
1175 #endif /* GC_MALLOC_CHECK */
1177 __free_hook = old_free_hook;
1178 free (ptr);
1180 /* If we released our reserve (due to running out of memory),
1181 and we have a fair amount free once again,
1182 try to set aside another reserve in case we run out once more. */
1183 if (! NILP (Vmemory_full)
1184 /* Verify there is enough space that even with the malloc
1185 hysteresis this call won't run out again.
1186 The code here is correct as long as SPARE_MEMORY
1187 is substantially larger than the block size malloc uses. */
1188 && (bytes_used_when_full
1189 > ((bytes_used_when_reconsidered = BYTES_USED)
1190 + max (malloc_hysteresis, 4) * SPARE_MEMORY)))
1191 refill_memory_reserve ();
1193 __free_hook = emacs_blocked_free;
1194 UNBLOCK_INPUT_ALLOC;
1198 /* This function is the malloc hook that Emacs uses. */
1200 static void *
1201 emacs_blocked_malloc (size_t size, const void *ptr)
1203 void *value;
1205 BLOCK_INPUT_ALLOC;
1206 __malloc_hook = old_malloc_hook;
1207 #ifdef DOUG_LEA_MALLOC
1208 /* Segfaults on my system. --lorentey */
1209 /* mallopt (M_TOP_PAD, malloc_hysteresis * 4096); */
1210 #else
1211 __malloc_extra_blocks = malloc_hysteresis;
1212 #endif
1214 value = (void *) malloc (size);
1216 #ifdef GC_MALLOC_CHECK
1218 struct mem_node *m = mem_find (value);
1219 if (m != MEM_NIL)
1221 fprintf (stderr, "Malloc returned %p which is already in use\n",
1222 value);
1223 fprintf (stderr, "Region in use is %p...%p, %u bytes, type %d\n",
1224 m->start, m->end, (char *) m->end - (char *) m->start,
1225 m->type);
1226 abort ();
1229 if (!dont_register_blocks)
1231 mem_insert (value, (char *) value + max (1, size), allocated_mem_type);
1232 allocated_mem_type = MEM_TYPE_NON_LISP;
1235 #endif /* GC_MALLOC_CHECK */
1237 __malloc_hook = emacs_blocked_malloc;
1238 UNBLOCK_INPUT_ALLOC;
1240 /* fprintf (stderr, "%p malloc\n", value); */
1241 return value;
1245 /* This function is the realloc hook that Emacs uses. */
1247 static void *
1248 emacs_blocked_realloc (void *ptr, size_t size, const void *ptr2)
1250 void *value;
1252 BLOCK_INPUT_ALLOC;
1253 __realloc_hook = old_realloc_hook;
1255 #ifdef GC_MALLOC_CHECK
1256 if (ptr)
1258 struct mem_node *m = mem_find (ptr);
1259 if (m == MEM_NIL || m->start != ptr)
1261 fprintf (stderr,
1262 "Realloc of %p which wasn't allocated with malloc\n",
1263 ptr);
1264 abort ();
1267 mem_delete (m);
1270 /* fprintf (stderr, "%p -> realloc\n", ptr); */
1272 /* Prevent malloc from registering blocks. */
1273 dont_register_blocks = 1;
1274 #endif /* GC_MALLOC_CHECK */
1276 value = (void *) realloc (ptr, size);
1278 #ifdef GC_MALLOC_CHECK
1279 dont_register_blocks = 0;
1282 struct mem_node *m = mem_find (value);
1283 if (m != MEM_NIL)
1285 fprintf (stderr, "Realloc returns memory that is already in use\n");
1286 abort ();
1289 /* Can't handle zero size regions in the red-black tree. */
1290 mem_insert (value, (char *) value + max (size, 1), MEM_TYPE_NON_LISP);
1293 /* fprintf (stderr, "%p <- realloc\n", value); */
1294 #endif /* GC_MALLOC_CHECK */
1296 __realloc_hook = emacs_blocked_realloc;
1297 UNBLOCK_INPUT_ALLOC;
1299 return value;
1303 #ifdef HAVE_GTK_AND_PTHREAD
1304 /* Called from Fdump_emacs so that when the dumped Emacs starts, it has a
1305 normal malloc. Some thread implementations need this as they call
1306 malloc before main. The pthread_self call in BLOCK_INPUT_ALLOC then
1307 calls malloc because it is the first call, and we have an endless loop. */
1309 void
1310 reset_malloc_hooks ()
1312 __free_hook = old_free_hook;
1313 __malloc_hook = old_malloc_hook;
1314 __realloc_hook = old_realloc_hook;
1316 #endif /* HAVE_GTK_AND_PTHREAD */
1319 /* Called from main to set up malloc to use our hooks. */
1321 void
1322 uninterrupt_malloc (void)
1324 #ifdef HAVE_GTK_AND_PTHREAD
1325 #ifdef DOUG_LEA_MALLOC
1326 pthread_mutexattr_t attr;
1328 /* GLIBC has a faster way to do this, but lets keep it portable.
1329 This is according to the Single UNIX Specification. */
1330 pthread_mutexattr_init (&attr);
1331 pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
1332 pthread_mutex_init (&alloc_mutex, &attr);
1333 #else /* !DOUG_LEA_MALLOC */
1334 /* Some systems such as Solaris 2.6 don't have a recursive mutex,
1335 and the bundled gmalloc.c doesn't require it. */
1336 pthread_mutex_init (&alloc_mutex, NULL);
1337 #endif /* !DOUG_LEA_MALLOC */
1338 #endif /* HAVE_GTK_AND_PTHREAD */
1340 if (__free_hook != emacs_blocked_free)
1341 old_free_hook = __free_hook;
1342 __free_hook = emacs_blocked_free;
1344 if (__malloc_hook != emacs_blocked_malloc)
1345 old_malloc_hook = __malloc_hook;
1346 __malloc_hook = emacs_blocked_malloc;
1348 if (__realloc_hook != emacs_blocked_realloc)
1349 old_realloc_hook = __realloc_hook;
1350 __realloc_hook = emacs_blocked_realloc;
1353 #endif /* not SYNC_INPUT */
1354 #endif /* not SYSTEM_MALLOC */
1358 /***********************************************************************
1359 Interval Allocation
1360 ***********************************************************************/
1362 /* Number of intervals allocated in an interval_block structure.
1363 The 1020 is 1024 minus malloc overhead. */
1365 #define INTERVAL_BLOCK_SIZE \
1366 ((1020 - sizeof (struct interval_block *)) / sizeof (struct interval))
1368 /* Intervals are allocated in chunks in form of an interval_block
1369 structure. */
1371 struct interval_block
1373 /* Place `intervals' first, to preserve alignment. */
1374 struct interval intervals[INTERVAL_BLOCK_SIZE];
1375 struct interval_block *next;
1378 /* Current interval block. Its `next' pointer points to older
1379 blocks. */
1381 static struct interval_block *interval_block;
1383 /* Index in interval_block above of the next unused interval
1384 structure. */
1386 static int interval_block_index;
1388 /* Number of free and live intervals. */
1390 static int total_free_intervals, total_intervals;
1392 /* List of free intervals. */
1394 INTERVAL interval_free_list;
1396 /* Total number of interval blocks now in use. */
1398 static int n_interval_blocks;
1401 /* Initialize interval allocation. */
1403 static void
1404 init_intervals (void)
1406 interval_block = NULL;
1407 interval_block_index = INTERVAL_BLOCK_SIZE;
1408 interval_free_list = 0;
1409 n_interval_blocks = 0;
1413 /* Return a new interval. */
1415 INTERVAL
1416 make_interval (void)
1418 INTERVAL val;
1420 /* eassert (!handling_signal); */
1422 MALLOC_BLOCK_INPUT;
1424 if (interval_free_list)
1426 val = interval_free_list;
1427 interval_free_list = INTERVAL_PARENT (interval_free_list);
1429 else
1431 if (interval_block_index == INTERVAL_BLOCK_SIZE)
1433 register struct interval_block *newi;
1435 newi = (struct interval_block *) lisp_malloc (sizeof *newi,
1436 MEM_TYPE_NON_LISP);
1438 newi->next = interval_block;
1439 interval_block = newi;
1440 interval_block_index = 0;
1441 n_interval_blocks++;
1443 val = &interval_block->intervals[interval_block_index++];
1446 MALLOC_UNBLOCK_INPUT;
1448 consing_since_gc += sizeof (struct interval);
1449 intervals_consed++;
1450 RESET_INTERVAL (val);
1451 val->gcmarkbit = 0;
1452 return val;
1456 /* Mark Lisp objects in interval I. */
1458 static void
1459 mark_interval (register INTERVAL i, Lisp_Object dummy)
1461 eassert (!i->gcmarkbit); /* Intervals are never shared. */
1462 i->gcmarkbit = 1;
1463 mark_object (i->plist);
1467 /* Mark the interval tree rooted in TREE. Don't call this directly;
1468 use the macro MARK_INTERVAL_TREE instead. */
1470 static void
1471 mark_interval_tree (register INTERVAL tree)
1473 /* No need to test if this tree has been marked already; this
1474 function is always called through the MARK_INTERVAL_TREE macro,
1475 which takes care of that. */
1477 traverse_intervals_noorder (tree, mark_interval, Qnil);
1481 /* Mark the interval tree rooted in I. */
1483 #define MARK_INTERVAL_TREE(i) \
1484 do { \
1485 if (!NULL_INTERVAL_P (i) && !i->gcmarkbit) \
1486 mark_interval_tree (i); \
1487 } while (0)
1490 #define UNMARK_BALANCE_INTERVALS(i) \
1491 do { \
1492 if (! NULL_INTERVAL_P (i)) \
1493 (i) = balance_intervals (i); \
1494 } while (0)
1497 /* Number support. If USE_LISP_UNION_TYPE is in effect, we
1498 can't create number objects in macros. */
1499 #ifndef make_number
1500 Lisp_Object
1501 make_number (EMACS_INT n)
1503 Lisp_Object obj;
1504 obj.s.val = n;
1505 obj.s.type = Lisp_Int;
1506 return obj;
1508 #endif
1510 /***********************************************************************
1511 String Allocation
1512 ***********************************************************************/
1514 /* Lisp_Strings are allocated in string_block structures. When a new
1515 string_block is allocated, all the Lisp_Strings it contains are
1516 added to a free-list string_free_list. When a new Lisp_String is
1517 needed, it is taken from that list. During the sweep phase of GC,
1518 string_blocks that are entirely free are freed, except two which
1519 we keep.
1521 String data is allocated from sblock structures. Strings larger
1522 than LARGE_STRING_BYTES, get their own sblock, data for smaller
1523 strings is sub-allocated out of sblocks of size SBLOCK_SIZE.
1525 Sblocks consist internally of sdata structures, one for each
1526 Lisp_String. The sdata structure points to the Lisp_String it
1527 belongs to. The Lisp_String points back to the `u.data' member of
1528 its sdata structure.
1530 When a Lisp_String is freed during GC, it is put back on
1531 string_free_list, and its `data' member and its sdata's `string'
1532 pointer is set to null. The size of the string is recorded in the
1533 `u.nbytes' member of the sdata. So, sdata structures that are no
1534 longer used, can be easily recognized, and it's easy to compact the
1535 sblocks of small strings which we do in compact_small_strings. */
1537 /* Size in bytes of an sblock structure used for small strings. This
1538 is 8192 minus malloc overhead. */
1540 #define SBLOCK_SIZE 8188
1542 /* Strings larger than this are considered large strings. String data
1543 for large strings is allocated from individual sblocks. */
1545 #define LARGE_STRING_BYTES 1024
1547 /* Structure describing string memory sub-allocated from an sblock.
1548 This is where the contents of Lisp strings are stored. */
1550 struct sdata
1552 /* Back-pointer to the string this sdata belongs to. If null, this
1553 structure is free, and the NBYTES member of the union below
1554 contains the string's byte size (the same value that STRING_BYTES
1555 would return if STRING were non-null). If non-null, STRING_BYTES
1556 (STRING) is the size of the data, and DATA contains the string's
1557 contents. */
1558 struct Lisp_String *string;
1560 #ifdef GC_CHECK_STRING_BYTES
1562 EMACS_INT nbytes;
1563 unsigned char data[1];
1565 #define SDATA_NBYTES(S) (S)->nbytes
1566 #define SDATA_DATA(S) (S)->data
1568 #else /* not GC_CHECK_STRING_BYTES */
1570 union
1572 /* When STRING in non-null. */
1573 unsigned char data[1];
1575 /* When STRING is null. */
1576 EMACS_INT nbytes;
1577 } u;
1580 #define SDATA_NBYTES(S) (S)->u.nbytes
1581 #define SDATA_DATA(S) (S)->u.data
1583 #endif /* not GC_CHECK_STRING_BYTES */
1587 /* Structure describing a block of memory which is sub-allocated to
1588 obtain string data memory for strings. Blocks for small strings
1589 are of fixed size SBLOCK_SIZE. Blocks for large strings are made
1590 as large as needed. */
1592 struct sblock
1594 /* Next in list. */
1595 struct sblock *next;
1597 /* Pointer to the next free sdata block. This points past the end
1598 of the sblock if there isn't any space left in this block. */
1599 struct sdata *next_free;
1601 /* Start of data. */
1602 struct sdata first_data;
1605 /* Number of Lisp strings in a string_block structure. The 1020 is
1606 1024 minus malloc overhead. */
1608 #define STRING_BLOCK_SIZE \
1609 ((1020 - sizeof (struct string_block *)) / sizeof (struct Lisp_String))
1611 /* Structure describing a block from which Lisp_String structures
1612 are allocated. */
1614 struct string_block
1616 /* Place `strings' first, to preserve alignment. */
1617 struct Lisp_String strings[STRING_BLOCK_SIZE];
1618 struct string_block *next;
1621 /* Head and tail of the list of sblock structures holding Lisp string
1622 data. We always allocate from current_sblock. The NEXT pointers
1623 in the sblock structures go from oldest_sblock to current_sblock. */
1625 static struct sblock *oldest_sblock, *current_sblock;
1627 /* List of sblocks for large strings. */
1629 static struct sblock *large_sblocks;
1631 /* List of string_block structures, and how many there are. */
1633 static struct string_block *string_blocks;
1634 static int n_string_blocks;
1636 /* Free-list of Lisp_Strings. */
1638 static struct Lisp_String *string_free_list;
1640 /* Number of live and free Lisp_Strings. */
1642 static int total_strings, total_free_strings;
1644 /* Number of bytes used by live strings. */
1646 static int total_string_size;
1648 /* Given a pointer to a Lisp_String S which is on the free-list
1649 string_free_list, return a pointer to its successor in the
1650 free-list. */
1652 #define NEXT_FREE_LISP_STRING(S) (*(struct Lisp_String **) (S))
1654 /* Return a pointer to the sdata structure belonging to Lisp string S.
1655 S must be live, i.e. S->data must not be null. S->data is actually
1656 a pointer to the `u.data' member of its sdata structure; the
1657 structure starts at a constant offset in front of that. */
1659 #ifdef GC_CHECK_STRING_BYTES
1661 #define SDATA_OF_STRING(S) \
1662 ((struct sdata *) ((S)->data - sizeof (struct Lisp_String *) \
1663 - sizeof (EMACS_INT)))
1665 #else /* not GC_CHECK_STRING_BYTES */
1667 #define SDATA_OF_STRING(S) \
1668 ((struct sdata *) ((S)->data - sizeof (struct Lisp_String *)))
1670 #endif /* not GC_CHECK_STRING_BYTES */
1673 #ifdef GC_CHECK_STRING_OVERRUN
1675 /* We check for overrun in string data blocks by appending a small
1676 "cookie" after each allocated string data block, and check for the
1677 presence of this cookie during GC. */
1679 #define GC_STRING_OVERRUN_COOKIE_SIZE 4
1680 static char string_overrun_cookie[GC_STRING_OVERRUN_COOKIE_SIZE] =
1681 { 0xde, 0xad, 0xbe, 0xef };
1683 #else
1684 #define GC_STRING_OVERRUN_COOKIE_SIZE 0
1685 #endif
1687 /* Value is the size of an sdata structure large enough to hold NBYTES
1688 bytes of string data. The value returned includes a terminating
1689 NUL byte, the size of the sdata structure, and padding. */
1691 #ifdef GC_CHECK_STRING_BYTES
1693 #define SDATA_SIZE(NBYTES) \
1694 ((sizeof (struct Lisp_String *) \
1695 + (NBYTES) + 1 \
1696 + sizeof (EMACS_INT) \
1697 + sizeof (EMACS_INT) - 1) \
1698 & ~(sizeof (EMACS_INT) - 1))
1700 #else /* not GC_CHECK_STRING_BYTES */
1702 #define SDATA_SIZE(NBYTES) \
1703 ((sizeof (struct Lisp_String *) \
1704 + (NBYTES) + 1 \
1705 + sizeof (EMACS_INT) - 1) \
1706 & ~(sizeof (EMACS_INT) - 1))
1708 #endif /* not GC_CHECK_STRING_BYTES */
1710 /* Extra bytes to allocate for each string. */
1712 #define GC_STRING_EXTRA (GC_STRING_OVERRUN_COOKIE_SIZE)
1714 /* Initialize string allocation. Called from init_alloc_once. */
1716 static void
1717 init_strings (void)
1719 total_strings = total_free_strings = total_string_size = 0;
1720 oldest_sblock = current_sblock = large_sblocks = NULL;
1721 string_blocks = NULL;
1722 n_string_blocks = 0;
1723 string_free_list = NULL;
1724 empty_unibyte_string = make_pure_string ("", 0, 0, 0);
1725 empty_multibyte_string = make_pure_string ("", 0, 0, 1);
1729 #ifdef GC_CHECK_STRING_BYTES
1731 static int check_string_bytes_count;
1733 static void check_string_bytes (int);
1734 static void check_sblock (struct sblock *);
1736 #define CHECK_STRING_BYTES(S) STRING_BYTES (S)
1739 /* Like GC_STRING_BYTES, but with debugging check. */
1742 string_bytes (s)
1743 struct Lisp_String *s;
1745 int nbytes = (s->size_byte < 0 ? s->size & ~ARRAY_MARK_FLAG : s->size_byte);
1746 if (!PURE_POINTER_P (s)
1747 && s->data
1748 && nbytes != SDATA_NBYTES (SDATA_OF_STRING (s)))
1749 abort ();
1750 return nbytes;
1753 /* Check validity of Lisp strings' string_bytes member in B. */
1755 static void
1756 check_sblock (b)
1757 struct sblock *b;
1759 struct sdata *from, *end, *from_end;
1761 end = b->next_free;
1763 for (from = &b->first_data; from < end; from = from_end)
1765 /* Compute the next FROM here because copying below may
1766 overwrite data we need to compute it. */
1767 int nbytes;
1769 /* Check that the string size recorded in the string is the
1770 same as the one recorded in the sdata structure. */
1771 if (from->string)
1772 CHECK_STRING_BYTES (from->string);
1774 if (from->string)
1775 nbytes = GC_STRING_BYTES (from->string);
1776 else
1777 nbytes = SDATA_NBYTES (from);
1779 nbytes = SDATA_SIZE (nbytes);
1780 from_end = (struct sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
1785 /* Check validity of Lisp strings' string_bytes member. ALL_P
1786 non-zero means check all strings, otherwise check only most
1787 recently allocated strings. Used for hunting a bug. */
1789 static void
1790 check_string_bytes (all_p)
1791 int all_p;
1793 if (all_p)
1795 struct sblock *b;
1797 for (b = large_sblocks; b; b = b->next)
1799 struct Lisp_String *s = b->first_data.string;
1800 if (s)
1801 CHECK_STRING_BYTES (s);
1804 for (b = oldest_sblock; b; b = b->next)
1805 check_sblock (b);
1807 else
1808 check_sblock (current_sblock);
1811 #endif /* GC_CHECK_STRING_BYTES */
1813 #ifdef GC_CHECK_STRING_FREE_LIST
1815 /* Walk through the string free list looking for bogus next pointers.
1816 This may catch buffer overrun from a previous string. */
1818 static void
1819 check_string_free_list ()
1821 struct Lisp_String *s;
1823 /* Pop a Lisp_String off the free-list. */
1824 s = string_free_list;
1825 while (s != NULL)
1827 if ((unsigned)s < 1024)
1828 abort();
1829 s = NEXT_FREE_LISP_STRING (s);
1832 #else
1833 #define check_string_free_list()
1834 #endif
1836 /* Return a new Lisp_String. */
1838 static struct Lisp_String *
1839 allocate_string (void)
1841 struct Lisp_String *s;
1843 /* eassert (!handling_signal); */
1845 MALLOC_BLOCK_INPUT;
1847 /* If the free-list is empty, allocate a new string_block, and
1848 add all the Lisp_Strings in it to the free-list. */
1849 if (string_free_list == NULL)
1851 struct string_block *b;
1852 int i;
1854 b = (struct string_block *) lisp_malloc (sizeof *b, MEM_TYPE_STRING);
1855 memset (b, 0, sizeof *b);
1856 b->next = string_blocks;
1857 string_blocks = b;
1858 ++n_string_blocks;
1860 for (i = STRING_BLOCK_SIZE - 1; i >= 0; --i)
1862 s = b->strings + i;
1863 NEXT_FREE_LISP_STRING (s) = string_free_list;
1864 string_free_list = s;
1867 total_free_strings += STRING_BLOCK_SIZE;
1870 check_string_free_list ();
1872 /* Pop a Lisp_String off the free-list. */
1873 s = string_free_list;
1874 string_free_list = NEXT_FREE_LISP_STRING (s);
1876 MALLOC_UNBLOCK_INPUT;
1878 /* Probably not strictly necessary, but play it safe. */
1879 memset (s, 0, sizeof *s);
1881 --total_free_strings;
1882 ++total_strings;
1883 ++strings_consed;
1884 consing_since_gc += sizeof *s;
1886 #ifdef GC_CHECK_STRING_BYTES
1887 if (!noninteractive)
1889 if (++check_string_bytes_count == 200)
1891 check_string_bytes_count = 0;
1892 check_string_bytes (1);
1894 else
1895 check_string_bytes (0);
1897 #endif /* GC_CHECK_STRING_BYTES */
1899 return s;
1903 /* Set up Lisp_String S for holding NCHARS characters, NBYTES bytes,
1904 plus a NUL byte at the end. Allocate an sdata structure for S, and
1905 set S->data to its `u.data' member. Store a NUL byte at the end of
1906 S->data. Set S->size to NCHARS and S->size_byte to NBYTES. Free
1907 S->data if it was initially non-null. */
1909 void
1910 allocate_string_data (struct Lisp_String *s, int nchars, int nbytes)
1912 struct sdata *data, *old_data;
1913 struct sblock *b;
1914 int needed, old_nbytes;
1916 /* Determine the number of bytes needed to store NBYTES bytes
1917 of string data. */
1918 needed = SDATA_SIZE (nbytes);
1919 old_data = s->data ? SDATA_OF_STRING (s) : NULL;
1920 old_nbytes = GC_STRING_BYTES (s);
1922 MALLOC_BLOCK_INPUT;
1924 if (nbytes > LARGE_STRING_BYTES)
1926 size_t size = sizeof *b - sizeof (struct sdata) + needed;
1928 #ifdef DOUG_LEA_MALLOC
1929 /* Prevent mmap'ing the chunk. Lisp data may not be mmap'ed
1930 because mapped region contents are not preserved in
1931 a dumped Emacs.
1933 In case you think of allowing it in a dumped Emacs at the
1934 cost of not being able to re-dump, there's another reason:
1935 mmap'ed data typically have an address towards the top of the
1936 address space, which won't fit into an EMACS_INT (at least on
1937 32-bit systems with the current tagging scheme). --fx */
1938 mallopt (M_MMAP_MAX, 0);
1939 #endif
1941 b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
1943 #ifdef DOUG_LEA_MALLOC
1944 /* Back to a reasonable maximum of mmap'ed areas. */
1945 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1946 #endif
1948 b->next_free = &b->first_data;
1949 b->first_data.string = NULL;
1950 b->next = large_sblocks;
1951 large_sblocks = b;
1953 else if (current_sblock == NULL
1954 || (((char *) current_sblock + SBLOCK_SIZE
1955 - (char *) current_sblock->next_free)
1956 < (needed + GC_STRING_EXTRA)))
1958 /* Not enough room in the current sblock. */
1959 b = (struct sblock *) lisp_malloc (SBLOCK_SIZE, MEM_TYPE_NON_LISP);
1960 b->next_free = &b->first_data;
1961 b->first_data.string = NULL;
1962 b->next = NULL;
1964 if (current_sblock)
1965 current_sblock->next = b;
1966 else
1967 oldest_sblock = b;
1968 current_sblock = b;
1970 else
1971 b = current_sblock;
1973 data = b->next_free;
1974 b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA);
1976 MALLOC_UNBLOCK_INPUT;
1978 data->string = s;
1979 s->data = SDATA_DATA (data);
1980 #ifdef GC_CHECK_STRING_BYTES
1981 SDATA_NBYTES (data) = nbytes;
1982 #endif
1983 s->size = nchars;
1984 s->size_byte = nbytes;
1985 s->data[nbytes] = '\0';
1986 #ifdef GC_CHECK_STRING_OVERRUN
1987 memcpy (data + needed, string_overrun_cookie, GC_STRING_OVERRUN_COOKIE_SIZE);
1988 #endif
1990 /* If S had already data assigned, mark that as free by setting its
1991 string back-pointer to null, and recording the size of the data
1992 in it. */
1993 if (old_data)
1995 SDATA_NBYTES (old_data) = old_nbytes;
1996 old_data->string = NULL;
1999 consing_since_gc += needed;
2003 /* Sweep and compact strings. */
2005 static void
2006 sweep_strings (void)
2008 struct string_block *b, *next;
2009 struct string_block *live_blocks = NULL;
2011 string_free_list = NULL;
2012 total_strings = total_free_strings = 0;
2013 total_string_size = 0;
2015 /* Scan strings_blocks, free Lisp_Strings that aren't marked. */
2016 for (b = string_blocks; b; b = next)
2018 int i, nfree = 0;
2019 struct Lisp_String *free_list_before = string_free_list;
2021 next = b->next;
2023 for (i = 0; i < STRING_BLOCK_SIZE; ++i)
2025 struct Lisp_String *s = b->strings + i;
2027 if (s->data)
2029 /* String was not on free-list before. */
2030 if (STRING_MARKED_P (s))
2032 /* String is live; unmark it and its intervals. */
2033 UNMARK_STRING (s);
2035 if (!NULL_INTERVAL_P (s->intervals))
2036 UNMARK_BALANCE_INTERVALS (s->intervals);
2038 ++total_strings;
2039 total_string_size += STRING_BYTES (s);
2041 else
2043 /* String is dead. Put it on the free-list. */
2044 struct sdata *data = SDATA_OF_STRING (s);
2046 /* Save the size of S in its sdata so that we know
2047 how large that is. Reset the sdata's string
2048 back-pointer so that we know it's free. */
2049 #ifdef GC_CHECK_STRING_BYTES
2050 if (GC_STRING_BYTES (s) != SDATA_NBYTES (data))
2051 abort ();
2052 #else
2053 data->u.nbytes = GC_STRING_BYTES (s);
2054 #endif
2055 data->string = NULL;
2057 /* Reset the strings's `data' member so that we
2058 know it's free. */
2059 s->data = NULL;
2061 /* Put the string on the free-list. */
2062 NEXT_FREE_LISP_STRING (s) = string_free_list;
2063 string_free_list = s;
2064 ++nfree;
2067 else
2069 /* S was on the free-list before. Put it there again. */
2070 NEXT_FREE_LISP_STRING (s) = string_free_list;
2071 string_free_list = s;
2072 ++nfree;
2076 /* Free blocks that contain free Lisp_Strings only, except
2077 the first two of them. */
2078 if (nfree == STRING_BLOCK_SIZE
2079 && total_free_strings > STRING_BLOCK_SIZE)
2081 lisp_free (b);
2082 --n_string_blocks;
2083 string_free_list = free_list_before;
2085 else
2087 total_free_strings += nfree;
2088 b->next = live_blocks;
2089 live_blocks = b;
2093 check_string_free_list ();
2095 string_blocks = live_blocks;
2096 free_large_strings ();
2097 compact_small_strings ();
2099 check_string_free_list ();
2103 /* Free dead large strings. */
2105 static void
2106 free_large_strings (void)
2108 struct sblock *b, *next;
2109 struct sblock *live_blocks = NULL;
2111 for (b = large_sblocks; b; b = next)
2113 next = b->next;
2115 if (b->first_data.string == NULL)
2116 lisp_free (b);
2117 else
2119 b->next = live_blocks;
2120 live_blocks = b;
2124 large_sblocks = live_blocks;
2128 /* Compact data of small strings. Free sblocks that don't contain
2129 data of live strings after compaction. */
2131 static void
2132 compact_small_strings (void)
2134 struct sblock *b, *tb, *next;
2135 struct sdata *from, *to, *end, *tb_end;
2136 struct sdata *to_end, *from_end;
2138 /* TB is the sblock we copy to, TO is the sdata within TB we copy
2139 to, and TB_END is the end of TB. */
2140 tb = oldest_sblock;
2141 tb_end = (struct sdata *) ((char *) tb + SBLOCK_SIZE);
2142 to = &tb->first_data;
2144 /* Step through the blocks from the oldest to the youngest. We
2145 expect that old blocks will stabilize over time, so that less
2146 copying will happen this way. */
2147 for (b = oldest_sblock; b; b = b->next)
2149 end = b->next_free;
2150 xassert ((char *) end <= (char *) b + SBLOCK_SIZE);
2152 for (from = &b->first_data; from < end; from = from_end)
2154 /* Compute the next FROM here because copying below may
2155 overwrite data we need to compute it. */
2156 int nbytes;
2158 #ifdef GC_CHECK_STRING_BYTES
2159 /* Check that the string size recorded in the string is the
2160 same as the one recorded in the sdata structure. */
2161 if (from->string
2162 && GC_STRING_BYTES (from->string) != SDATA_NBYTES (from))
2163 abort ();
2164 #endif /* GC_CHECK_STRING_BYTES */
2166 if (from->string)
2167 nbytes = GC_STRING_BYTES (from->string);
2168 else
2169 nbytes = SDATA_NBYTES (from);
2171 if (nbytes > LARGE_STRING_BYTES)
2172 abort ();
2174 nbytes = SDATA_SIZE (nbytes);
2175 from_end = (struct sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
2177 #ifdef GC_CHECK_STRING_OVERRUN
2178 if (memcmp (string_overrun_cookie,
2179 (char *) from_end - GC_STRING_OVERRUN_COOKIE_SIZE,
2180 GC_STRING_OVERRUN_COOKIE_SIZE))
2181 abort ();
2182 #endif
2184 /* FROM->string non-null means it's alive. Copy its data. */
2185 if (from->string)
2187 /* If TB is full, proceed with the next sblock. */
2188 to_end = (struct sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2189 if (to_end > tb_end)
2191 tb->next_free = to;
2192 tb = tb->next;
2193 tb_end = (struct sdata *) ((char *) tb + SBLOCK_SIZE);
2194 to = &tb->first_data;
2195 to_end = (struct sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2198 /* Copy, and update the string's `data' pointer. */
2199 if (from != to)
2201 xassert (tb != b || to <= from);
2202 memmove (to, from, nbytes + GC_STRING_EXTRA);
2203 to->string->data = SDATA_DATA (to);
2206 /* Advance past the sdata we copied to. */
2207 to = to_end;
2212 /* The rest of the sblocks following TB don't contain live data, so
2213 we can free them. */
2214 for (b = tb->next; b; b = next)
2216 next = b->next;
2217 lisp_free (b);
2220 tb->next_free = to;
2221 tb->next = NULL;
2222 current_sblock = tb;
2226 DEFUN ("make-string", Fmake_string, Smake_string, 2, 2, 0,
2227 doc: /* Return a newly created string of length LENGTH, with INIT in each element.
2228 LENGTH must be an integer.
2229 INIT must be an integer that represents a character. */)
2230 (Lisp_Object length, Lisp_Object init)
2232 register Lisp_Object val;
2233 register unsigned char *p, *end;
2234 int c, nbytes;
2236 CHECK_NATNUM (length);
2237 CHECK_NUMBER (init);
2239 c = XINT (init);
2240 if (ASCII_CHAR_P (c))
2242 nbytes = XINT (length);
2243 val = make_uninit_string (nbytes);
2244 p = SDATA (val);
2245 end = p + SCHARS (val);
2246 while (p != end)
2247 *p++ = c;
2249 else
2251 unsigned char str[MAX_MULTIBYTE_LENGTH];
2252 int len = CHAR_STRING (c, str);
2254 nbytes = len * XINT (length);
2255 val = make_uninit_multibyte_string (XINT (length), nbytes);
2256 p = SDATA (val);
2257 end = p + nbytes;
2258 while (p != end)
2260 memcpy (p, str, len);
2261 p += len;
2265 *p = 0;
2266 return val;
2270 DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0,
2271 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element.
2272 LENGTH must be a number. INIT matters only in whether it is t or nil. */)
2273 (Lisp_Object length, Lisp_Object init)
2275 register Lisp_Object val;
2276 struct Lisp_Bool_Vector *p;
2277 int real_init, i;
2278 int length_in_chars, length_in_elts, bits_per_value;
2280 CHECK_NATNUM (length);
2282 bits_per_value = sizeof (EMACS_INT) * BOOL_VECTOR_BITS_PER_CHAR;
2284 length_in_elts = (XFASTINT (length) + bits_per_value - 1) / bits_per_value;
2285 length_in_chars = ((XFASTINT (length) + BOOL_VECTOR_BITS_PER_CHAR - 1)
2286 / BOOL_VECTOR_BITS_PER_CHAR);
2288 /* We must allocate one more elements than LENGTH_IN_ELTS for the
2289 slot `size' of the struct Lisp_Bool_Vector. */
2290 val = Fmake_vector (make_number (length_in_elts + 1), Qnil);
2292 /* Get rid of any bits that would cause confusion. */
2293 XVECTOR (val)->size = 0; /* No Lisp_Object to trace in there. */
2294 /* Use XVECTOR (val) rather than `p' because p->size is not TRT. */
2295 XSETPVECTYPE (XVECTOR (val), PVEC_BOOL_VECTOR);
2297 p = XBOOL_VECTOR (val);
2298 p->size = XFASTINT (length);
2300 real_init = (NILP (init) ? 0 : -1);
2301 for (i = 0; i < length_in_chars ; i++)
2302 p->data[i] = real_init;
2304 /* Clear the extraneous bits in the last byte. */
2305 if (XINT (length) != length_in_chars * BOOL_VECTOR_BITS_PER_CHAR)
2306 p->data[length_in_chars - 1]
2307 &= (1 << (XINT (length) % BOOL_VECTOR_BITS_PER_CHAR)) - 1;
2309 return val;
2313 /* Make a string from NBYTES bytes at CONTENTS, and compute the number
2314 of characters from the contents. This string may be unibyte or
2315 multibyte, depending on the contents. */
2317 Lisp_Object
2318 make_string (const char *contents, int nbytes)
2320 register Lisp_Object val;
2321 int nchars, multibyte_nbytes;
2323 parse_str_as_multibyte (contents, nbytes, &nchars, &multibyte_nbytes);
2324 if (nbytes == nchars || nbytes != multibyte_nbytes)
2325 /* CONTENTS contains no multibyte sequences or contains an invalid
2326 multibyte sequence. We must make unibyte string. */
2327 val = make_unibyte_string (contents, nbytes);
2328 else
2329 val = make_multibyte_string (contents, nchars, nbytes);
2330 return val;
2334 /* Make an unibyte string from LENGTH bytes at CONTENTS. */
2336 Lisp_Object
2337 make_unibyte_string (const char *contents, int length)
2339 register Lisp_Object val;
2340 val = make_uninit_string (length);
2341 memcpy (SDATA (val), contents, length);
2342 STRING_SET_UNIBYTE (val);
2343 return val;
2347 /* Make a multibyte string from NCHARS characters occupying NBYTES
2348 bytes at CONTENTS. */
2350 Lisp_Object
2351 make_multibyte_string (const char *contents, int nchars, int nbytes)
2353 register Lisp_Object val;
2354 val = make_uninit_multibyte_string (nchars, nbytes);
2355 memcpy (SDATA (val), contents, nbytes);
2356 return val;
2360 /* Make a string from NCHARS characters occupying NBYTES bytes at
2361 CONTENTS. It is a multibyte string if NBYTES != NCHARS. */
2363 Lisp_Object
2364 make_string_from_bytes (const char *contents, int nchars, int nbytes)
2366 register Lisp_Object val;
2367 val = make_uninit_multibyte_string (nchars, nbytes);
2368 memcpy (SDATA (val), contents, nbytes);
2369 if (SBYTES (val) == SCHARS (val))
2370 STRING_SET_UNIBYTE (val);
2371 return val;
2375 /* Make a string from NCHARS characters occupying NBYTES bytes at
2376 CONTENTS. The argument MULTIBYTE controls whether to label the
2377 string as multibyte. If NCHARS is negative, it counts the number of
2378 characters by itself. */
2380 Lisp_Object
2381 make_specified_string (const char *contents, int nchars, int nbytes, int multibyte)
2383 register Lisp_Object val;
2385 if (nchars < 0)
2387 if (multibyte)
2388 nchars = multibyte_chars_in_text (contents, nbytes);
2389 else
2390 nchars = nbytes;
2392 val = make_uninit_multibyte_string (nchars, nbytes);
2393 memcpy (SDATA (val), contents, nbytes);
2394 if (!multibyte)
2395 STRING_SET_UNIBYTE (val);
2396 return val;
2400 /* Make a string from the data at STR, treating it as multibyte if the
2401 data warrants. */
2403 Lisp_Object
2404 build_string (const char *str)
2406 return make_string (str, strlen (str));
2410 /* Return an unibyte Lisp_String set up to hold LENGTH characters
2411 occupying LENGTH bytes. */
2413 Lisp_Object
2414 make_uninit_string (int length)
2416 Lisp_Object val;
2418 if (!length)
2419 return empty_unibyte_string;
2420 val = make_uninit_multibyte_string (length, length);
2421 STRING_SET_UNIBYTE (val);
2422 return val;
2426 /* Return a multibyte Lisp_String set up to hold NCHARS characters
2427 which occupy NBYTES bytes. */
2429 Lisp_Object
2430 make_uninit_multibyte_string (int nchars, int nbytes)
2432 Lisp_Object string;
2433 struct Lisp_String *s;
2435 if (nchars < 0)
2436 abort ();
2437 if (!nbytes)
2438 return empty_multibyte_string;
2440 s = allocate_string ();
2441 allocate_string_data (s, nchars, nbytes);
2442 XSETSTRING (string, s);
2443 string_chars_consed += nbytes;
2444 return string;
2449 /***********************************************************************
2450 Float Allocation
2451 ***********************************************************************/
2453 /* We store float cells inside of float_blocks, allocating a new
2454 float_block with malloc whenever necessary. Float cells reclaimed
2455 by GC are put on a free list to be reallocated before allocating
2456 any new float cells from the latest float_block. */
2458 #define FLOAT_BLOCK_SIZE \
2459 (((BLOCK_BYTES - sizeof (struct float_block *) \
2460 /* The compiler might add padding at the end. */ \
2461 - (sizeof (struct Lisp_Float) - sizeof (int))) * CHAR_BIT) \
2462 / (sizeof (struct Lisp_Float) * CHAR_BIT + 1))
2464 #define GETMARKBIT(block,n) \
2465 (((block)->gcmarkbits[(n) / (sizeof(int) * CHAR_BIT)] \
2466 >> ((n) % (sizeof(int) * CHAR_BIT))) \
2467 & 1)
2469 #define SETMARKBIT(block,n) \
2470 (block)->gcmarkbits[(n) / (sizeof(int) * CHAR_BIT)] \
2471 |= 1 << ((n) % (sizeof(int) * CHAR_BIT))
2473 #define UNSETMARKBIT(block,n) \
2474 (block)->gcmarkbits[(n) / (sizeof(int) * CHAR_BIT)] \
2475 &= ~(1 << ((n) % (sizeof(int) * CHAR_BIT)))
2477 #define FLOAT_BLOCK(fptr) \
2478 ((struct float_block *)(((EMACS_UINT)(fptr)) & ~(BLOCK_ALIGN - 1)))
2480 #define FLOAT_INDEX(fptr) \
2481 ((((EMACS_UINT)(fptr)) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Float))
2483 struct float_block
2485 /* Place `floats' at the beginning, to ease up FLOAT_INDEX's job. */
2486 struct Lisp_Float floats[FLOAT_BLOCK_SIZE];
2487 int gcmarkbits[1 + FLOAT_BLOCK_SIZE / (sizeof(int) * CHAR_BIT)];
2488 struct float_block *next;
2491 #define FLOAT_MARKED_P(fptr) \
2492 GETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2494 #define FLOAT_MARK(fptr) \
2495 SETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2497 #define FLOAT_UNMARK(fptr) \
2498 UNSETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2500 /* Current float_block. */
2502 struct float_block *float_block;
2504 /* Index of first unused Lisp_Float in the current float_block. */
2506 int float_block_index;
2508 /* Total number of float blocks now in use. */
2510 int n_float_blocks;
2512 /* Free-list of Lisp_Floats. */
2514 struct Lisp_Float *float_free_list;
2517 /* Initialize float allocation. */
2519 static void
2520 init_float (void)
2522 float_block = NULL;
2523 float_block_index = FLOAT_BLOCK_SIZE; /* Force alloc of new float_block. */
2524 float_free_list = 0;
2525 n_float_blocks = 0;
2529 /* Return a new float object with value FLOAT_VALUE. */
2531 Lisp_Object
2532 make_float (double float_value)
2534 register Lisp_Object val;
2536 /* eassert (!handling_signal); */
2538 MALLOC_BLOCK_INPUT;
2540 if (float_free_list)
2542 /* We use the data field for chaining the free list
2543 so that we won't use the same field that has the mark bit. */
2544 XSETFLOAT (val, float_free_list);
2545 float_free_list = float_free_list->u.chain;
2547 else
2549 if (float_block_index == FLOAT_BLOCK_SIZE)
2551 register struct float_block *new;
2553 new = (struct float_block *) lisp_align_malloc (sizeof *new,
2554 MEM_TYPE_FLOAT);
2555 new->next = float_block;
2556 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2557 float_block = new;
2558 float_block_index = 0;
2559 n_float_blocks++;
2561 XSETFLOAT (val, &float_block->floats[float_block_index]);
2562 float_block_index++;
2565 MALLOC_UNBLOCK_INPUT;
2567 XFLOAT_INIT (val, float_value);
2568 eassert (!FLOAT_MARKED_P (XFLOAT (val)));
2569 consing_since_gc += sizeof (struct Lisp_Float);
2570 floats_consed++;
2571 return val;
2576 /***********************************************************************
2577 Cons Allocation
2578 ***********************************************************************/
2580 /* We store cons cells inside of cons_blocks, allocating a new
2581 cons_block with malloc whenever necessary. Cons cells reclaimed by
2582 GC are put on a free list to be reallocated before allocating
2583 any new cons cells from the latest cons_block. */
2585 #define CONS_BLOCK_SIZE \
2586 (((BLOCK_BYTES - sizeof (struct cons_block *)) * CHAR_BIT) \
2587 / (sizeof (struct Lisp_Cons) * CHAR_BIT + 1))
2589 #define CONS_BLOCK(fptr) \
2590 ((struct cons_block *)(((EMACS_UINT)(fptr)) & ~(BLOCK_ALIGN - 1)))
2592 #define CONS_INDEX(fptr) \
2593 ((((EMACS_UINT)(fptr)) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Cons))
2595 struct cons_block
2597 /* Place `conses' at the beginning, to ease up CONS_INDEX's job. */
2598 struct Lisp_Cons conses[CONS_BLOCK_SIZE];
2599 int gcmarkbits[1 + CONS_BLOCK_SIZE / (sizeof(int) * CHAR_BIT)];
2600 struct cons_block *next;
2603 #define CONS_MARKED_P(fptr) \
2604 GETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2606 #define CONS_MARK(fptr) \
2607 SETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2609 #define CONS_UNMARK(fptr) \
2610 UNSETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2612 /* Current cons_block. */
2614 struct cons_block *cons_block;
2616 /* Index of first unused Lisp_Cons in the current block. */
2618 int cons_block_index;
2620 /* Free-list of Lisp_Cons structures. */
2622 struct Lisp_Cons *cons_free_list;
2624 /* Total number of cons blocks now in use. */
2626 static int n_cons_blocks;
2629 /* Initialize cons allocation. */
2631 static void
2632 init_cons (void)
2634 cons_block = NULL;
2635 cons_block_index = CONS_BLOCK_SIZE; /* Force alloc of new cons_block. */
2636 cons_free_list = 0;
2637 n_cons_blocks = 0;
2641 /* Explicitly free a cons cell by putting it on the free-list. */
2643 void
2644 free_cons (struct Lisp_Cons *ptr)
2646 ptr->u.chain = cons_free_list;
2647 #if GC_MARK_STACK
2648 ptr->car = Vdead;
2649 #endif
2650 cons_free_list = ptr;
2653 DEFUN ("cons", Fcons, Scons, 2, 2, 0,
2654 doc: /* Create a new cons, give it CAR and CDR as components, and return it. */)
2655 (Lisp_Object car, Lisp_Object cdr)
2657 register Lisp_Object val;
2659 /* eassert (!handling_signal); */
2661 MALLOC_BLOCK_INPUT;
2663 if (cons_free_list)
2665 /* We use the cdr for chaining the free list
2666 so that we won't use the same field that has the mark bit. */
2667 XSETCONS (val, cons_free_list);
2668 cons_free_list = cons_free_list->u.chain;
2670 else
2672 if (cons_block_index == CONS_BLOCK_SIZE)
2674 register struct cons_block *new;
2675 new = (struct cons_block *) lisp_align_malloc (sizeof *new,
2676 MEM_TYPE_CONS);
2677 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2678 new->next = cons_block;
2679 cons_block = new;
2680 cons_block_index = 0;
2681 n_cons_blocks++;
2683 XSETCONS (val, &cons_block->conses[cons_block_index]);
2684 cons_block_index++;
2687 MALLOC_UNBLOCK_INPUT;
2689 XSETCAR (val, car);
2690 XSETCDR (val, cdr);
2691 eassert (!CONS_MARKED_P (XCONS (val)));
2692 consing_since_gc += sizeof (struct Lisp_Cons);
2693 cons_cells_consed++;
2694 return val;
2697 /* Get an error now if there's any junk in the cons free list. */
2698 void
2699 check_cons_list (void)
2701 #ifdef GC_CHECK_CONS_LIST
2702 struct Lisp_Cons *tail = cons_free_list;
2704 while (tail)
2705 tail = tail->u.chain;
2706 #endif
2709 /* Make a list of 1, 2, 3, 4 or 5 specified objects. */
2711 Lisp_Object
2712 list1 (Lisp_Object arg1)
2714 return Fcons (arg1, Qnil);
2717 Lisp_Object
2718 list2 (Lisp_Object arg1, Lisp_Object arg2)
2720 return Fcons (arg1, Fcons (arg2, Qnil));
2724 Lisp_Object
2725 list3 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3)
2727 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Qnil)));
2731 Lisp_Object
2732 list4 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4)
2734 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4, Qnil))));
2738 Lisp_Object
2739 list5 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5)
2741 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4,
2742 Fcons (arg5, Qnil)))));
2746 DEFUN ("list", Flist, Slist, 0, MANY, 0,
2747 doc: /* Return a newly created list with specified arguments as elements.
2748 Any number of arguments, even zero arguments, are allowed.
2749 usage: (list &rest OBJECTS) */)
2750 (int nargs, register Lisp_Object *args)
2752 register Lisp_Object val;
2753 val = Qnil;
2755 while (nargs > 0)
2757 nargs--;
2758 val = Fcons (args[nargs], val);
2760 return val;
2764 DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
2765 doc: /* Return a newly created list of length LENGTH, with each element being INIT. */)
2766 (register Lisp_Object length, Lisp_Object init)
2768 register Lisp_Object val;
2769 register int size;
2771 CHECK_NATNUM (length);
2772 size = XFASTINT (length);
2774 val = Qnil;
2775 while (size > 0)
2777 val = Fcons (init, val);
2778 --size;
2780 if (size > 0)
2782 val = Fcons (init, val);
2783 --size;
2785 if (size > 0)
2787 val = Fcons (init, val);
2788 --size;
2790 if (size > 0)
2792 val = Fcons (init, val);
2793 --size;
2795 if (size > 0)
2797 val = Fcons (init, val);
2798 --size;
2804 QUIT;
2807 return val;
2812 /***********************************************************************
2813 Vector Allocation
2814 ***********************************************************************/
2816 /* Singly-linked list of all vectors. */
2818 static struct Lisp_Vector *all_vectors;
2820 /* Total number of vector-like objects now in use. */
2822 static int n_vectors;
2825 /* Value is a pointer to a newly allocated Lisp_Vector structure
2826 with room for LEN Lisp_Objects. */
2828 static struct Lisp_Vector *
2829 allocate_vectorlike (EMACS_INT len)
2831 struct Lisp_Vector *p;
2832 size_t nbytes;
2834 MALLOC_BLOCK_INPUT;
2836 #ifdef DOUG_LEA_MALLOC
2837 /* Prevent mmap'ing the chunk. Lisp data may not be mmap'ed
2838 because mapped region contents are not preserved in
2839 a dumped Emacs. */
2840 mallopt (M_MMAP_MAX, 0);
2841 #endif
2843 /* This gets triggered by code which I haven't bothered to fix. --Stef */
2844 /* eassert (!handling_signal); */
2846 nbytes = sizeof *p + (len - 1) * sizeof p->contents[0];
2847 p = (struct Lisp_Vector *) lisp_malloc (nbytes, MEM_TYPE_VECTORLIKE);
2849 #ifdef DOUG_LEA_MALLOC
2850 /* Back to a reasonable maximum of mmap'ed areas. */
2851 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
2852 #endif
2854 consing_since_gc += nbytes;
2855 vector_cells_consed += len;
2857 p->next = all_vectors;
2858 all_vectors = p;
2860 MALLOC_UNBLOCK_INPUT;
2862 ++n_vectors;
2863 return p;
2867 /* Allocate a vector with NSLOTS slots. */
2869 struct Lisp_Vector *
2870 allocate_vector (EMACS_INT nslots)
2872 struct Lisp_Vector *v = allocate_vectorlike (nslots);
2873 v->size = nslots;
2874 return v;
2878 /* Allocate other vector-like structures. */
2880 struct Lisp_Vector *
2881 allocate_pseudovector (int memlen, int lisplen, EMACS_INT tag)
2883 struct Lisp_Vector *v = allocate_vectorlike (memlen);
2884 EMACS_INT i;
2886 /* Only the first lisplen slots will be traced normally by the GC. */
2887 v->size = lisplen;
2888 for (i = 0; i < lisplen; ++i)
2889 v->contents[i] = Qnil;
2891 XSETPVECTYPE (v, tag); /* Add the appropriate tag. */
2892 return v;
2895 struct Lisp_Hash_Table *
2896 allocate_hash_table (void)
2898 return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, PVEC_HASH_TABLE);
2902 struct window *
2903 allocate_window (void)
2905 return ALLOCATE_PSEUDOVECTOR(struct window, current_matrix, PVEC_WINDOW);
2909 struct terminal *
2910 allocate_terminal (void)
2912 struct terminal *t = ALLOCATE_PSEUDOVECTOR (struct terminal,
2913 next_terminal, PVEC_TERMINAL);
2914 /* Zero out the non-GC'd fields. FIXME: This should be made unnecessary. */
2915 memset (&t->next_terminal, 0,
2916 (char*) (t + 1) - (char*) &t->next_terminal);
2918 return t;
2921 struct frame *
2922 allocate_frame (void)
2924 struct frame *f = ALLOCATE_PSEUDOVECTOR (struct frame,
2925 face_cache, PVEC_FRAME);
2926 /* Zero out the non-GC'd fields. FIXME: This should be made unnecessary. */
2927 memset (&f->face_cache, 0,
2928 (char *) (f + 1) - (char *) &f->face_cache);
2929 return f;
2933 struct Lisp_Process *
2934 allocate_process (void)
2936 return ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
2940 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
2941 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
2942 See also the function `vector'. */)
2943 (register Lisp_Object length, Lisp_Object init)
2945 Lisp_Object vector;
2946 register EMACS_INT sizei;
2947 register int index;
2948 register struct Lisp_Vector *p;
2950 CHECK_NATNUM (length);
2951 sizei = XFASTINT (length);
2953 p = allocate_vector (sizei);
2954 for (index = 0; index < sizei; index++)
2955 p->contents[index] = init;
2957 XSETVECTOR (vector, p);
2958 return vector;
2962 /* Return a new `function vector' containing KIND as the first element,
2963 followed by NUM_NIL_SLOTS nil elements, and further elements copied from
2964 the vector PARAMS of length NUM_PARAMS (so the total length of the
2965 resulting vector is 1 + NUM_NIL_SLOTS + NUM_PARAMS).
2967 If NUM_PARAMS is zero, then PARAMS may be NULL.
2969 A `function vector', a.k.a. `funvec', is a funcallable vector in Emacs Lisp.
2970 See the function `funvec' for more detail. */
2972 Lisp_Object
2973 make_funvec (Lisp_Object kind, int num_nil_slots, int num_params,
2974 Lisp_Object *params)
2976 int param_index;
2977 Lisp_Object funvec;
2979 funvec = Fmake_vector (make_number (1 + num_nil_slots + num_params), Qnil);
2981 ASET (funvec, 0, kind);
2983 for (param_index = 0; param_index < num_params; param_index++)
2984 ASET (funvec, 1 + num_nil_slots + param_index, params[param_index]);
2986 XSETPVECTYPE (XVECTOR (funvec), PVEC_FUNVEC);
2987 XSETFUNVEC (funvec, XVECTOR (funvec));
2989 return funvec;
2993 DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
2994 doc: /* Return a newly created vector with specified arguments as elements.
2995 Any number of arguments, even zero arguments, are allowed.
2996 usage: (vector &rest OBJECTS) */)
2997 (register int nargs, Lisp_Object *args)
2999 register Lisp_Object len, val;
3000 register int index;
3001 register struct Lisp_Vector *p;
3003 XSETFASTINT (len, nargs);
3004 val = Fmake_vector (len, Qnil);
3005 p = XVECTOR (val);
3006 for (index = 0; index < nargs; index++)
3007 p->contents[index] = args[index];
3008 return val;
3012 DEFUN ("funvec", Ffunvec, Sfunvec, 1, MANY, 0,
3013 doc: /* Return a newly created `function vector' of type KIND.
3014 A `function vector', a.k.a. `funvec', is a funcallable vector in Emacs Lisp.
3015 KIND indicates the kind of funvec, and determines its behavior when called.
3016 The meaning of the remaining arguments depends on KIND. Currently
3017 implemented values of KIND, and their meaning, are:
3019 A list -- A byte-compiled function. See `make-byte-code' for the usual
3020 way to create byte-compiled functions.
3022 `curry' -- A curried function. Remaining arguments are a function to
3023 call, and arguments to prepend to user arguments at the
3024 time of the call; see the `curry' function.
3026 usage: (funvec KIND &rest PARAMS) */)
3027 (int nargs, Lisp_Object *args)
3029 return make_funvec (args[0], 0, nargs - 1, args + 1);
3033 DEFUN ("make-byte-code", Fmake_byte_code, Smake_byte_code, 4, MANY, 0,
3034 doc: /* Create a byte-code object with specified arguments as elements.
3035 The arguments should be the arglist, bytecode-string, constant vector,
3036 stack size, (optional) doc string, and (optional) interactive spec.
3037 The first four arguments are required; at most six have any
3038 significance.
3039 usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS) */)
3040 (register int nargs, Lisp_Object *args)
3042 register Lisp_Object len, val;
3043 register int index;
3044 register struct Lisp_Vector *p;
3046 /* Make sure the arg-list is really a list, as that's what's used to
3047 distinguish a byte-compiled object from other funvecs. */
3048 CHECK_LIST (args[0]);
3050 XSETFASTINT (len, nargs);
3051 if (!NILP (Vpurify_flag))
3052 val = make_pure_vector ((EMACS_INT) nargs);
3053 else
3054 val = Fmake_vector (len, Qnil);
3056 if (nargs > 1 && STRINGP (args[1]) && STRING_MULTIBYTE (args[1]))
3057 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the
3058 earlier because they produced a raw 8-bit string for byte-code
3059 and now such a byte-code string is loaded as multibyte while
3060 raw 8-bit characters converted to multibyte form. Thus, now we
3061 must convert them back to the original unibyte form. */
3062 args[1] = Fstring_as_unibyte (args[1]);
3064 p = XVECTOR (val);
3065 for (index = 0; index < nargs; index++)
3067 if (!NILP (Vpurify_flag))
3068 args[index] = Fpurecopy (args[index]);
3069 p->contents[index] = args[index];
3071 XSETPVECTYPE (p, PVEC_FUNVEC);
3072 XSETFUNVEC (val, p);
3073 return val;
3078 /***********************************************************************
3079 Symbol Allocation
3080 ***********************************************************************/
3082 /* Each symbol_block is just under 1020 bytes long, since malloc
3083 really allocates in units of powers of two and uses 4 bytes for its
3084 own overhead. */
3086 #define SYMBOL_BLOCK_SIZE \
3087 ((1020 - sizeof (struct symbol_block *)) / sizeof (struct Lisp_Symbol))
3089 struct symbol_block
3091 /* Place `symbols' first, to preserve alignment. */
3092 struct Lisp_Symbol symbols[SYMBOL_BLOCK_SIZE];
3093 struct symbol_block *next;
3096 /* Current symbol block and index of first unused Lisp_Symbol
3097 structure in it. */
3099 static struct symbol_block *symbol_block;
3100 static int symbol_block_index;
3102 /* List of free symbols. */
3104 static struct Lisp_Symbol *symbol_free_list;
3106 /* Total number of symbol blocks now in use. */
3108 static int n_symbol_blocks;
3111 /* Initialize symbol allocation. */
3113 static void
3114 init_symbol (void)
3116 symbol_block = NULL;
3117 symbol_block_index = SYMBOL_BLOCK_SIZE;
3118 symbol_free_list = 0;
3119 n_symbol_blocks = 0;
3123 DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0,
3124 doc: /* Return a newly allocated uninterned symbol whose name is NAME.
3125 Its value and function definition are void, and its property list is nil. */)
3126 (Lisp_Object name)
3128 register Lisp_Object val;
3129 register struct Lisp_Symbol *p;
3131 CHECK_STRING (name);
3133 /* eassert (!handling_signal); */
3135 MALLOC_BLOCK_INPUT;
3137 if (symbol_free_list)
3139 XSETSYMBOL (val, symbol_free_list);
3140 symbol_free_list = symbol_free_list->next;
3142 else
3144 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
3146 struct symbol_block *new;
3147 new = (struct symbol_block *) lisp_malloc (sizeof *new,
3148 MEM_TYPE_SYMBOL);
3149 new->next = symbol_block;
3150 symbol_block = new;
3151 symbol_block_index = 0;
3152 n_symbol_blocks++;
3154 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index]);
3155 symbol_block_index++;
3158 MALLOC_UNBLOCK_INPUT;
3160 p = XSYMBOL (val);
3161 p->xname = name;
3162 p->plist = Qnil;
3163 p->redirect = SYMBOL_PLAINVAL;
3164 SET_SYMBOL_VAL (p, Qunbound);
3165 p->function = Qunbound;
3166 p->next = NULL;
3167 p->gcmarkbit = 0;
3168 p->interned = SYMBOL_UNINTERNED;
3169 p->constant = 0;
3170 p->declared_special = 0;
3171 consing_since_gc += sizeof (struct Lisp_Symbol);
3172 symbols_consed++;
3173 return val;
3178 /***********************************************************************
3179 Marker (Misc) Allocation
3180 ***********************************************************************/
3182 /* Allocation of markers and other objects that share that structure.
3183 Works like allocation of conses. */
3185 #define MARKER_BLOCK_SIZE \
3186 ((1020 - sizeof (struct marker_block *)) / sizeof (union Lisp_Misc))
3188 struct marker_block
3190 /* Place `markers' first, to preserve alignment. */
3191 union Lisp_Misc markers[MARKER_BLOCK_SIZE];
3192 struct marker_block *next;
3195 static struct marker_block *marker_block;
3196 static int marker_block_index;
3198 static union Lisp_Misc *marker_free_list;
3200 /* Total number of marker blocks now in use. */
3202 static int n_marker_blocks;
3204 static void
3205 init_marker (void)
3207 marker_block = NULL;
3208 marker_block_index = MARKER_BLOCK_SIZE;
3209 marker_free_list = 0;
3210 n_marker_blocks = 0;
3213 /* Return a newly allocated Lisp_Misc object, with no substructure. */
3215 Lisp_Object
3216 allocate_misc (void)
3218 Lisp_Object val;
3220 /* eassert (!handling_signal); */
3222 MALLOC_BLOCK_INPUT;
3224 if (marker_free_list)
3226 XSETMISC (val, marker_free_list);
3227 marker_free_list = marker_free_list->u_free.chain;
3229 else
3231 if (marker_block_index == MARKER_BLOCK_SIZE)
3233 struct marker_block *new;
3234 new = (struct marker_block *) lisp_malloc (sizeof *new,
3235 MEM_TYPE_MISC);
3236 new->next = marker_block;
3237 marker_block = new;
3238 marker_block_index = 0;
3239 n_marker_blocks++;
3240 total_free_markers += MARKER_BLOCK_SIZE;
3242 XSETMISC (val, &marker_block->markers[marker_block_index]);
3243 marker_block_index++;
3246 MALLOC_UNBLOCK_INPUT;
3248 --total_free_markers;
3249 consing_since_gc += sizeof (union Lisp_Misc);
3250 misc_objects_consed++;
3251 XMISCANY (val)->gcmarkbit = 0;
3252 return val;
3255 /* Free a Lisp_Misc object */
3257 void
3258 free_misc (Lisp_Object misc)
3260 XMISCTYPE (misc) = Lisp_Misc_Free;
3261 XMISC (misc)->u_free.chain = marker_free_list;
3262 marker_free_list = XMISC (misc);
3264 total_free_markers++;
3267 /* Return a Lisp_Misc_Save_Value object containing POINTER and
3268 INTEGER. This is used to package C values to call record_unwind_protect.
3269 The unwind function can get the C values back using XSAVE_VALUE. */
3271 Lisp_Object
3272 make_save_value (void *pointer, int integer)
3274 register Lisp_Object val;
3275 register struct Lisp_Save_Value *p;
3277 val = allocate_misc ();
3278 XMISCTYPE (val) = Lisp_Misc_Save_Value;
3279 p = XSAVE_VALUE (val);
3280 p->pointer = pointer;
3281 p->integer = integer;
3282 p->dogc = 0;
3283 return val;
3286 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3287 doc: /* Return a newly allocated marker which does not point at any place. */)
3288 (void)
3290 register Lisp_Object val;
3291 register struct Lisp_Marker *p;
3293 val = allocate_misc ();
3294 XMISCTYPE (val) = Lisp_Misc_Marker;
3295 p = XMARKER (val);
3296 p->buffer = 0;
3297 p->bytepos = 0;
3298 p->charpos = 0;
3299 p->next = NULL;
3300 p->insertion_type = 0;
3301 return val;
3304 /* Put MARKER back on the free list after using it temporarily. */
3306 void
3307 free_marker (Lisp_Object marker)
3309 unchain_marker (XMARKER (marker));
3310 free_misc (marker);
3314 /* Return a newly created vector or string with specified arguments as
3315 elements. If all the arguments are characters that can fit
3316 in a string of events, make a string; otherwise, make a vector.
3318 Any number of arguments, even zero arguments, are allowed. */
3320 Lisp_Object
3321 make_event_array (register int nargs, Lisp_Object *args)
3323 int i;
3325 for (i = 0; i < nargs; i++)
3326 /* The things that fit in a string
3327 are characters that are in 0...127,
3328 after discarding the meta bit and all the bits above it. */
3329 if (!INTEGERP (args[i])
3330 || (XUINT (args[i]) & ~(-CHAR_META)) >= 0200)
3331 return Fvector (nargs, args);
3333 /* Since the loop exited, we know that all the things in it are
3334 characters, so we can make a string. */
3336 Lisp_Object result;
3338 result = Fmake_string (make_number (nargs), make_number (0));
3339 for (i = 0; i < nargs; i++)
3341 SSET (result, i, XINT (args[i]));
3342 /* Move the meta bit to the right place for a string char. */
3343 if (XINT (args[i]) & CHAR_META)
3344 SSET (result, i, SREF (result, i) | 0x80);
3347 return result;
3353 /************************************************************************
3354 Memory Full Handling
3355 ************************************************************************/
3358 /* Called if malloc returns zero. */
3360 void
3361 memory_full (void)
3363 int i;
3365 Vmemory_full = Qt;
3367 memory_full_cons_threshold = sizeof (struct cons_block);
3369 /* The first time we get here, free the spare memory. */
3370 for (i = 0; i < sizeof (spare_memory) / sizeof (char *); i++)
3371 if (spare_memory[i])
3373 if (i == 0)
3374 free (spare_memory[i]);
3375 else if (i >= 1 && i <= 4)
3376 lisp_align_free (spare_memory[i]);
3377 else
3378 lisp_free (spare_memory[i]);
3379 spare_memory[i] = 0;
3382 /* Record the space now used. When it decreases substantially,
3383 we can refill the memory reserve. */
3384 #ifndef SYSTEM_MALLOC
3385 bytes_used_when_full = BYTES_USED;
3386 #endif
3388 /* This used to call error, but if we've run out of memory, we could
3389 get infinite recursion trying to build the string. */
3390 xsignal (Qnil, Vmemory_signal_data);
3393 /* If we released our reserve (due to running out of memory),
3394 and we have a fair amount free once again,
3395 try to set aside another reserve in case we run out once more.
3397 This is called when a relocatable block is freed in ralloc.c,
3398 and also directly from this file, in case we're not using ralloc.c. */
3400 void
3401 refill_memory_reserve (void)
3403 #ifndef SYSTEM_MALLOC
3404 if (spare_memory[0] == 0)
3405 spare_memory[0] = (char *) malloc ((size_t) SPARE_MEMORY);
3406 if (spare_memory[1] == 0)
3407 spare_memory[1] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3408 MEM_TYPE_CONS);
3409 if (spare_memory[2] == 0)
3410 spare_memory[2] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3411 MEM_TYPE_CONS);
3412 if (spare_memory[3] == 0)
3413 spare_memory[3] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3414 MEM_TYPE_CONS);
3415 if (spare_memory[4] == 0)
3416 spare_memory[4] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3417 MEM_TYPE_CONS);
3418 if (spare_memory[5] == 0)
3419 spare_memory[5] = (char *) lisp_malloc (sizeof (struct string_block),
3420 MEM_TYPE_STRING);
3421 if (spare_memory[6] == 0)
3422 spare_memory[6] = (char *) lisp_malloc (sizeof (struct string_block),
3423 MEM_TYPE_STRING);
3424 if (spare_memory[0] && spare_memory[1] && spare_memory[5])
3425 Vmemory_full = Qnil;
3426 #endif
3429 /************************************************************************
3430 C Stack Marking
3431 ************************************************************************/
3433 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
3435 /* Conservative C stack marking requires a method to identify possibly
3436 live Lisp objects given a pointer value. We do this by keeping
3437 track of blocks of Lisp data that are allocated in a red-black tree
3438 (see also the comment of mem_node which is the type of nodes in
3439 that tree). Function lisp_malloc adds information for an allocated
3440 block to the red-black tree with calls to mem_insert, and function
3441 lisp_free removes it with mem_delete. Functions live_string_p etc
3442 call mem_find to lookup information about a given pointer in the
3443 tree, and use that to determine if the pointer points to a Lisp
3444 object or not. */
3446 /* Initialize this part of alloc.c. */
3448 static void
3449 mem_init (void)
3451 mem_z.left = mem_z.right = MEM_NIL;
3452 mem_z.parent = NULL;
3453 mem_z.color = MEM_BLACK;
3454 mem_z.start = mem_z.end = NULL;
3455 mem_root = MEM_NIL;
3459 /* Value is a pointer to the mem_node containing START. Value is
3460 MEM_NIL if there is no node in the tree containing START. */
3462 static INLINE struct mem_node *
3463 mem_find (void *start)
3465 struct mem_node *p;
3467 if (start < min_heap_address || start > max_heap_address)
3468 return MEM_NIL;
3470 /* Make the search always successful to speed up the loop below. */
3471 mem_z.start = start;
3472 mem_z.end = (char *) start + 1;
3474 p = mem_root;
3475 while (start < p->start || start >= p->end)
3476 p = start < p->start ? p->left : p->right;
3477 return p;
3481 /* Insert a new node into the tree for a block of memory with start
3482 address START, end address END, and type TYPE. Value is a
3483 pointer to the node that was inserted. */
3485 static struct mem_node *
3486 mem_insert (void *start, void *end, enum mem_type type)
3488 struct mem_node *c, *parent, *x;
3490 if (min_heap_address == NULL || start < min_heap_address)
3491 min_heap_address = start;
3492 if (max_heap_address == NULL || end > max_heap_address)
3493 max_heap_address = end;
3495 /* See where in the tree a node for START belongs. In this
3496 particular application, it shouldn't happen that a node is already
3497 present. For debugging purposes, let's check that. */
3498 c = mem_root;
3499 parent = NULL;
3501 #if GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS
3503 while (c != MEM_NIL)
3505 if (start >= c->start && start < c->end)
3506 abort ();
3507 parent = c;
3508 c = start < c->start ? c->left : c->right;
3511 #else /* GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS */
3513 while (c != MEM_NIL)
3515 parent = c;
3516 c = start < c->start ? c->left : c->right;
3519 #endif /* GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS */
3521 /* Create a new node. */
3522 #ifdef GC_MALLOC_CHECK
3523 x = (struct mem_node *) _malloc_internal (sizeof *x);
3524 if (x == NULL)
3525 abort ();
3526 #else
3527 x = (struct mem_node *) xmalloc (sizeof *x);
3528 #endif
3529 x->start = start;
3530 x->end = end;
3531 x->type = type;
3532 x->parent = parent;
3533 x->left = x->right = MEM_NIL;
3534 x->color = MEM_RED;
3536 /* Insert it as child of PARENT or install it as root. */
3537 if (parent)
3539 if (start < parent->start)
3540 parent->left = x;
3541 else
3542 parent->right = x;
3544 else
3545 mem_root = x;
3547 /* Re-establish red-black tree properties. */
3548 mem_insert_fixup (x);
3550 return x;
3554 /* Re-establish the red-black properties of the tree, and thereby
3555 balance the tree, after node X has been inserted; X is always red. */
3557 static void
3558 mem_insert_fixup (struct mem_node *x)
3560 while (x != mem_root && x->parent->color == MEM_RED)
3562 /* X is red and its parent is red. This is a violation of
3563 red-black tree property #3. */
3565 if (x->parent == x->parent->parent->left)
3567 /* We're on the left side of our grandparent, and Y is our
3568 "uncle". */
3569 struct mem_node *y = x->parent->parent->right;
3571 if (y->color == MEM_RED)
3573 /* Uncle and parent are red but should be black because
3574 X is red. Change the colors accordingly and proceed
3575 with the grandparent. */
3576 x->parent->color = MEM_BLACK;
3577 y->color = MEM_BLACK;
3578 x->parent->parent->color = MEM_RED;
3579 x = x->parent->parent;
3581 else
3583 /* Parent and uncle have different colors; parent is
3584 red, uncle is black. */
3585 if (x == x->parent->right)
3587 x = x->parent;
3588 mem_rotate_left (x);
3591 x->parent->color = MEM_BLACK;
3592 x->parent->parent->color = MEM_RED;
3593 mem_rotate_right (x->parent->parent);
3596 else
3598 /* This is the symmetrical case of above. */
3599 struct mem_node *y = x->parent->parent->left;
3601 if (y->color == MEM_RED)
3603 x->parent->color = MEM_BLACK;
3604 y->color = MEM_BLACK;
3605 x->parent->parent->color = MEM_RED;
3606 x = x->parent->parent;
3608 else
3610 if (x == x->parent->left)
3612 x = x->parent;
3613 mem_rotate_right (x);
3616 x->parent->color = MEM_BLACK;
3617 x->parent->parent->color = MEM_RED;
3618 mem_rotate_left (x->parent->parent);
3623 /* The root may have been changed to red due to the algorithm. Set
3624 it to black so that property #5 is satisfied. */
3625 mem_root->color = MEM_BLACK;
3629 /* (x) (y)
3630 / \ / \
3631 a (y) ===> (x) c
3632 / \ / \
3633 b c a b */
3635 static void
3636 mem_rotate_left (struct mem_node *x)
3638 struct mem_node *y;
3640 /* Turn y's left sub-tree into x's right sub-tree. */
3641 y = x->right;
3642 x->right = y->left;
3643 if (y->left != MEM_NIL)
3644 y->left->parent = x;
3646 /* Y's parent was x's parent. */
3647 if (y != MEM_NIL)
3648 y->parent = x->parent;
3650 /* Get the parent to point to y instead of x. */
3651 if (x->parent)
3653 if (x == x->parent->left)
3654 x->parent->left = y;
3655 else
3656 x->parent->right = y;
3658 else
3659 mem_root = y;
3661 /* Put x on y's left. */
3662 y->left = x;
3663 if (x != MEM_NIL)
3664 x->parent = y;
3668 /* (x) (Y)
3669 / \ / \
3670 (y) c ===> a (x)
3671 / \ / \
3672 a b b c */
3674 static void
3675 mem_rotate_right (struct mem_node *x)
3677 struct mem_node *y = x->left;
3679 x->left = y->right;
3680 if (y->right != MEM_NIL)
3681 y->right->parent = x;
3683 if (y != MEM_NIL)
3684 y->parent = x->parent;
3685 if (x->parent)
3687 if (x == x->parent->right)
3688 x->parent->right = y;
3689 else
3690 x->parent->left = y;
3692 else
3693 mem_root = y;
3695 y->right = x;
3696 if (x != MEM_NIL)
3697 x->parent = y;
3701 /* Delete node Z from the tree. If Z is null or MEM_NIL, do nothing. */
3703 static void
3704 mem_delete (struct mem_node *z)
3706 struct mem_node *x, *y;
3708 if (!z || z == MEM_NIL)
3709 return;
3711 if (z->left == MEM_NIL || z->right == MEM_NIL)
3712 y = z;
3713 else
3715 y = z->right;
3716 while (y->left != MEM_NIL)
3717 y = y->left;
3720 if (y->left != MEM_NIL)
3721 x = y->left;
3722 else
3723 x = y->right;
3725 x->parent = y->parent;
3726 if (y->parent)
3728 if (y == y->parent->left)
3729 y->parent->left = x;
3730 else
3731 y->parent->right = x;
3733 else
3734 mem_root = x;
3736 if (y != z)
3738 z->start = y->start;
3739 z->end = y->end;
3740 z->type = y->type;
3743 if (y->color == MEM_BLACK)
3744 mem_delete_fixup (x);
3746 #ifdef GC_MALLOC_CHECK
3747 _free_internal (y);
3748 #else
3749 xfree (y);
3750 #endif
3754 /* Re-establish the red-black properties of the tree, after a
3755 deletion. */
3757 static void
3758 mem_delete_fixup (struct mem_node *x)
3760 while (x != mem_root && x->color == MEM_BLACK)
3762 if (x == x->parent->left)
3764 struct mem_node *w = x->parent->right;
3766 if (w->color == MEM_RED)
3768 w->color = MEM_BLACK;
3769 x->parent->color = MEM_RED;
3770 mem_rotate_left (x->parent);
3771 w = x->parent->right;
3774 if (w->left->color == MEM_BLACK && w->right->color == MEM_BLACK)
3776 w->color = MEM_RED;
3777 x = x->parent;
3779 else
3781 if (w->right->color == MEM_BLACK)
3783 w->left->color = MEM_BLACK;
3784 w->color = MEM_RED;
3785 mem_rotate_right (w);
3786 w = x->parent->right;
3788 w->color = x->parent->color;
3789 x->parent->color = MEM_BLACK;
3790 w->right->color = MEM_BLACK;
3791 mem_rotate_left (x->parent);
3792 x = mem_root;
3795 else
3797 struct mem_node *w = x->parent->left;
3799 if (w->color == MEM_RED)
3801 w->color = MEM_BLACK;
3802 x->parent->color = MEM_RED;
3803 mem_rotate_right (x->parent);
3804 w = x->parent->left;
3807 if (w->right->color == MEM_BLACK && w->left->color == MEM_BLACK)
3809 w->color = MEM_RED;
3810 x = x->parent;
3812 else
3814 if (w->left->color == MEM_BLACK)
3816 w->right->color = MEM_BLACK;
3817 w->color = MEM_RED;
3818 mem_rotate_left (w);
3819 w = x->parent->left;
3822 w->color = x->parent->color;
3823 x->parent->color = MEM_BLACK;
3824 w->left->color = MEM_BLACK;
3825 mem_rotate_right (x->parent);
3826 x = mem_root;
3831 x->color = MEM_BLACK;
3835 /* Value is non-zero if P is a pointer to a live Lisp string on
3836 the heap. M is a pointer to the mem_block for P. */
3838 static INLINE int
3839 live_string_p (struct mem_node *m, void *p)
3841 if (m->type == MEM_TYPE_STRING)
3843 struct string_block *b = (struct string_block *) m->start;
3844 int offset = (char *) p - (char *) &b->strings[0];
3846 /* P must point to the start of a Lisp_String structure, and it
3847 must not be on the free-list. */
3848 return (offset >= 0
3849 && offset % sizeof b->strings[0] == 0
3850 && offset < (STRING_BLOCK_SIZE * sizeof b->strings[0])
3851 && ((struct Lisp_String *) p)->data != NULL);
3853 else
3854 return 0;
3858 /* Value is non-zero if P is a pointer to a live Lisp cons on
3859 the heap. M is a pointer to the mem_block for P. */
3861 static INLINE int
3862 live_cons_p (struct mem_node *m, void *p)
3864 if (m->type == MEM_TYPE_CONS)
3866 struct cons_block *b = (struct cons_block *) m->start;
3867 int offset = (char *) p - (char *) &b->conses[0];
3869 /* P must point to the start of a Lisp_Cons, not be
3870 one of the unused cells in the current cons block,
3871 and not be on the free-list. */
3872 return (offset >= 0
3873 && offset % sizeof b->conses[0] == 0
3874 && offset < (CONS_BLOCK_SIZE * sizeof b->conses[0])
3875 && (b != cons_block
3876 || offset / sizeof b->conses[0] < cons_block_index)
3877 && !EQ (((struct Lisp_Cons *) p)->car, Vdead));
3879 else
3880 return 0;
3884 /* Value is non-zero if P is a pointer to a live Lisp symbol on
3885 the heap. M is a pointer to the mem_block for P. */
3887 static INLINE int
3888 live_symbol_p (struct mem_node *m, void *p)
3890 if (m->type == MEM_TYPE_SYMBOL)
3892 struct symbol_block *b = (struct symbol_block *) m->start;
3893 int offset = (char *) p - (char *) &b->symbols[0];
3895 /* P must point to the start of a Lisp_Symbol, not be
3896 one of the unused cells in the current symbol block,
3897 and not be on the free-list. */
3898 return (offset >= 0
3899 && offset % sizeof b->symbols[0] == 0
3900 && offset < (SYMBOL_BLOCK_SIZE * sizeof b->symbols[0])
3901 && (b != symbol_block
3902 || offset / sizeof b->symbols[0] < symbol_block_index)
3903 && !EQ (((struct Lisp_Symbol *) p)->function, Vdead));
3905 else
3906 return 0;
3910 /* Value is non-zero if P is a pointer to a live Lisp float on
3911 the heap. M is a pointer to the mem_block for P. */
3913 static INLINE int
3914 live_float_p (struct mem_node *m, void *p)
3916 if (m->type == MEM_TYPE_FLOAT)
3918 struct float_block *b = (struct float_block *) m->start;
3919 int offset = (char *) p - (char *) &b->floats[0];
3921 /* P must point to the start of a Lisp_Float and not be
3922 one of the unused cells in the current float block. */
3923 return (offset >= 0
3924 && offset % sizeof b->floats[0] == 0
3925 && offset < (FLOAT_BLOCK_SIZE * sizeof b->floats[0])
3926 && (b != float_block
3927 || offset / sizeof b->floats[0] < float_block_index));
3929 else
3930 return 0;
3934 /* Value is non-zero if P is a pointer to a live Lisp Misc on
3935 the heap. M is a pointer to the mem_block for P. */
3937 static INLINE int
3938 live_misc_p (struct mem_node *m, void *p)
3940 if (m->type == MEM_TYPE_MISC)
3942 struct marker_block *b = (struct marker_block *) m->start;
3943 int offset = (char *) p - (char *) &b->markers[0];
3945 /* P must point to the start of a Lisp_Misc, not be
3946 one of the unused cells in the current misc block,
3947 and not be on the free-list. */
3948 return (offset >= 0
3949 && offset % sizeof b->markers[0] == 0
3950 && offset < (MARKER_BLOCK_SIZE * sizeof b->markers[0])
3951 && (b != marker_block
3952 || offset / sizeof b->markers[0] < marker_block_index)
3953 && ((union Lisp_Misc *) p)->u_any.type != Lisp_Misc_Free);
3955 else
3956 return 0;
3960 /* Value is non-zero if P is a pointer to a live vector-like object.
3961 M is a pointer to the mem_block for P. */
3963 static INLINE int
3964 live_vector_p (struct mem_node *m, void *p)
3966 return (p == m->start && m->type == MEM_TYPE_VECTORLIKE);
3970 /* Value is non-zero if P is a pointer to a live buffer. M is a
3971 pointer to the mem_block for P. */
3973 static INLINE int
3974 live_buffer_p (struct mem_node *m, void *p)
3976 /* P must point to the start of the block, and the buffer
3977 must not have been killed. */
3978 return (m->type == MEM_TYPE_BUFFER
3979 && p == m->start
3980 && !NILP (((struct buffer *) p)->name));
3983 #endif /* GC_MARK_STACK || defined GC_MALLOC_CHECK */
3985 #if GC_MARK_STACK
3987 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
3989 /* Array of objects that are kept alive because the C stack contains
3990 a pattern that looks like a reference to them . */
3992 #define MAX_ZOMBIES 10
3993 static Lisp_Object zombies[MAX_ZOMBIES];
3995 /* Number of zombie objects. */
3997 static int nzombies;
3999 /* Number of garbage collections. */
4001 static int ngcs;
4003 /* Average percentage of zombies per collection. */
4005 static double avg_zombies;
4007 /* Max. number of live and zombie objects. */
4009 static int max_live, max_zombies;
4011 /* Average number of live objects per GC. */
4013 static double avg_live;
4015 DEFUN ("gc-status", Fgc_status, Sgc_status, 0, 0, "",
4016 doc: /* Show information about live and zombie objects. */)
4017 (void)
4019 Lisp_Object args[8], zombie_list = Qnil;
4020 int i;
4021 for (i = 0; i < nzombies; i++)
4022 zombie_list = Fcons (zombies[i], zombie_list);
4023 args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d\nzombies: %S");
4024 args[1] = make_number (ngcs);
4025 args[2] = make_float (avg_live);
4026 args[3] = make_float (avg_zombies);
4027 args[4] = make_float (avg_zombies / avg_live / 100);
4028 args[5] = make_number (max_live);
4029 args[6] = make_number (max_zombies);
4030 args[7] = zombie_list;
4031 return Fmessage (8, args);
4034 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
4037 /* Mark OBJ if we can prove it's a Lisp_Object. */
4039 static INLINE void
4040 mark_maybe_object (Lisp_Object obj)
4042 void *po = (void *) XPNTR (obj);
4043 struct mem_node *m = mem_find (po);
4045 if (m != MEM_NIL)
4047 int mark_p = 0;
4049 switch (XTYPE (obj))
4051 case Lisp_String:
4052 mark_p = (live_string_p (m, po)
4053 && !STRING_MARKED_P ((struct Lisp_String *) po));
4054 break;
4056 case Lisp_Cons:
4057 mark_p = (live_cons_p (m, po) && !CONS_MARKED_P (XCONS (obj)));
4058 break;
4060 case Lisp_Symbol:
4061 mark_p = (live_symbol_p (m, po) && !XSYMBOL (obj)->gcmarkbit);
4062 break;
4064 case Lisp_Float:
4065 mark_p = (live_float_p (m, po) && !FLOAT_MARKED_P (XFLOAT (obj)));
4066 break;
4068 case Lisp_Vectorlike:
4069 /* Note: can't check BUFFERP before we know it's a
4070 buffer because checking that dereferences the pointer
4071 PO which might point anywhere. */
4072 if (live_vector_p (m, po))
4073 mark_p = !SUBRP (obj) && !VECTOR_MARKED_P (XVECTOR (obj));
4074 else if (live_buffer_p (m, po))
4075 mark_p = BUFFERP (obj) && !VECTOR_MARKED_P (XBUFFER (obj));
4076 break;
4078 case Lisp_Misc:
4079 mark_p = (live_misc_p (m, po) && !XMISCANY (obj)->gcmarkbit);
4080 break;
4082 default:
4083 break;
4086 if (mark_p)
4088 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4089 if (nzombies < MAX_ZOMBIES)
4090 zombies[nzombies] = obj;
4091 ++nzombies;
4092 #endif
4093 mark_object (obj);
4099 /* If P points to Lisp data, mark that as live if it isn't already
4100 marked. */
4102 static INLINE void
4103 mark_maybe_pointer (void *p)
4105 struct mem_node *m;
4107 /* Quickly rule out some values which can't point to Lisp data. */
4108 if ((EMACS_INT) p %
4109 #ifdef USE_LSB_TAG
4110 8 /* USE_LSB_TAG needs Lisp data to be aligned on multiples of 8. */
4111 #else
4112 2 /* We assume that Lisp data is aligned on even addresses. */
4113 #endif
4115 return;
4117 m = mem_find (p);
4118 if (m != MEM_NIL)
4120 Lisp_Object obj = Qnil;
4122 switch (m->type)
4124 case MEM_TYPE_NON_LISP:
4125 /* Nothing to do; not a pointer to Lisp memory. */
4126 break;
4128 case MEM_TYPE_BUFFER:
4129 if (live_buffer_p (m, p) && !VECTOR_MARKED_P((struct buffer *)p))
4130 XSETVECTOR (obj, p);
4131 break;
4133 case MEM_TYPE_CONS:
4134 if (live_cons_p (m, p) && !CONS_MARKED_P ((struct Lisp_Cons *) p))
4135 XSETCONS (obj, p);
4136 break;
4138 case MEM_TYPE_STRING:
4139 if (live_string_p (m, p)
4140 && !STRING_MARKED_P ((struct Lisp_String *) p))
4141 XSETSTRING (obj, p);
4142 break;
4144 case MEM_TYPE_MISC:
4145 if (live_misc_p (m, p) && !((struct Lisp_Free *) p)->gcmarkbit)
4146 XSETMISC (obj, p);
4147 break;
4149 case MEM_TYPE_SYMBOL:
4150 if (live_symbol_p (m, p) && !((struct Lisp_Symbol *) p)->gcmarkbit)
4151 XSETSYMBOL (obj, p);
4152 break;
4154 case MEM_TYPE_FLOAT:
4155 if (live_float_p (m, p) && !FLOAT_MARKED_P (p))
4156 XSETFLOAT (obj, p);
4157 break;
4159 case MEM_TYPE_VECTORLIKE:
4160 if (live_vector_p (m, p))
4162 Lisp_Object tem;
4163 XSETVECTOR (tem, p);
4164 if (!SUBRP (tem) && !VECTOR_MARKED_P (XVECTOR (tem)))
4165 obj = tem;
4167 break;
4169 default:
4170 abort ();
4173 if (!NILP (obj))
4174 mark_object (obj);
4179 /* Mark Lisp objects referenced from the address range START+OFFSET..END
4180 or END+OFFSET..START. */
4182 static void
4183 mark_memory (void *start, void *end, int offset)
4185 Lisp_Object *p;
4186 void **pp;
4188 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4189 nzombies = 0;
4190 #endif
4192 /* Make START the pointer to the start of the memory region,
4193 if it isn't already. */
4194 if (end < start)
4196 void *tem = start;
4197 start = end;
4198 end = tem;
4201 /* Mark Lisp_Objects. */
4202 for (p = (Lisp_Object *) ((char *) start + offset); (void *) p < end; ++p)
4203 mark_maybe_object (*p);
4205 /* Mark Lisp data pointed to. This is necessary because, in some
4206 situations, the C compiler optimizes Lisp objects away, so that
4207 only a pointer to them remains. Example:
4209 DEFUN ("testme", Ftestme, Stestme, 0, 0, 0, "")
4212 Lisp_Object obj = build_string ("test");
4213 struct Lisp_String *s = XSTRING (obj);
4214 Fgarbage_collect ();
4215 fprintf (stderr, "test `%s'\n", s->data);
4216 return Qnil;
4219 Here, `obj' isn't really used, and the compiler optimizes it
4220 away. The only reference to the life string is through the
4221 pointer `s'. */
4223 for (pp = (void **) ((char *) start + offset); (void *) pp < end; ++pp)
4224 mark_maybe_pointer (*pp);
4227 /* setjmp will work with GCC unless NON_SAVING_SETJMP is defined in
4228 the GCC system configuration. In gcc 3.2, the only systems for
4229 which this is so are i386-sco5 non-ELF, i386-sysv3 (maybe included
4230 by others?) and ns32k-pc532-min. */
4232 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
4234 static int setjmp_tested_p, longjmps_done;
4236 #define SETJMP_WILL_LIKELY_WORK "\
4238 Emacs garbage collector has been changed to use conservative stack\n\
4239 marking. Emacs has determined that the method it uses to do the\n\
4240 marking will likely work on your system, but this isn't sure.\n\
4242 If you are a system-programmer, or can get the help of a local wizard\n\
4243 who is, please take a look at the function mark_stack in alloc.c, and\n\
4244 verify that the methods used are appropriate for your system.\n\
4246 Please mail the result to <emacs-devel@gnu.org>.\n\
4249 #define SETJMP_WILL_NOT_WORK "\
4251 Emacs garbage collector has been changed to use conservative stack\n\
4252 marking. Emacs has determined that the default method it uses to do the\n\
4253 marking will not work on your system. We will need a system-dependent\n\
4254 solution for your system.\n\
4256 Please take a look at the function mark_stack in alloc.c, and\n\
4257 try to find a way to make it work on your system.\n\
4259 Note that you may get false negatives, depending on the compiler.\n\
4260 In particular, you need to use -O with GCC for this test.\n\
4262 Please mail the result to <emacs-devel@gnu.org>.\n\
4266 /* Perform a quick check if it looks like setjmp saves registers in a
4267 jmp_buf. Print a message to stderr saying so. When this test
4268 succeeds, this is _not_ a proof that setjmp is sufficient for
4269 conservative stack marking. Only the sources or a disassembly
4270 can prove that. */
4272 static void
4273 test_setjmp ()
4275 char buf[10];
4276 register int x;
4277 jmp_buf jbuf;
4278 int result = 0;
4280 /* Arrange for X to be put in a register. */
4281 sprintf (buf, "1");
4282 x = strlen (buf);
4283 x = 2 * x - 1;
4285 setjmp (jbuf);
4286 if (longjmps_done == 1)
4288 /* Came here after the longjmp at the end of the function.
4290 If x == 1, the longjmp has restored the register to its
4291 value before the setjmp, and we can hope that setjmp
4292 saves all such registers in the jmp_buf, although that
4293 isn't sure.
4295 For other values of X, either something really strange is
4296 taking place, or the setjmp just didn't save the register. */
4298 if (x == 1)
4299 fprintf (stderr, SETJMP_WILL_LIKELY_WORK);
4300 else
4302 fprintf (stderr, SETJMP_WILL_NOT_WORK);
4303 exit (1);
4307 ++longjmps_done;
4308 x = 2;
4309 if (longjmps_done == 1)
4310 longjmp (jbuf, 1);
4313 #endif /* not GC_SAVE_REGISTERS_ON_STACK && not GC_SETJMP_WORKS */
4316 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
4318 /* Abort if anything GCPRO'd doesn't survive the GC. */
4320 static void
4321 check_gcpros ()
4323 struct gcpro *p;
4324 int i;
4326 for (p = gcprolist; p; p = p->next)
4327 for (i = 0; i < p->nvars; ++i)
4328 if (!survives_gc_p (p->var[i]))
4329 /* FIXME: It's not necessarily a bug. It might just be that the
4330 GCPRO is unnecessary or should release the object sooner. */
4331 abort ();
4334 #elif GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4336 static void
4337 dump_zombies ()
4339 int i;
4341 fprintf (stderr, "\nZombies kept alive = %d:\n", nzombies);
4342 for (i = 0; i < min (MAX_ZOMBIES, nzombies); ++i)
4344 fprintf (stderr, " %d = ", i);
4345 debug_print (zombies[i]);
4349 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
4352 /* Mark live Lisp objects on the C stack.
4354 There are several system-dependent problems to consider when
4355 porting this to new architectures:
4357 Processor Registers
4359 We have to mark Lisp objects in CPU registers that can hold local
4360 variables or are used to pass parameters.
4362 If GC_SAVE_REGISTERS_ON_STACK is defined, it should expand to
4363 something that either saves relevant registers on the stack, or
4364 calls mark_maybe_object passing it each register's contents.
4366 If GC_SAVE_REGISTERS_ON_STACK is not defined, the current
4367 implementation assumes that calling setjmp saves registers we need
4368 to see in a jmp_buf which itself lies on the stack. This doesn't
4369 have to be true! It must be verified for each system, possibly
4370 by taking a look at the source code of setjmp.
4372 Stack Layout
4374 Architectures differ in the way their processor stack is organized.
4375 For example, the stack might look like this
4377 +----------------+
4378 | Lisp_Object | size = 4
4379 +----------------+
4380 | something else | size = 2
4381 +----------------+
4382 | Lisp_Object | size = 4
4383 +----------------+
4384 | ... |
4386 In such a case, not every Lisp_Object will be aligned equally. To
4387 find all Lisp_Object on the stack it won't be sufficient to walk
4388 the stack in steps of 4 bytes. Instead, two passes will be
4389 necessary, one starting at the start of the stack, and a second
4390 pass starting at the start of the stack + 2. Likewise, if the
4391 minimal alignment of Lisp_Objects on the stack is 1, four passes
4392 would be necessary, each one starting with one byte more offset
4393 from the stack start.
4395 The current code assumes by default that Lisp_Objects are aligned
4396 equally on the stack. */
4398 static void
4399 mark_stack (void)
4401 int i;
4402 /* jmp_buf may not be aligned enough on darwin-ppc64 */
4403 union aligned_jmpbuf {
4404 Lisp_Object o;
4405 jmp_buf j;
4406 } j;
4407 volatile int stack_grows_down_p = (char *) &j > (char *) stack_base;
4408 void *end;
4410 /* This trick flushes the register windows so that all the state of
4411 the process is contained in the stack. */
4412 /* Fixme: Code in the Boehm GC suggests flushing (with `flushrs') is
4413 needed on ia64 too. See mach_dep.c, where it also says inline
4414 assembler doesn't work with relevant proprietary compilers. */
4415 #ifdef __sparc__
4416 #if defined (__sparc64__) && defined (__FreeBSD__)
4417 /* FreeBSD does not have a ta 3 handler. */
4418 asm ("flushw");
4419 #else
4420 asm ("ta 3");
4421 #endif
4422 #endif
4424 /* Save registers that we need to see on the stack. We need to see
4425 registers used to hold register variables and registers used to
4426 pass parameters. */
4427 #ifdef GC_SAVE_REGISTERS_ON_STACK
4428 GC_SAVE_REGISTERS_ON_STACK (end);
4429 #else /* not GC_SAVE_REGISTERS_ON_STACK */
4431 #ifndef GC_SETJMP_WORKS /* If it hasn't been checked yet that
4432 setjmp will definitely work, test it
4433 and print a message with the result
4434 of the test. */
4435 if (!setjmp_tested_p)
4437 setjmp_tested_p = 1;
4438 test_setjmp ();
4440 #endif /* GC_SETJMP_WORKS */
4442 setjmp (j.j);
4443 end = stack_grows_down_p ? (char *) &j + sizeof j : (char *) &j;
4444 #endif /* not GC_SAVE_REGISTERS_ON_STACK */
4446 /* This assumes that the stack is a contiguous region in memory. If
4447 that's not the case, something has to be done here to iterate
4448 over the stack segments. */
4449 #ifndef GC_LISP_OBJECT_ALIGNMENT
4450 #ifdef __GNUC__
4451 #define GC_LISP_OBJECT_ALIGNMENT __alignof__ (Lisp_Object)
4452 #else
4453 #define GC_LISP_OBJECT_ALIGNMENT sizeof (Lisp_Object)
4454 #endif
4455 #endif
4456 for (i = 0; i < sizeof (Lisp_Object); i += GC_LISP_OBJECT_ALIGNMENT)
4457 mark_memory (stack_base, end, i);
4458 /* Allow for marking a secondary stack, like the register stack on the
4459 ia64. */
4460 #ifdef GC_MARK_SECONDARY_STACK
4461 GC_MARK_SECONDARY_STACK ();
4462 #endif
4464 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
4465 check_gcpros ();
4466 #endif
4469 #endif /* GC_MARK_STACK != 0 */
4472 /* Determine whether it is safe to access memory at address P. */
4473 static int
4474 valid_pointer_p (void *p)
4476 #ifdef WINDOWSNT
4477 return w32_valid_pointer_p (p, 16);
4478 #else
4479 int fd;
4481 /* Obviously, we cannot just access it (we would SEGV trying), so we
4482 trick the o/s to tell us whether p is a valid pointer.
4483 Unfortunately, we cannot use NULL_DEVICE here, as emacs_write may
4484 not validate p in that case. */
4486 if ((fd = emacs_open ("__Valid__Lisp__Object__", O_CREAT | O_WRONLY | O_TRUNC, 0666)) >= 0)
4488 int valid = (emacs_write (fd, (char *)p, 16) == 16);
4489 emacs_close (fd);
4490 unlink ("__Valid__Lisp__Object__");
4491 return valid;
4494 return -1;
4495 #endif
4498 /* Return 1 if OBJ is a valid lisp object.
4499 Return 0 if OBJ is NOT a valid lisp object.
4500 Return -1 if we cannot validate OBJ.
4501 This function can be quite slow,
4502 so it should only be used in code for manual debugging. */
4505 valid_lisp_object_p (Lisp_Object obj)
4507 void *p;
4508 #if GC_MARK_STACK
4509 struct mem_node *m;
4510 #endif
4512 if (INTEGERP (obj))
4513 return 1;
4515 p = (void *) XPNTR (obj);
4516 if (PURE_POINTER_P (p))
4517 return 1;
4519 #if !GC_MARK_STACK
4520 return valid_pointer_p (p);
4521 #else
4523 m = mem_find (p);
4525 if (m == MEM_NIL)
4527 int valid = valid_pointer_p (p);
4528 if (valid <= 0)
4529 return valid;
4531 if (SUBRP (obj))
4532 return 1;
4534 return 0;
4537 switch (m->type)
4539 case MEM_TYPE_NON_LISP:
4540 return 0;
4542 case MEM_TYPE_BUFFER:
4543 return live_buffer_p (m, p);
4545 case MEM_TYPE_CONS:
4546 return live_cons_p (m, p);
4548 case MEM_TYPE_STRING:
4549 return live_string_p (m, p);
4551 case MEM_TYPE_MISC:
4552 return live_misc_p (m, p);
4554 case MEM_TYPE_SYMBOL:
4555 return live_symbol_p (m, p);
4557 case MEM_TYPE_FLOAT:
4558 return live_float_p (m, p);
4560 case MEM_TYPE_VECTORLIKE:
4561 return live_vector_p (m, p);
4563 default:
4564 break;
4567 return 0;
4568 #endif
4574 /***********************************************************************
4575 Pure Storage Management
4576 ***********************************************************************/
4578 /* Allocate room for SIZE bytes from pure Lisp storage and return a
4579 pointer to it. TYPE is the Lisp type for which the memory is
4580 allocated. TYPE < 0 means it's not used for a Lisp object. */
4582 static POINTER_TYPE *
4583 pure_alloc (size_t size, int type)
4585 POINTER_TYPE *result;
4586 #ifdef USE_LSB_TAG
4587 size_t alignment = (1 << GCTYPEBITS);
4588 #else
4589 size_t alignment = sizeof (EMACS_INT);
4591 /* Give Lisp_Floats an extra alignment. */
4592 if (type == Lisp_Float)
4594 #if defined __GNUC__ && __GNUC__ >= 2
4595 alignment = __alignof (struct Lisp_Float);
4596 #else
4597 alignment = sizeof (struct Lisp_Float);
4598 #endif
4600 #endif
4602 again:
4603 if (type >= 0)
4605 /* Allocate space for a Lisp object from the beginning of the free
4606 space with taking account of alignment. */
4607 result = ALIGN (purebeg + pure_bytes_used_lisp, alignment);
4608 pure_bytes_used_lisp = ((char *)result - (char *)purebeg) + size;
4610 else
4612 /* Allocate space for a non-Lisp object from the end of the free
4613 space. */
4614 pure_bytes_used_non_lisp += size;
4615 result = purebeg + pure_size - pure_bytes_used_non_lisp;
4617 pure_bytes_used = pure_bytes_used_lisp + pure_bytes_used_non_lisp;
4619 if (pure_bytes_used <= pure_size)
4620 return result;
4622 /* Don't allocate a large amount here,
4623 because it might get mmap'd and then its address
4624 might not be usable. */
4625 purebeg = (char *) xmalloc (10000);
4626 pure_size = 10000;
4627 pure_bytes_used_before_overflow += pure_bytes_used - size;
4628 pure_bytes_used = 0;
4629 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
4630 goto again;
4634 /* Print a warning if PURESIZE is too small. */
4636 void
4637 check_pure_size (void)
4639 if (pure_bytes_used_before_overflow)
4640 message ("emacs:0:Pure Lisp storage overflow (approx. %d bytes needed)",
4641 (int) (pure_bytes_used + pure_bytes_used_before_overflow));
4645 /* Find the byte sequence {DATA[0], ..., DATA[NBYTES-1], '\0'} from
4646 the non-Lisp data pool of the pure storage, and return its start
4647 address. Return NULL if not found. */
4649 static char *
4650 find_string_data_in_pure (const char *data, int nbytes)
4652 int i, skip, bm_skip[256], last_char_skip, infinity, start, start_max;
4653 const unsigned char *p;
4654 char *non_lisp_beg;
4656 if (pure_bytes_used_non_lisp < nbytes + 1)
4657 return NULL;
4659 /* Set up the Boyer-Moore table. */
4660 skip = nbytes + 1;
4661 for (i = 0; i < 256; i++)
4662 bm_skip[i] = skip;
4664 p = (const unsigned char *) data;
4665 while (--skip > 0)
4666 bm_skip[*p++] = skip;
4668 last_char_skip = bm_skip['\0'];
4670 non_lisp_beg = purebeg + pure_size - pure_bytes_used_non_lisp;
4671 start_max = pure_bytes_used_non_lisp - (nbytes + 1);
4673 /* See the comments in the function `boyer_moore' (search.c) for the
4674 use of `infinity'. */
4675 infinity = pure_bytes_used_non_lisp + 1;
4676 bm_skip['\0'] = infinity;
4678 p = (const unsigned char *) non_lisp_beg + nbytes;
4679 start = 0;
4682 /* Check the last character (== '\0'). */
4685 start += bm_skip[*(p + start)];
4687 while (start <= start_max);
4689 if (start < infinity)
4690 /* Couldn't find the last character. */
4691 return NULL;
4693 /* No less than `infinity' means we could find the last
4694 character at `p[start - infinity]'. */
4695 start -= infinity;
4697 /* Check the remaining characters. */
4698 if (memcmp (data, non_lisp_beg + start, nbytes) == 0)
4699 /* Found. */
4700 return non_lisp_beg + start;
4702 start += last_char_skip;
4704 while (start <= start_max);
4706 return NULL;
4710 /* Return a string allocated in pure space. DATA is a buffer holding
4711 NCHARS characters, and NBYTES bytes of string data. MULTIBYTE
4712 non-zero means make the result string multibyte.
4714 Must get an error if pure storage is full, since if it cannot hold
4715 a large string it may be able to hold conses that point to that
4716 string; then the string is not protected from gc. */
4718 Lisp_Object
4719 make_pure_string (const char *data, int nchars, int nbytes, int multibyte)
4721 Lisp_Object string;
4722 struct Lisp_String *s;
4724 s = (struct Lisp_String *) pure_alloc (sizeof *s, Lisp_String);
4725 s->data = find_string_data_in_pure (data, nbytes);
4726 if (s->data == NULL)
4728 s->data = (unsigned char *) pure_alloc (nbytes + 1, -1);
4729 memcpy (s->data, data, nbytes);
4730 s->data[nbytes] = '\0';
4732 s->size = nchars;
4733 s->size_byte = multibyte ? nbytes : -1;
4734 s->intervals = NULL_INTERVAL;
4735 XSETSTRING (string, s);
4736 return string;
4739 /* Return a string a string allocated in pure space. Do not allocate
4740 the string data, just point to DATA. */
4742 Lisp_Object
4743 make_pure_c_string (const char *data)
4745 Lisp_Object string;
4746 struct Lisp_String *s;
4747 int nchars = strlen (data);
4749 s = (struct Lisp_String *) pure_alloc (sizeof *s, Lisp_String);
4750 s->size = nchars;
4751 s->size_byte = -1;
4752 s->data = (unsigned char *) data;
4753 s->intervals = NULL_INTERVAL;
4754 XSETSTRING (string, s);
4755 return string;
4758 /* Return a cons allocated from pure space. Give it pure copies
4759 of CAR as car and CDR as cdr. */
4761 Lisp_Object
4762 pure_cons (Lisp_Object car, Lisp_Object cdr)
4764 register Lisp_Object new;
4765 struct Lisp_Cons *p;
4767 p = (struct Lisp_Cons *) pure_alloc (sizeof *p, Lisp_Cons);
4768 XSETCONS (new, p);
4769 XSETCAR (new, Fpurecopy (car));
4770 XSETCDR (new, Fpurecopy (cdr));
4771 return new;
4775 /* Value is a float object with value NUM allocated from pure space. */
4777 static Lisp_Object
4778 make_pure_float (double num)
4780 register Lisp_Object new;
4781 struct Lisp_Float *p;
4783 p = (struct Lisp_Float *) pure_alloc (sizeof *p, Lisp_Float);
4784 XSETFLOAT (new, p);
4785 XFLOAT_INIT (new, num);
4786 return new;
4790 /* Return a vector with room for LEN Lisp_Objects allocated from
4791 pure space. */
4793 Lisp_Object
4794 make_pure_vector (EMACS_INT len)
4796 Lisp_Object new;
4797 struct Lisp_Vector *p;
4798 size_t size = sizeof *p + (len - 1) * sizeof (Lisp_Object);
4800 p = (struct Lisp_Vector *) pure_alloc (size, Lisp_Vectorlike);
4801 XSETVECTOR (new, p);
4802 XVECTOR (new)->size = len;
4803 return new;
4807 DEFUN ("purecopy", Fpurecopy, Spurecopy, 1, 1, 0,
4808 doc: /* Make a copy of object OBJ in pure storage.
4809 Recursively copies contents of vectors and cons cells.
4810 Does not copy symbols. Copies strings without text properties. */)
4811 (register Lisp_Object obj)
4813 if (NILP (Vpurify_flag))
4814 return obj;
4816 if (PURE_POINTER_P (XPNTR (obj)))
4817 return obj;
4819 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
4821 Lisp_Object tmp = Fgethash (obj, Vpurify_flag, Qnil);
4822 if (!NILP (tmp))
4823 return tmp;
4826 if (CONSP (obj))
4827 obj = pure_cons (XCAR (obj), XCDR (obj));
4828 else if (FLOATP (obj))
4829 obj = make_pure_float (XFLOAT_DATA (obj));
4830 else if (STRINGP (obj))
4831 obj = make_pure_string (SDATA (obj), SCHARS (obj),
4832 SBYTES (obj),
4833 STRING_MULTIBYTE (obj));
4834 else if (FUNVECP (obj) || VECTORP (obj))
4836 register struct Lisp_Vector *vec;
4837 register int i;
4838 EMACS_INT size;
4840 size = XVECTOR (obj)->size;
4841 if (size & PSEUDOVECTOR_FLAG)
4842 size &= PSEUDOVECTOR_SIZE_MASK;
4843 vec = XVECTOR (make_pure_vector (size));
4844 for (i = 0; i < size; i++)
4845 vec->contents[i] = Fpurecopy (XVECTOR (obj)->contents[i]);
4846 if (FUNVECP (obj))
4848 XSETPVECTYPE (vec, PVEC_FUNVEC);
4849 XSETFUNVEC (obj, vec);
4851 else
4852 XSETVECTOR (obj, vec);
4854 else if (MARKERP (obj))
4855 error ("Attempt to copy a marker to pure storage");
4856 else
4857 /* Not purified, don't hash-cons. */
4858 return obj;
4860 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
4861 Fputhash (obj, obj, Vpurify_flag);
4863 return obj;
4868 /***********************************************************************
4869 Protection from GC
4870 ***********************************************************************/
4872 /* Put an entry in staticvec, pointing at the variable with address
4873 VARADDRESS. */
4875 void
4876 staticpro (Lisp_Object *varaddress)
4878 staticvec[staticidx++] = varaddress;
4879 if (staticidx >= NSTATICS)
4880 abort ();
4884 /***********************************************************************
4885 Protection from GC
4886 ***********************************************************************/
4888 /* Temporarily prevent garbage collection. */
4891 inhibit_garbage_collection (void)
4893 int count = SPECPDL_INDEX ();
4894 int nbits = min (VALBITS, BITS_PER_INT);
4896 specbind (Qgc_cons_threshold, make_number (((EMACS_INT) 1 << (nbits - 1)) - 1));
4897 return count;
4901 DEFUN ("garbage-collect", Fgarbage_collect, Sgarbage_collect, 0, 0, "",
4902 doc: /* Reclaim storage for Lisp objects no longer needed.
4903 Garbage collection happens automatically if you cons more than
4904 `gc-cons-threshold' bytes of Lisp data since previous garbage collection.
4905 `garbage-collect' normally returns a list with info on amount of space in use:
4906 ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
4907 (USED-MARKERS . FREE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
4908 (USED-FLOATS . FREE-FLOATS) (USED-INTERVALS . FREE-INTERVALS)
4909 (USED-STRINGS . FREE-STRINGS))
4910 However, if there was overflow in pure space, `garbage-collect'
4911 returns nil, because real GC can't be done. */)
4912 (void)
4914 register struct specbinding *bind;
4915 struct catchtag *catch;
4916 struct handler *handler;
4917 char stack_top_variable;
4918 register int i;
4919 int message_p;
4920 Lisp_Object total[8];
4921 int count = SPECPDL_INDEX ();
4922 EMACS_TIME t1, t2, t3;
4924 if (abort_on_gc)
4925 abort ();
4927 /* Can't GC if pure storage overflowed because we can't determine
4928 if something is a pure object or not. */
4929 if (pure_bytes_used_before_overflow)
4930 return Qnil;
4932 CHECK_CONS_LIST ();
4934 /* Don't keep undo information around forever.
4935 Do this early on, so it is no problem if the user quits. */
4937 register struct buffer *nextb = all_buffers;
4939 while (nextb)
4941 /* If a buffer's undo list is Qt, that means that undo is
4942 turned off in that buffer. Calling truncate_undo_list on
4943 Qt tends to return NULL, which effectively turns undo back on.
4944 So don't call truncate_undo_list if undo_list is Qt. */
4945 if (! NILP (nextb->name) && ! EQ (nextb->undo_list, Qt))
4946 truncate_undo_list (nextb);
4948 /* Shrink buffer gaps, but skip indirect and dead buffers. */
4949 if (nextb->base_buffer == 0 && !NILP (nextb->name)
4950 && ! nextb->text->inhibit_shrinking)
4952 /* If a buffer's gap size is more than 10% of the buffer
4953 size, or larger than 2000 bytes, then shrink it
4954 accordingly. Keep a minimum size of 20 bytes. */
4955 int size = min (2000, max (20, (nextb->text->z_byte / 10)));
4957 if (nextb->text->gap_size > size)
4959 struct buffer *save_current = current_buffer;
4960 current_buffer = nextb;
4961 make_gap (-(nextb->text->gap_size - size));
4962 current_buffer = save_current;
4966 nextb = nextb->next;
4970 EMACS_GET_TIME (t1);
4972 /* In case user calls debug_print during GC,
4973 don't let that cause a recursive GC. */
4974 consing_since_gc = 0;
4976 /* Save what's currently displayed in the echo area. */
4977 message_p = push_message ();
4978 record_unwind_protect (pop_message_unwind, Qnil);
4980 /* Save a copy of the contents of the stack, for debugging. */
4981 #if MAX_SAVE_STACK > 0
4982 if (NILP (Vpurify_flag))
4984 i = &stack_top_variable - stack_bottom;
4985 if (i < 0) i = -i;
4986 if (i < MAX_SAVE_STACK)
4988 if (stack_copy == 0)
4989 stack_copy = (char *) xmalloc (stack_copy_size = i);
4990 else if (stack_copy_size < i)
4991 stack_copy = (char *) xrealloc (stack_copy, (stack_copy_size = i));
4992 if (stack_copy)
4994 if ((EMACS_INT) (&stack_top_variable - stack_bottom) > 0)
4995 memcpy (stack_copy, stack_bottom, i);
4996 else
4997 memcpy (stack_copy, &stack_top_variable, i);
5001 #endif /* MAX_SAVE_STACK > 0 */
5003 if (garbage_collection_messages)
5004 message1_nolog ("Garbage collecting...");
5006 BLOCK_INPUT;
5008 shrink_regexp_cache ();
5010 gc_in_progress = 1;
5012 /* clear_marks (); */
5014 /* Mark all the special slots that serve as the roots of accessibility. */
5016 for (i = 0; i < staticidx; i++)
5017 mark_object (*staticvec[i]);
5019 for (bind = specpdl; bind != specpdl_ptr; bind++)
5021 mark_object (bind->symbol);
5022 mark_object (bind->old_value);
5024 mark_terminals ();
5025 mark_kboards ();
5026 mark_ttys ();
5028 #ifdef USE_GTK
5030 extern void xg_mark_data (void);
5031 xg_mark_data ();
5033 #endif
5035 #if (GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS \
5036 || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
5037 mark_stack ();
5038 #else
5040 register struct gcpro *tail;
5041 for (tail = gcprolist; tail; tail = tail->next)
5042 for (i = 0; i < tail->nvars; i++)
5043 mark_object (tail->var[i]);
5045 #endif
5047 mark_byte_stack ();
5048 for (catch = catchlist; catch; catch = catch->next)
5050 mark_object (catch->tag);
5051 mark_object (catch->val);
5053 for (handler = handlerlist; handler; handler = handler->next)
5055 mark_object (handler->handler);
5056 mark_object (handler->var);
5058 mark_backtrace ();
5060 #ifdef HAVE_WINDOW_SYSTEM
5061 mark_fringe_data ();
5062 #endif
5064 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
5065 mark_stack ();
5066 #endif
5068 /* Everything is now marked, except for the things that require special
5069 finalization, i.e. the undo_list.
5070 Look thru every buffer's undo list
5071 for elements that update markers that were not marked,
5072 and delete them. */
5074 register struct buffer *nextb = all_buffers;
5076 while (nextb)
5078 /* If a buffer's undo list is Qt, that means that undo is
5079 turned off in that buffer. Calling truncate_undo_list on
5080 Qt tends to return NULL, which effectively turns undo back on.
5081 So don't call truncate_undo_list if undo_list is Qt. */
5082 if (! EQ (nextb->undo_list, Qt))
5084 Lisp_Object tail, prev;
5085 tail = nextb->undo_list;
5086 prev = Qnil;
5087 while (CONSP (tail))
5089 if (CONSP (XCAR (tail))
5090 && MARKERP (XCAR (XCAR (tail)))
5091 && !XMARKER (XCAR (XCAR (tail)))->gcmarkbit)
5093 if (NILP (prev))
5094 nextb->undo_list = tail = XCDR (tail);
5095 else
5097 tail = XCDR (tail);
5098 XSETCDR (prev, tail);
5101 else
5103 prev = tail;
5104 tail = XCDR (tail);
5108 /* Now that we have stripped the elements that need not be in the
5109 undo_list any more, we can finally mark the list. */
5110 mark_object (nextb->undo_list);
5112 nextb = nextb->next;
5116 gc_sweep ();
5118 /* Clear the mark bits that we set in certain root slots. */
5120 unmark_byte_stack ();
5121 VECTOR_UNMARK (&buffer_defaults);
5122 VECTOR_UNMARK (&buffer_local_symbols);
5124 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES && 0
5125 dump_zombies ();
5126 #endif
5128 UNBLOCK_INPUT;
5130 CHECK_CONS_LIST ();
5132 /* clear_marks (); */
5133 gc_in_progress = 0;
5135 consing_since_gc = 0;
5136 if (gc_cons_threshold < 10000)
5137 gc_cons_threshold = 10000;
5139 if (FLOATP (Vgc_cons_percentage))
5140 { /* Set gc_cons_combined_threshold. */
5141 EMACS_INT total = 0;
5143 total += total_conses * sizeof (struct Lisp_Cons);
5144 total += total_symbols * sizeof (struct Lisp_Symbol);
5145 total += total_markers * sizeof (union Lisp_Misc);
5146 total += total_string_size;
5147 total += total_vector_size * sizeof (Lisp_Object);
5148 total += total_floats * sizeof (struct Lisp_Float);
5149 total += total_intervals * sizeof (struct interval);
5150 total += total_strings * sizeof (struct Lisp_String);
5152 gc_relative_threshold = total * XFLOAT_DATA (Vgc_cons_percentage);
5154 else
5155 gc_relative_threshold = 0;
5157 if (garbage_collection_messages)
5159 if (message_p || minibuf_level > 0)
5160 restore_message ();
5161 else
5162 message1_nolog ("Garbage collecting...done");
5165 unbind_to (count, Qnil);
5167 total[0] = Fcons (make_number (total_conses),
5168 make_number (total_free_conses));
5169 total[1] = Fcons (make_number (total_symbols),
5170 make_number (total_free_symbols));
5171 total[2] = Fcons (make_number (total_markers),
5172 make_number (total_free_markers));
5173 total[3] = make_number (total_string_size);
5174 total[4] = make_number (total_vector_size);
5175 total[5] = Fcons (make_number (total_floats),
5176 make_number (total_free_floats));
5177 total[6] = Fcons (make_number (total_intervals),
5178 make_number (total_free_intervals));
5179 total[7] = Fcons (make_number (total_strings),
5180 make_number (total_free_strings));
5182 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
5184 /* Compute average percentage of zombies. */
5185 double nlive = 0;
5187 for (i = 0; i < 7; ++i)
5188 if (CONSP (total[i]))
5189 nlive += XFASTINT (XCAR (total[i]));
5191 avg_live = (avg_live * ngcs + nlive) / (ngcs + 1);
5192 max_live = max (nlive, max_live);
5193 avg_zombies = (avg_zombies * ngcs + nzombies) / (ngcs + 1);
5194 max_zombies = max (nzombies, max_zombies);
5195 ++ngcs;
5197 #endif
5199 if (!NILP (Vpost_gc_hook))
5201 int count = inhibit_garbage_collection ();
5202 safe_run_hooks (Qpost_gc_hook);
5203 unbind_to (count, Qnil);
5206 /* Accumulate statistics. */
5207 EMACS_GET_TIME (t2);
5208 EMACS_SUB_TIME (t3, t2, t1);
5209 if (FLOATP (Vgc_elapsed))
5210 Vgc_elapsed = make_float (XFLOAT_DATA (Vgc_elapsed) +
5211 EMACS_SECS (t3) +
5212 EMACS_USECS (t3) * 1.0e-6);
5213 gcs_done++;
5215 return Flist (sizeof total / sizeof *total, total);
5219 /* Mark Lisp objects in glyph matrix MATRIX. Currently the
5220 only interesting objects referenced from glyphs are strings. */
5222 static void
5223 mark_glyph_matrix (struct glyph_matrix *matrix)
5225 struct glyph_row *row = matrix->rows;
5226 struct glyph_row *end = row + matrix->nrows;
5228 for (; row < end; ++row)
5229 if (row->enabled_p)
5231 int area;
5232 for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
5234 struct glyph *glyph = row->glyphs[area];
5235 struct glyph *end_glyph = glyph + row->used[area];
5237 for (; glyph < end_glyph; ++glyph)
5238 if (STRINGP (glyph->object)
5239 && !STRING_MARKED_P (XSTRING (glyph->object)))
5240 mark_object (glyph->object);
5246 /* Mark Lisp faces in the face cache C. */
5248 static void
5249 mark_face_cache (struct face_cache *c)
5251 if (c)
5253 int i, j;
5254 for (i = 0; i < c->used; ++i)
5256 struct face *face = FACE_FROM_ID (c->f, i);
5258 if (face)
5260 for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
5261 mark_object (face->lface[j]);
5269 /* Mark reference to a Lisp_Object.
5270 If the object referred to has not been seen yet, recursively mark
5271 all the references contained in it. */
5273 #define LAST_MARKED_SIZE 500
5274 static Lisp_Object last_marked[LAST_MARKED_SIZE];
5275 int last_marked_index;
5277 /* For debugging--call abort when we cdr down this many
5278 links of a list, in mark_object. In debugging,
5279 the call to abort will hit a breakpoint.
5280 Normally this is zero and the check never goes off. */
5281 static int mark_object_loop_halt;
5283 static void
5284 mark_vectorlike (struct Lisp_Vector *ptr)
5286 register EMACS_INT size = ptr->size;
5287 register int i;
5289 eassert (!VECTOR_MARKED_P (ptr));
5290 VECTOR_MARK (ptr); /* Else mark it */
5291 if (size & PSEUDOVECTOR_FLAG)
5292 size &= PSEUDOVECTOR_SIZE_MASK;
5294 /* Note that this size is not the memory-footprint size, but only
5295 the number of Lisp_Object fields that we should trace.
5296 The distinction is used e.g. by Lisp_Process which places extra
5297 non-Lisp_Object fields at the end of the structure. */
5298 for (i = 0; i < size; i++) /* and then mark its elements */
5299 mark_object (ptr->contents[i]);
5302 /* Like mark_vectorlike but optimized for char-tables (and
5303 sub-char-tables) assuming that the contents are mostly integers or
5304 symbols. */
5306 static void
5307 mark_char_table (struct Lisp_Vector *ptr)
5309 register EMACS_INT size = ptr->size & PSEUDOVECTOR_SIZE_MASK;
5310 register int i;
5312 eassert (!VECTOR_MARKED_P (ptr));
5313 VECTOR_MARK (ptr);
5314 for (i = 0; i < size; i++)
5316 Lisp_Object val = ptr->contents[i];
5318 if (INTEGERP (val) || SYMBOLP (val) && XSYMBOL (val)->gcmarkbit)
5319 continue;
5320 if (SUB_CHAR_TABLE_P (val))
5322 if (! VECTOR_MARKED_P (XVECTOR (val)))
5323 mark_char_table (XVECTOR (val));
5325 else
5326 mark_object (val);
5330 void
5331 mark_object (Lisp_Object arg)
5333 register Lisp_Object obj = arg;
5334 #ifdef GC_CHECK_MARKED_OBJECTS
5335 void *po;
5336 struct mem_node *m;
5337 #endif
5338 int cdr_count = 0;
5340 loop:
5342 if (PURE_POINTER_P (XPNTR (obj)))
5343 return;
5345 last_marked[last_marked_index++] = obj;
5346 if (last_marked_index == LAST_MARKED_SIZE)
5347 last_marked_index = 0;
5349 /* Perform some sanity checks on the objects marked here. Abort if
5350 we encounter an object we know is bogus. This increases GC time
5351 by ~80%, and requires compilation with GC_MARK_STACK != 0. */
5352 #ifdef GC_CHECK_MARKED_OBJECTS
5354 po = (void *) XPNTR (obj);
5356 /* Check that the object pointed to by PO is known to be a Lisp
5357 structure allocated from the heap. */
5358 #define CHECK_ALLOCATED() \
5359 do { \
5360 m = mem_find (po); \
5361 if (m == MEM_NIL) \
5362 abort (); \
5363 } while (0)
5365 /* Check that the object pointed to by PO is live, using predicate
5366 function LIVEP. */
5367 #define CHECK_LIVE(LIVEP) \
5368 do { \
5369 if (!LIVEP (m, po)) \
5370 abort (); \
5371 } while (0)
5373 /* Check both of the above conditions. */
5374 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) \
5375 do { \
5376 CHECK_ALLOCATED (); \
5377 CHECK_LIVE (LIVEP); \
5378 } while (0) \
5380 #else /* not GC_CHECK_MARKED_OBJECTS */
5382 #define CHECK_ALLOCATED() (void) 0
5383 #define CHECK_LIVE(LIVEP) (void) 0
5384 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) (void) 0
5386 #endif /* not GC_CHECK_MARKED_OBJECTS */
5388 switch (SWITCH_ENUM_CAST (XTYPE (obj)))
5390 case Lisp_String:
5392 register struct Lisp_String *ptr = XSTRING (obj);
5393 if (STRING_MARKED_P (ptr))
5394 break;
5395 CHECK_ALLOCATED_AND_LIVE (live_string_p);
5396 MARK_INTERVAL_TREE (ptr->intervals);
5397 MARK_STRING (ptr);
5398 #ifdef GC_CHECK_STRING_BYTES
5399 /* Check that the string size recorded in the string is the
5400 same as the one recorded in the sdata structure. */
5401 CHECK_STRING_BYTES (ptr);
5402 #endif /* GC_CHECK_STRING_BYTES */
5404 break;
5406 case Lisp_Vectorlike:
5407 if (VECTOR_MARKED_P (XVECTOR (obj)))
5408 break;
5409 #ifdef GC_CHECK_MARKED_OBJECTS
5410 m = mem_find (po);
5411 if (m == MEM_NIL && !SUBRP (obj)
5412 && po != &buffer_defaults
5413 && po != &buffer_local_symbols)
5414 abort ();
5415 #endif /* GC_CHECK_MARKED_OBJECTS */
5417 if (BUFFERP (obj))
5419 #ifdef GC_CHECK_MARKED_OBJECTS
5420 if (po != &buffer_defaults && po != &buffer_local_symbols)
5422 struct buffer *b;
5423 for (b = all_buffers; b && b != po; b = b->next)
5425 if (b == NULL)
5426 abort ();
5428 #endif /* GC_CHECK_MARKED_OBJECTS */
5429 mark_buffer (obj);
5431 else if (SUBRP (obj))
5432 break;
5433 else if (FUNVECP (obj) && FUNVEC_COMPILED_P (obj))
5434 /* We could treat this just like a vector, but it is better to
5435 save the COMPILED_CONSTANTS element for last and avoid
5436 recursion there. */
5438 register struct Lisp_Vector *ptr = XVECTOR (obj);
5439 register EMACS_INT size = ptr->size;
5440 register int i;
5442 CHECK_LIVE (live_vector_p);
5443 VECTOR_MARK (ptr); /* Else mark it */
5444 size &= PSEUDOVECTOR_SIZE_MASK;
5445 for (i = 0; i < size; i++) /* and then mark its elements */
5447 if (i != COMPILED_CONSTANTS)
5448 mark_object (ptr->contents[i]);
5450 obj = ptr->contents[COMPILED_CONSTANTS];
5451 goto loop;
5453 else if (FRAMEP (obj))
5455 register struct frame *ptr = XFRAME (obj);
5456 mark_vectorlike (XVECTOR (obj));
5457 mark_face_cache (ptr->face_cache);
5459 else if (WINDOWP (obj))
5461 register struct Lisp_Vector *ptr = XVECTOR (obj);
5462 struct window *w = XWINDOW (obj);
5463 mark_vectorlike (ptr);
5464 /* Mark glyphs for leaf windows. Marking window matrices is
5465 sufficient because frame matrices use the same glyph
5466 memory. */
5467 if (NILP (w->hchild)
5468 && NILP (w->vchild)
5469 && w->current_matrix)
5471 mark_glyph_matrix (w->current_matrix);
5472 mark_glyph_matrix (w->desired_matrix);
5475 else if (HASH_TABLE_P (obj))
5477 struct Lisp_Hash_Table *h = XHASH_TABLE (obj);
5478 mark_vectorlike ((struct Lisp_Vector *)h);
5479 /* If hash table is not weak, mark all keys and values.
5480 For weak tables, mark only the vector. */
5481 if (NILP (h->weak))
5482 mark_object (h->key_and_value);
5483 else
5484 VECTOR_MARK (XVECTOR (h->key_and_value));
5486 else if (CHAR_TABLE_P (obj))
5487 mark_char_table (XVECTOR (obj));
5488 else
5489 mark_vectorlike (XVECTOR (obj));
5490 break;
5492 case Lisp_Symbol:
5494 register struct Lisp_Symbol *ptr = XSYMBOL (obj);
5495 struct Lisp_Symbol *ptrx;
5497 if (ptr->gcmarkbit)
5498 break;
5499 CHECK_ALLOCATED_AND_LIVE (live_symbol_p);
5500 ptr->gcmarkbit = 1;
5501 mark_object (ptr->function);
5502 mark_object (ptr->plist);
5503 switch (ptr->redirect)
5505 case SYMBOL_PLAINVAL: mark_object (SYMBOL_VAL (ptr)); break;
5506 case SYMBOL_VARALIAS:
5508 Lisp_Object tem;
5509 XSETSYMBOL (tem, SYMBOL_ALIAS (ptr));
5510 mark_object (tem);
5511 break;
5513 case SYMBOL_LOCALIZED:
5515 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
5516 /* If the value is forwarded to a buffer or keyboard field,
5517 these are marked when we see the corresponding object.
5518 And if it's forwarded to a C variable, either it's not
5519 a Lisp_Object var, or it's staticpro'd already. */
5520 mark_object (blv->where);
5521 mark_object (blv->valcell);
5522 mark_object (blv->defcell);
5523 break;
5525 case SYMBOL_FORWARDED:
5526 /* If the value is forwarded to a buffer or keyboard field,
5527 these are marked when we see the corresponding object.
5528 And if it's forwarded to a C variable, either it's not
5529 a Lisp_Object var, or it's staticpro'd already. */
5530 break;
5531 default: abort ();
5533 if (!PURE_POINTER_P (XSTRING (ptr->xname)))
5534 MARK_STRING (XSTRING (ptr->xname));
5535 MARK_INTERVAL_TREE (STRING_INTERVALS (ptr->xname));
5537 ptr = ptr->next;
5538 if (ptr)
5540 ptrx = ptr; /* Use of ptrx avoids compiler bug on Sun */
5541 XSETSYMBOL (obj, ptrx);
5542 goto loop;
5545 break;
5547 case Lisp_Misc:
5548 CHECK_ALLOCATED_AND_LIVE (live_misc_p);
5549 if (XMISCANY (obj)->gcmarkbit)
5550 break;
5551 XMISCANY (obj)->gcmarkbit = 1;
5553 switch (XMISCTYPE (obj))
5556 case Lisp_Misc_Marker:
5557 /* DO NOT mark thru the marker's chain.
5558 The buffer's markers chain does not preserve markers from gc;
5559 instead, markers are removed from the chain when freed by gc. */
5560 break;
5562 case Lisp_Misc_Save_Value:
5563 #if GC_MARK_STACK
5565 register struct Lisp_Save_Value *ptr = XSAVE_VALUE (obj);
5566 /* If DOGC is set, POINTER is the address of a memory
5567 area containing INTEGER potential Lisp_Objects. */
5568 if (ptr->dogc)
5570 Lisp_Object *p = (Lisp_Object *) ptr->pointer;
5571 int nelt;
5572 for (nelt = ptr->integer; nelt > 0; nelt--, p++)
5573 mark_maybe_object (*p);
5576 #endif
5577 break;
5579 case Lisp_Misc_Overlay:
5581 struct Lisp_Overlay *ptr = XOVERLAY (obj);
5582 mark_object (ptr->start);
5583 mark_object (ptr->end);
5584 mark_object (ptr->plist);
5585 if (ptr->next)
5587 XSETMISC (obj, ptr->next);
5588 goto loop;
5591 break;
5593 default:
5594 abort ();
5596 break;
5598 case Lisp_Cons:
5600 register struct Lisp_Cons *ptr = XCONS (obj);
5601 if (CONS_MARKED_P (ptr))
5602 break;
5603 CHECK_ALLOCATED_AND_LIVE (live_cons_p);
5604 CONS_MARK (ptr);
5605 /* If the cdr is nil, avoid recursion for the car. */
5606 if (EQ (ptr->u.cdr, Qnil))
5608 obj = ptr->car;
5609 cdr_count = 0;
5610 goto loop;
5612 mark_object (ptr->car);
5613 obj = ptr->u.cdr;
5614 cdr_count++;
5615 if (cdr_count == mark_object_loop_halt)
5616 abort ();
5617 goto loop;
5620 case Lisp_Float:
5621 CHECK_ALLOCATED_AND_LIVE (live_float_p);
5622 FLOAT_MARK (XFLOAT (obj));
5623 break;
5625 case_Lisp_Int:
5626 break;
5628 default:
5629 abort ();
5632 #undef CHECK_LIVE
5633 #undef CHECK_ALLOCATED
5634 #undef CHECK_ALLOCATED_AND_LIVE
5637 /* Mark the pointers in a buffer structure. */
5639 static void
5640 mark_buffer (Lisp_Object buf)
5642 register struct buffer *buffer = XBUFFER (buf);
5643 register Lisp_Object *ptr, tmp;
5644 Lisp_Object base_buffer;
5646 eassert (!VECTOR_MARKED_P (buffer));
5647 VECTOR_MARK (buffer);
5649 MARK_INTERVAL_TREE (BUF_INTERVALS (buffer));
5651 /* For now, we just don't mark the undo_list. It's done later in
5652 a special way just before the sweep phase, and after stripping
5653 some of its elements that are not needed any more. */
5655 if (buffer->overlays_before)
5657 XSETMISC (tmp, buffer->overlays_before);
5658 mark_object (tmp);
5660 if (buffer->overlays_after)
5662 XSETMISC (tmp, buffer->overlays_after);
5663 mark_object (tmp);
5666 /* buffer-local Lisp variables start at `undo_list',
5667 tho only the ones from `name' on are GC'd normally. */
5668 for (ptr = &buffer->name;
5669 (char *)ptr < (char *)buffer + sizeof (struct buffer);
5670 ptr++)
5671 mark_object (*ptr);
5673 /* If this is an indirect buffer, mark its base buffer. */
5674 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
5676 XSETBUFFER (base_buffer, buffer->base_buffer);
5677 mark_buffer (base_buffer);
5681 /* Mark the Lisp pointers in the terminal objects.
5682 Called by the Fgarbage_collector. */
5684 static void
5685 mark_terminals (void)
5687 struct terminal *t;
5688 for (t = terminal_list; t; t = t->next_terminal)
5690 eassert (t->name != NULL);
5691 if (!VECTOR_MARKED_P (t))
5693 #ifdef HAVE_WINDOW_SYSTEM
5694 mark_image_cache (t->image_cache);
5695 #endif /* HAVE_WINDOW_SYSTEM */
5696 mark_vectorlike ((struct Lisp_Vector *)t);
5703 /* Value is non-zero if OBJ will survive the current GC because it's
5704 either marked or does not need to be marked to survive. */
5707 survives_gc_p (Lisp_Object obj)
5709 int survives_p;
5711 switch (XTYPE (obj))
5713 case_Lisp_Int:
5714 survives_p = 1;
5715 break;
5717 case Lisp_Symbol:
5718 survives_p = XSYMBOL (obj)->gcmarkbit;
5719 break;
5721 case Lisp_Misc:
5722 survives_p = XMISCANY (obj)->gcmarkbit;
5723 break;
5725 case Lisp_String:
5726 survives_p = STRING_MARKED_P (XSTRING (obj));
5727 break;
5729 case Lisp_Vectorlike:
5730 survives_p = SUBRP (obj) || VECTOR_MARKED_P (XVECTOR (obj));
5731 break;
5733 case Lisp_Cons:
5734 survives_p = CONS_MARKED_P (XCONS (obj));
5735 break;
5737 case Lisp_Float:
5738 survives_p = FLOAT_MARKED_P (XFLOAT (obj));
5739 break;
5741 default:
5742 abort ();
5745 return survives_p || PURE_POINTER_P ((void *) XPNTR (obj));
5750 /* Sweep: find all structures not marked, and free them. */
5752 static void
5753 gc_sweep (void)
5755 /* Remove or mark entries in weak hash tables.
5756 This must be done before any object is unmarked. */
5757 sweep_weak_hash_tables ();
5759 sweep_strings ();
5760 #ifdef GC_CHECK_STRING_BYTES
5761 if (!noninteractive)
5762 check_string_bytes (1);
5763 #endif
5765 /* Put all unmarked conses on free list */
5767 register struct cons_block *cblk;
5768 struct cons_block **cprev = &cons_block;
5769 register int lim = cons_block_index;
5770 register int num_free = 0, num_used = 0;
5772 cons_free_list = 0;
5774 for (cblk = cons_block; cblk; cblk = *cprev)
5776 register int i = 0;
5777 int this_free = 0;
5778 int ilim = (lim + BITS_PER_INT - 1) / BITS_PER_INT;
5780 /* Scan the mark bits an int at a time. */
5781 for (i = 0; i <= ilim; i++)
5783 if (cblk->gcmarkbits[i] == -1)
5785 /* Fast path - all cons cells for this int are marked. */
5786 cblk->gcmarkbits[i] = 0;
5787 num_used += BITS_PER_INT;
5789 else
5791 /* Some cons cells for this int are not marked.
5792 Find which ones, and free them. */
5793 int start, pos, stop;
5795 start = i * BITS_PER_INT;
5796 stop = lim - start;
5797 if (stop > BITS_PER_INT)
5798 stop = BITS_PER_INT;
5799 stop += start;
5801 for (pos = start; pos < stop; pos++)
5803 if (!CONS_MARKED_P (&cblk->conses[pos]))
5805 this_free++;
5806 cblk->conses[pos].u.chain = cons_free_list;
5807 cons_free_list = &cblk->conses[pos];
5808 #if GC_MARK_STACK
5809 cons_free_list->car = Vdead;
5810 #endif
5812 else
5814 num_used++;
5815 CONS_UNMARK (&cblk->conses[pos]);
5821 lim = CONS_BLOCK_SIZE;
5822 /* If this block contains only free conses and we have already
5823 seen more than two blocks worth of free conses then deallocate
5824 this block. */
5825 if (this_free == CONS_BLOCK_SIZE && num_free > CONS_BLOCK_SIZE)
5827 *cprev = cblk->next;
5828 /* Unhook from the free list. */
5829 cons_free_list = cblk->conses[0].u.chain;
5830 lisp_align_free (cblk);
5831 n_cons_blocks--;
5833 else
5835 num_free += this_free;
5836 cprev = &cblk->next;
5839 total_conses = num_used;
5840 total_free_conses = num_free;
5843 /* Put all unmarked floats on free list */
5845 register struct float_block *fblk;
5846 struct float_block **fprev = &float_block;
5847 register int lim = float_block_index;
5848 register int num_free = 0, num_used = 0;
5850 float_free_list = 0;
5852 for (fblk = float_block; fblk; fblk = *fprev)
5854 register int i;
5855 int this_free = 0;
5856 for (i = 0; i < lim; i++)
5857 if (!FLOAT_MARKED_P (&fblk->floats[i]))
5859 this_free++;
5860 fblk->floats[i].u.chain = float_free_list;
5861 float_free_list = &fblk->floats[i];
5863 else
5865 num_used++;
5866 FLOAT_UNMARK (&fblk->floats[i]);
5868 lim = FLOAT_BLOCK_SIZE;
5869 /* If this block contains only free floats and we have already
5870 seen more than two blocks worth of free floats then deallocate
5871 this block. */
5872 if (this_free == FLOAT_BLOCK_SIZE && num_free > FLOAT_BLOCK_SIZE)
5874 *fprev = fblk->next;
5875 /* Unhook from the free list. */
5876 float_free_list = fblk->floats[0].u.chain;
5877 lisp_align_free (fblk);
5878 n_float_blocks--;
5880 else
5882 num_free += this_free;
5883 fprev = &fblk->next;
5886 total_floats = num_used;
5887 total_free_floats = num_free;
5890 /* Put all unmarked intervals on free list */
5892 register struct interval_block *iblk;
5893 struct interval_block **iprev = &interval_block;
5894 register int lim = interval_block_index;
5895 register int num_free = 0, num_used = 0;
5897 interval_free_list = 0;
5899 for (iblk = interval_block; iblk; iblk = *iprev)
5901 register int i;
5902 int this_free = 0;
5904 for (i = 0; i < lim; i++)
5906 if (!iblk->intervals[i].gcmarkbit)
5908 SET_INTERVAL_PARENT (&iblk->intervals[i], interval_free_list);
5909 interval_free_list = &iblk->intervals[i];
5910 this_free++;
5912 else
5914 num_used++;
5915 iblk->intervals[i].gcmarkbit = 0;
5918 lim = INTERVAL_BLOCK_SIZE;
5919 /* If this block contains only free intervals and we have already
5920 seen more than two blocks worth of free intervals then
5921 deallocate this block. */
5922 if (this_free == INTERVAL_BLOCK_SIZE && num_free > INTERVAL_BLOCK_SIZE)
5924 *iprev = iblk->next;
5925 /* Unhook from the free list. */
5926 interval_free_list = INTERVAL_PARENT (&iblk->intervals[0]);
5927 lisp_free (iblk);
5928 n_interval_blocks--;
5930 else
5932 num_free += this_free;
5933 iprev = &iblk->next;
5936 total_intervals = num_used;
5937 total_free_intervals = num_free;
5940 /* Put all unmarked symbols on free list */
5942 register struct symbol_block *sblk;
5943 struct symbol_block **sprev = &symbol_block;
5944 register int lim = symbol_block_index;
5945 register int num_free = 0, num_used = 0;
5947 symbol_free_list = NULL;
5949 for (sblk = symbol_block; sblk; sblk = *sprev)
5951 int this_free = 0;
5952 struct Lisp_Symbol *sym = sblk->symbols;
5953 struct Lisp_Symbol *end = sym + lim;
5955 for (; sym < end; ++sym)
5957 /* Check if the symbol was created during loadup. In such a case
5958 it might be pointed to by pure bytecode which we don't trace,
5959 so we conservatively assume that it is live. */
5960 int pure_p = PURE_POINTER_P (XSTRING (sym->xname));
5962 if (!sym->gcmarkbit && !pure_p)
5964 if (sym->redirect == SYMBOL_LOCALIZED)
5965 xfree (SYMBOL_BLV (sym));
5966 sym->next = symbol_free_list;
5967 symbol_free_list = sym;
5968 #if GC_MARK_STACK
5969 symbol_free_list->function = Vdead;
5970 #endif
5971 ++this_free;
5973 else
5975 ++num_used;
5976 if (!pure_p)
5977 UNMARK_STRING (XSTRING (sym->xname));
5978 sym->gcmarkbit = 0;
5982 lim = SYMBOL_BLOCK_SIZE;
5983 /* If this block contains only free symbols and we have already
5984 seen more than two blocks worth of free symbols then deallocate
5985 this block. */
5986 if (this_free == SYMBOL_BLOCK_SIZE && num_free > SYMBOL_BLOCK_SIZE)
5988 *sprev = sblk->next;
5989 /* Unhook from the free list. */
5990 symbol_free_list = sblk->symbols[0].next;
5991 lisp_free (sblk);
5992 n_symbol_blocks--;
5994 else
5996 num_free += this_free;
5997 sprev = &sblk->next;
6000 total_symbols = num_used;
6001 total_free_symbols = num_free;
6004 /* Put all unmarked misc's on free list.
6005 For a marker, first unchain it from the buffer it points into. */
6007 register struct marker_block *mblk;
6008 struct marker_block **mprev = &marker_block;
6009 register int lim = marker_block_index;
6010 register int num_free = 0, num_used = 0;
6012 marker_free_list = 0;
6014 for (mblk = marker_block; mblk; mblk = *mprev)
6016 register int i;
6017 int this_free = 0;
6019 for (i = 0; i < lim; i++)
6021 if (!mblk->markers[i].u_any.gcmarkbit)
6023 if (mblk->markers[i].u_any.type == Lisp_Misc_Marker)
6024 unchain_marker (&mblk->markers[i].u_marker);
6025 /* Set the type of the freed object to Lisp_Misc_Free.
6026 We could leave the type alone, since nobody checks it,
6027 but this might catch bugs faster. */
6028 mblk->markers[i].u_marker.type = Lisp_Misc_Free;
6029 mblk->markers[i].u_free.chain = marker_free_list;
6030 marker_free_list = &mblk->markers[i];
6031 this_free++;
6033 else
6035 num_used++;
6036 mblk->markers[i].u_any.gcmarkbit = 0;
6039 lim = MARKER_BLOCK_SIZE;
6040 /* If this block contains only free markers and we have already
6041 seen more than two blocks worth of free markers then deallocate
6042 this block. */
6043 if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE)
6045 *mprev = mblk->next;
6046 /* Unhook from the free list. */
6047 marker_free_list = mblk->markers[0].u_free.chain;
6048 lisp_free (mblk);
6049 n_marker_blocks--;
6051 else
6053 num_free += this_free;
6054 mprev = &mblk->next;
6058 total_markers = num_used;
6059 total_free_markers = num_free;
6062 /* Free all unmarked buffers */
6064 register struct buffer *buffer = all_buffers, *prev = 0, *next;
6066 while (buffer)
6067 if (!VECTOR_MARKED_P (buffer))
6069 if (prev)
6070 prev->next = buffer->next;
6071 else
6072 all_buffers = buffer->next;
6073 next = buffer->next;
6074 lisp_free (buffer);
6075 buffer = next;
6077 else
6079 VECTOR_UNMARK (buffer);
6080 UNMARK_BALANCE_INTERVALS (BUF_INTERVALS (buffer));
6081 prev = buffer, buffer = buffer->next;
6085 /* Free all unmarked vectors */
6087 register struct Lisp_Vector *vector = all_vectors, *prev = 0, *next;
6088 total_vector_size = 0;
6090 while (vector)
6091 if (!VECTOR_MARKED_P (vector))
6093 if (prev)
6094 prev->next = vector->next;
6095 else
6096 all_vectors = vector->next;
6097 next = vector->next;
6098 lisp_free (vector);
6099 n_vectors--;
6100 vector = next;
6103 else
6105 VECTOR_UNMARK (vector);
6106 if (vector->size & PSEUDOVECTOR_FLAG)
6107 total_vector_size += (PSEUDOVECTOR_SIZE_MASK & vector->size);
6108 else
6109 total_vector_size += vector->size;
6110 prev = vector, vector = vector->next;
6114 #ifdef GC_CHECK_STRING_BYTES
6115 if (!noninteractive)
6116 check_string_bytes (1);
6117 #endif
6123 /* Debugging aids. */
6125 DEFUN ("memory-limit", Fmemory_limit, Smemory_limit, 0, 0, 0,
6126 doc: /* Return the address of the last byte Emacs has allocated, divided by 1024.
6127 This may be helpful in debugging Emacs's memory usage.
6128 We divide the value by 1024 to make sure it fits in a Lisp integer. */)
6129 (void)
6131 Lisp_Object end;
6133 XSETINT (end, (EMACS_INT) sbrk (0) / 1024);
6135 return end;
6138 DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0,
6139 doc: /* Return a list of counters that measure how much consing there has been.
6140 Each of these counters increments for a certain kind of object.
6141 The counters wrap around from the largest positive integer to zero.
6142 Garbage collection does not decrease them.
6143 The elements of the value are as follows:
6144 (CONSES FLOATS VECTOR-CELLS SYMBOLS STRING-CHARS MISCS INTERVALS STRINGS)
6145 All are in units of 1 = one object consed
6146 except for VECTOR-CELLS and STRING-CHARS, which count the total length of
6147 objects consed.
6148 MISCS include overlays, markers, and some internal types.
6149 Frames, windows, buffers, and subprocesses count as vectors
6150 (but the contents of a buffer's text do not count here). */)
6151 (void)
6153 Lisp_Object consed[8];
6155 consed[0] = make_number (min (MOST_POSITIVE_FIXNUM, cons_cells_consed));
6156 consed[1] = make_number (min (MOST_POSITIVE_FIXNUM, floats_consed));
6157 consed[2] = make_number (min (MOST_POSITIVE_FIXNUM, vector_cells_consed));
6158 consed[3] = make_number (min (MOST_POSITIVE_FIXNUM, symbols_consed));
6159 consed[4] = make_number (min (MOST_POSITIVE_FIXNUM, string_chars_consed));
6160 consed[5] = make_number (min (MOST_POSITIVE_FIXNUM, misc_objects_consed));
6161 consed[6] = make_number (min (MOST_POSITIVE_FIXNUM, intervals_consed));
6162 consed[7] = make_number (min (MOST_POSITIVE_FIXNUM, strings_consed));
6164 return Flist (8, consed);
6167 int suppress_checking;
6169 void
6170 die (const char *msg, const char *file, int line)
6172 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: %s\r\n",
6173 file, line, msg);
6174 abort ();
6177 /* Initialization */
6179 void
6180 init_alloc_once (void)
6182 /* Used to do Vpurify_flag = Qt here, but Qt isn't set up yet! */
6183 purebeg = PUREBEG;
6184 pure_size = PURESIZE;
6185 pure_bytes_used = 0;
6186 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
6187 pure_bytes_used_before_overflow = 0;
6189 /* Initialize the list of free aligned blocks. */
6190 free_ablock = NULL;
6192 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
6193 mem_init ();
6194 Vdead = make_pure_string ("DEAD", 4, 4, 0);
6195 #endif
6197 all_vectors = 0;
6198 ignore_warnings = 1;
6199 #ifdef DOUG_LEA_MALLOC
6200 mallopt (M_TRIM_THRESHOLD, 128*1024); /* trim threshold */
6201 mallopt (M_MMAP_THRESHOLD, 64*1024); /* mmap threshold */
6202 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); /* max. number of mmap'ed areas */
6203 #endif
6204 init_strings ();
6205 init_cons ();
6206 init_symbol ();
6207 init_marker ();
6208 init_float ();
6209 init_intervals ();
6210 init_weak_hash_tables ();
6212 #ifdef REL_ALLOC
6213 malloc_hysteresis = 32;
6214 #else
6215 malloc_hysteresis = 0;
6216 #endif
6218 refill_memory_reserve ();
6220 ignore_warnings = 0;
6221 gcprolist = 0;
6222 byte_stack_list = 0;
6223 staticidx = 0;
6224 consing_since_gc = 0;
6225 gc_cons_threshold = 100000 * sizeof (Lisp_Object);
6226 gc_relative_threshold = 0;
6229 void
6230 init_alloc (void)
6232 gcprolist = 0;
6233 byte_stack_list = 0;
6234 #if GC_MARK_STACK
6235 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
6236 setjmp_tested_p = longjmps_done = 0;
6237 #endif
6238 #endif
6239 Vgc_elapsed = make_float (0.0);
6240 gcs_done = 0;
6243 void
6244 syms_of_alloc (void)
6246 DEFVAR_INT ("gc-cons-threshold", &gc_cons_threshold,
6247 doc: /* *Number of bytes of consing between garbage collections.
6248 Garbage collection can happen automatically once this many bytes have been
6249 allocated since the last garbage collection. All data types count.
6251 Garbage collection happens automatically only when `eval' is called.
6253 By binding this temporarily to a large number, you can effectively
6254 prevent garbage collection during a part of the program.
6255 See also `gc-cons-percentage'. */);
6257 DEFVAR_LISP ("gc-cons-percentage", &Vgc_cons_percentage,
6258 doc: /* *Portion of the heap used for allocation.
6259 Garbage collection can happen automatically once this portion of the heap
6260 has been allocated since the last garbage collection.
6261 If this portion is smaller than `gc-cons-threshold', this is ignored. */);
6262 Vgc_cons_percentage = make_float (0.1);
6264 DEFVAR_INT ("pure-bytes-used", &pure_bytes_used,
6265 doc: /* Number of bytes of sharable Lisp data allocated so far. */);
6267 DEFVAR_INT ("cons-cells-consed", &cons_cells_consed,
6268 doc: /* Number of cons cells that have been consed so far. */);
6270 DEFVAR_INT ("floats-consed", &floats_consed,
6271 doc: /* Number of floats that have been consed so far. */);
6273 DEFVAR_INT ("vector-cells-consed", &vector_cells_consed,
6274 doc: /* Number of vector cells that have been consed so far. */);
6276 DEFVAR_INT ("symbols-consed", &symbols_consed,
6277 doc: /* Number of symbols that have been consed so far. */);
6279 DEFVAR_INT ("string-chars-consed", &string_chars_consed,
6280 doc: /* Number of string characters that have been consed so far. */);
6282 DEFVAR_INT ("misc-objects-consed", &misc_objects_consed,
6283 doc: /* Number of miscellaneous objects that have been consed so far. */);
6285 DEFVAR_INT ("intervals-consed", &intervals_consed,
6286 doc: /* Number of intervals that have been consed so far. */);
6288 DEFVAR_INT ("strings-consed", &strings_consed,
6289 doc: /* Number of strings that have been consed so far. */);
6291 DEFVAR_LISP ("purify-flag", &Vpurify_flag,
6292 doc: /* Non-nil means loading Lisp code in order to dump an executable.
6293 This means that certain objects should be allocated in shared (pure) space.
6294 It can also be set to a hash-table, in which case this table is used to
6295 do hash-consing of the objects allocated to pure space. */);
6297 DEFVAR_BOOL ("garbage-collection-messages", &garbage_collection_messages,
6298 doc: /* Non-nil means display messages at start and end of garbage collection. */);
6299 garbage_collection_messages = 0;
6301 DEFVAR_LISP ("post-gc-hook", &Vpost_gc_hook,
6302 doc: /* Hook run after garbage collection has finished. */);
6303 Vpost_gc_hook = Qnil;
6304 Qpost_gc_hook = intern_c_string ("post-gc-hook");
6305 staticpro (&Qpost_gc_hook);
6307 DEFVAR_LISP ("memory-signal-data", &Vmemory_signal_data,
6308 doc: /* Precomputed `signal' argument for memory-full error. */);
6309 /* We build this in advance because if we wait until we need it, we might
6310 not be able to allocate the memory to hold it. */
6311 Vmemory_signal_data
6312 = pure_cons (Qerror,
6313 pure_cons (make_pure_c_string ("Memory exhausted--use M-x save-some-buffers then exit and restart Emacs"), Qnil));
6315 DEFVAR_LISP ("memory-full", &Vmemory_full,
6316 doc: /* Non-nil means Emacs cannot get much more Lisp memory. */);
6317 Vmemory_full = Qnil;
6319 staticpro (&Qgc_cons_threshold);
6320 Qgc_cons_threshold = intern_c_string ("gc-cons-threshold");
6322 staticpro (&Qchar_table_extra_slots);
6323 Qchar_table_extra_slots = intern_c_string ("char-table-extra-slots");
6325 DEFVAR_LISP ("gc-elapsed", &Vgc_elapsed,
6326 doc: /* Accumulated time elapsed in garbage collections.
6327 The time is in seconds as a floating point value. */);
6328 DEFVAR_INT ("gcs-done", &gcs_done,
6329 doc: /* Accumulated number of garbage collections done. */);
6331 defsubr (&Scons);
6332 defsubr (&Slist);
6333 defsubr (&Svector);
6334 defsubr (&Sfunvec);
6335 defsubr (&Smake_byte_code);
6336 defsubr (&Smake_list);
6337 defsubr (&Smake_vector);
6338 defsubr (&Smake_string);
6339 defsubr (&Smake_bool_vector);
6340 defsubr (&Smake_symbol);
6341 defsubr (&Smake_marker);
6342 defsubr (&Spurecopy);
6343 defsubr (&Sgarbage_collect);
6344 defsubr (&Smemory_limit);
6345 defsubr (&Smemory_use_counts);
6347 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
6348 defsubr (&Sgc_status);
6349 #endif
6352 /* arch-tag: 6695ca10-e3c5-4c2c-8bc3-ed26a7dda857
6353 (do not change this comment) */