* alloc.c (CONS_BLOCK_SIZE): Account for padding at the end of
[emacs.git] / src / alloc.c
blob7c461c5a6affbd0c66145c42f40e922584d128d9
1 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
3 Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2012
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 #include <signal.h>
28 #ifdef HAVE_PTHREAD
29 #include <pthread.h>
30 #endif
32 /* This file is part of the core Lisp implementation, and thus must
33 deal with the real data structures. If the Lisp implementation is
34 replaced, this file likely will not be used. */
36 #undef HIDE_LISP_IMPLEMENTATION
37 #include "lisp.h"
38 #include "process.h"
39 #include "intervals.h"
40 #include "puresize.h"
41 #include "buffer.h"
42 #include "window.h"
43 #include "keyboard.h"
44 #include "frame.h"
45 #include "blockinput.h"
46 #include "character.h"
47 #include "syssignal.h"
48 #include "termhooks.h" /* For struct terminal. */
49 #include <setjmp.h>
50 #include <verify.h>
52 /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects.
53 Doable only if GC_MARK_STACK. */
54 #if ! GC_MARK_STACK
55 # undef GC_CHECK_MARKED_OBJECTS
56 #endif
58 /* GC_MALLOC_CHECK defined means perform validity checks of malloc'd
59 memory. Can do this only if using gmalloc.c and if not checking
60 marked objects. */
62 #if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \
63 || defined GC_CHECK_MARKED_OBJECTS)
64 #undef GC_MALLOC_CHECK
65 #endif
67 #include <unistd.h>
68 #ifndef HAVE_UNISTD_H
69 extern void *sbrk ();
70 #endif
72 #include <fcntl.h>
74 #ifdef WINDOWSNT
75 #include "w32.h"
76 #endif
78 #ifdef DOUG_LEA_MALLOC
80 #include <malloc.h>
82 /* Specify maximum number of areas to mmap. It would be nice to use a
83 value that explicitly means "no limit". */
85 #define MMAP_MAX_AREAS 100000000
87 #else /* not DOUG_LEA_MALLOC */
89 /* The following come from gmalloc.c. */
91 extern size_t _bytes_used;
92 extern size_t __malloc_extra_blocks;
93 extern void *_malloc_internal (size_t);
94 extern void _free_internal (void *);
96 #endif /* not DOUG_LEA_MALLOC */
98 #if ! defined SYSTEM_MALLOC && ! defined SYNC_INPUT
99 #ifdef HAVE_PTHREAD
101 /* When GTK uses the file chooser dialog, different backends can be loaded
102 dynamically. One such a backend is the Gnome VFS backend that gets loaded
103 if you run Gnome. That backend creates several threads and also allocates
104 memory with malloc.
106 Also, gconf and gsettings may create several threads.
108 If Emacs sets malloc hooks (! SYSTEM_MALLOC) and the emacs_blocked_*
109 functions below are called from malloc, there is a chance that one
110 of these threads preempts the Emacs main thread and the hook variables
111 end up in an inconsistent state. So we have a mutex to prevent that (note
112 that the backend handles concurrent access to malloc within its own threads
113 but Emacs code running in the main thread is not included in that control).
115 When UNBLOCK_INPUT is called, reinvoke_input_signal may be called. If this
116 happens in one of the backend threads we will have two threads that tries
117 to run Emacs code at once, and the code is not prepared for that.
118 To prevent that, we only call BLOCK/UNBLOCK from the main thread. */
120 static pthread_mutex_t alloc_mutex;
122 #define BLOCK_INPUT_ALLOC \
123 do \
125 if (pthread_equal (pthread_self (), main_thread)) \
126 BLOCK_INPUT; \
127 pthread_mutex_lock (&alloc_mutex); \
129 while (0)
130 #define UNBLOCK_INPUT_ALLOC \
131 do \
133 pthread_mutex_unlock (&alloc_mutex); \
134 if (pthread_equal (pthread_self (), main_thread)) \
135 UNBLOCK_INPUT; \
137 while (0)
139 #else /* ! defined HAVE_PTHREAD */
141 #define BLOCK_INPUT_ALLOC BLOCK_INPUT
142 #define UNBLOCK_INPUT_ALLOC UNBLOCK_INPUT
144 #endif /* ! defined HAVE_PTHREAD */
145 #endif /* ! defined SYSTEM_MALLOC && ! defined SYNC_INPUT */
147 /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
148 to a struct Lisp_String. */
150 #define MARK_STRING(S) ((S)->size |= ARRAY_MARK_FLAG)
151 #define UNMARK_STRING(S) ((S)->size &= ~ARRAY_MARK_FLAG)
152 #define STRING_MARKED_P(S) (((S)->size & ARRAY_MARK_FLAG) != 0)
154 #define VECTOR_MARK(V) ((V)->header.size |= ARRAY_MARK_FLAG)
155 #define VECTOR_UNMARK(V) ((V)->header.size &= ~ARRAY_MARK_FLAG)
156 #define VECTOR_MARKED_P(V) (((V)->header.size & ARRAY_MARK_FLAG) != 0)
158 /* Value is the number of bytes of S, a pointer to a struct Lisp_String.
159 Be careful during GC, because S->size contains the mark bit for
160 strings. */
162 #define GC_STRING_BYTES(S) (STRING_BYTES (S))
164 /* Global variables. */
165 struct emacs_globals globals;
167 /* Number of bytes of consing done since the last gc. */
169 EMACS_INT consing_since_gc;
171 /* Similar minimum, computed from Vgc_cons_percentage. */
173 EMACS_INT gc_relative_threshold;
175 /* Minimum number of bytes of consing since GC before next GC,
176 when memory is full. */
178 EMACS_INT memory_full_cons_threshold;
180 /* Nonzero during GC. */
182 int gc_in_progress;
184 /* Nonzero means abort if try to GC.
185 This is for code which is written on the assumption that
186 no GC will happen, so as to verify that assumption. */
188 int abort_on_gc;
190 /* Number of live and free conses etc. */
192 static EMACS_INT total_conses, total_markers, total_symbols, total_vector_size;
193 static EMACS_INT total_free_conses, total_free_markers, total_free_symbols;
194 static EMACS_INT total_free_floats, total_floats;
196 /* Points to memory space allocated as "spare", to be freed if we run
197 out of memory. We keep one large block, four cons-blocks, and
198 two string blocks. */
200 static char *spare_memory[7];
202 /* Amount of spare memory to keep in large reserve block, or to see
203 whether this much is available when malloc fails on a larger request. */
205 #define SPARE_MEMORY (1 << 14)
207 /* Number of extra blocks malloc should get when it needs more core. */
209 static int malloc_hysteresis;
211 /* Initialize it to a nonzero value to force it into data space
212 (rather than bss space). That way unexec will remap it into text
213 space (pure), on some systems. We have not implemented the
214 remapping on more recent systems because this is less important
215 nowadays than in the days of small memories and timesharing. */
217 EMACS_INT pure[(PURESIZE + sizeof (EMACS_INT) - 1) / sizeof (EMACS_INT)] = {1,};
218 #define PUREBEG (char *) pure
220 /* Pointer to the pure area, and its size. */
222 static char *purebeg;
223 static ptrdiff_t pure_size;
225 /* Number of bytes of pure storage used before pure storage overflowed.
226 If this is non-zero, this implies that an overflow occurred. */
228 static ptrdiff_t pure_bytes_used_before_overflow;
230 /* Value is non-zero if P points into pure space. */
232 #define PURE_POINTER_P(P) \
233 ((uintptr_t) (P) - (uintptr_t) purebeg <= pure_size)
235 /* Index in pure at which next pure Lisp object will be allocated.. */
237 static ptrdiff_t pure_bytes_used_lisp;
239 /* Number of bytes allocated for non-Lisp objects in pure storage. */
241 static ptrdiff_t pure_bytes_used_non_lisp;
243 /* If nonzero, this is a warning delivered by malloc and not yet
244 displayed. */
246 const char *pending_malloc_warning;
248 /* Maximum amount of C stack to save when a GC happens. */
250 #ifndef MAX_SAVE_STACK
251 #define MAX_SAVE_STACK 16000
252 #endif
254 /* Buffer in which we save a copy of the C stack at each GC. */
256 #if MAX_SAVE_STACK > 0
257 static char *stack_copy;
258 static ptrdiff_t stack_copy_size;
259 #endif
261 /* Non-zero means ignore malloc warnings. Set during initialization.
262 Currently not used. */
264 static int ignore_warnings;
266 static Lisp_Object Qgc_cons_threshold;
267 Lisp_Object Qchar_table_extra_slots;
269 /* Hook run after GC has finished. */
271 static Lisp_Object Qpost_gc_hook;
273 static void mark_buffer (Lisp_Object);
274 static void mark_terminals (void);
275 static void gc_sweep (void);
276 static Lisp_Object make_pure_vector (ptrdiff_t);
277 static void mark_glyph_matrix (struct glyph_matrix *);
278 static void mark_face_cache (struct face_cache *);
280 #if !defined REL_ALLOC || defined SYSTEM_MALLOC
281 static void refill_memory_reserve (void);
282 #endif
283 static struct Lisp_String *allocate_string (void);
284 static void compact_small_strings (void);
285 static void free_large_strings (void);
286 static void sweep_strings (void);
287 static void free_misc (Lisp_Object);
288 extern Lisp_Object which_symbols (Lisp_Object, EMACS_INT) EXTERNALLY_VISIBLE;
290 /* When scanning the C stack for live Lisp objects, Emacs keeps track
291 of what memory allocated via lisp_malloc is intended for what
292 purpose. This enumeration specifies the type of memory. */
294 enum mem_type
296 MEM_TYPE_NON_LISP,
297 MEM_TYPE_BUFFER,
298 MEM_TYPE_CONS,
299 MEM_TYPE_STRING,
300 MEM_TYPE_MISC,
301 MEM_TYPE_SYMBOL,
302 MEM_TYPE_FLOAT,
303 /* We used to keep separate mem_types for subtypes of vectors such as
304 process, hash_table, frame, terminal, and window, but we never made
305 use of the distinction, so it only caused source-code complexity
306 and runtime slowdown. Minor but pointless. */
307 MEM_TYPE_VECTORLIKE
310 static void *lisp_malloc (size_t, enum mem_type);
313 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
315 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
316 #include <stdio.h> /* For fprintf. */
317 #endif
319 /* A unique object in pure space used to make some Lisp objects
320 on free lists recognizable in O(1). */
322 static Lisp_Object Vdead;
323 #define DEADP(x) EQ (x, Vdead)
325 #ifdef GC_MALLOC_CHECK
327 enum mem_type allocated_mem_type;
329 #endif /* GC_MALLOC_CHECK */
331 /* A node in the red-black tree describing allocated memory containing
332 Lisp data. Each such block is recorded with its start and end
333 address when it is allocated, and removed from the tree when it
334 is freed.
336 A red-black tree is a balanced binary tree with the following
337 properties:
339 1. Every node is either red or black.
340 2. Every leaf is black.
341 3. If a node is red, then both of its children are black.
342 4. Every simple path from a node to a descendant leaf contains
343 the same number of black nodes.
344 5. The root is always black.
346 When nodes are inserted into the tree, or deleted from the tree,
347 the tree is "fixed" so that these properties are always true.
349 A red-black tree with N internal nodes has height at most 2
350 log(N+1). Searches, insertions and deletions are done in O(log N).
351 Please see a text book about data structures for a detailed
352 description of red-black trees. Any book worth its salt should
353 describe them. */
355 struct mem_node
357 /* Children of this node. These pointers are never NULL. When there
358 is no child, the value is MEM_NIL, which points to a dummy node. */
359 struct mem_node *left, *right;
361 /* The parent of this node. In the root node, this is NULL. */
362 struct mem_node *parent;
364 /* Start and end of allocated region. */
365 void *start, *end;
367 /* Node color. */
368 enum {MEM_BLACK, MEM_RED} color;
370 /* Memory type. */
371 enum mem_type type;
374 /* Base address of stack. Set in main. */
376 Lisp_Object *stack_base;
378 /* Root of the tree describing allocated Lisp memory. */
380 static struct mem_node *mem_root;
382 /* Lowest and highest known address in the heap. */
384 static void *min_heap_address, *max_heap_address;
386 /* Sentinel node of the tree. */
388 static struct mem_node mem_z;
389 #define MEM_NIL &mem_z
391 static struct Lisp_Vector *allocate_vectorlike (ptrdiff_t);
392 static void lisp_free (void *);
393 static void mark_stack (void);
394 static int live_vector_p (struct mem_node *, void *);
395 static int live_buffer_p (struct mem_node *, void *);
396 static int live_string_p (struct mem_node *, void *);
397 static int live_cons_p (struct mem_node *, void *);
398 static int live_symbol_p (struct mem_node *, void *);
399 static int live_float_p (struct mem_node *, void *);
400 static int live_misc_p (struct mem_node *, void *);
401 static void mark_maybe_object (Lisp_Object);
402 static void mark_memory (void *, void *);
403 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
404 static void mem_init (void);
405 static struct mem_node *mem_insert (void *, void *, enum mem_type);
406 static void mem_insert_fixup (struct mem_node *);
407 #endif
408 static void mem_rotate_left (struct mem_node *);
409 static void mem_rotate_right (struct mem_node *);
410 static void mem_delete (struct mem_node *);
411 static void mem_delete_fixup (struct mem_node *);
412 static inline struct mem_node *mem_find (void *);
415 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
416 static void check_gcpros (void);
417 #endif
419 #endif /* GC_MARK_STACK || GC_MALLOC_CHECK */
421 #ifndef DEADP
422 # define DEADP(x) 0
423 #endif
425 /* Recording what needs to be marked for gc. */
427 struct gcpro *gcprolist;
429 /* Addresses of staticpro'd variables. Initialize it to a nonzero
430 value; otherwise some compilers put it into BSS. */
432 #define NSTATICS 0x640
433 static Lisp_Object *staticvec[NSTATICS] = {&Vpurify_flag};
435 /* Index of next unused slot in staticvec. */
437 static int staticidx = 0;
439 static void *pure_alloc (size_t, int);
442 /* Value is SZ rounded up to the next multiple of ALIGNMENT.
443 ALIGNMENT must be a power of 2. */
445 #define ALIGN(ptr, ALIGNMENT) \
446 ((void *) (((uintptr_t) (ptr) + (ALIGNMENT) - 1) \
447 & ~ ((ALIGNMENT) - 1)))
451 /************************************************************************
452 Malloc
453 ************************************************************************/
455 /* Function malloc calls this if it finds we are near exhausting storage. */
457 void
458 malloc_warning (const char *str)
460 pending_malloc_warning = str;
464 /* Display an already-pending malloc warning. */
466 void
467 display_malloc_warning (void)
469 call3 (intern ("display-warning"),
470 intern ("alloc"),
471 build_string (pending_malloc_warning),
472 intern ("emergency"));
473 pending_malloc_warning = 0;
476 /* Called if we can't allocate relocatable space for a buffer. */
478 void
479 buffer_memory_full (ptrdiff_t nbytes)
481 /* If buffers use the relocating allocator, no need to free
482 spare_memory, because we may have plenty of malloc space left
483 that we could get, and if we don't, the malloc that fails will
484 itself cause spare_memory to be freed. If buffers don't use the
485 relocating allocator, treat this like any other failing
486 malloc. */
488 #ifndef REL_ALLOC
489 memory_full (nbytes);
490 #endif
492 /* This used to call error, but if we've run out of memory, we could
493 get infinite recursion trying to build the string. */
494 xsignal (Qnil, Vmemory_signal_data);
498 #ifndef XMALLOC_OVERRUN_CHECK
499 #define XMALLOC_OVERRUN_CHECK_OVERHEAD 0
500 #else
502 /* Check for overrun in malloc'ed buffers by wrapping a header and trailer
503 around each block.
505 The header consists of XMALLOC_OVERRUN_CHECK_SIZE fixed bytes
506 followed by XMALLOC_OVERRUN_SIZE_SIZE bytes containing the original
507 block size in little-endian order. The trailer consists of
508 XMALLOC_OVERRUN_CHECK_SIZE fixed bytes.
510 The header is used to detect whether this block has been allocated
511 through these functions, as some low-level libc functions may
512 bypass the malloc hooks. */
514 #define XMALLOC_OVERRUN_CHECK_SIZE 16
515 #define XMALLOC_OVERRUN_CHECK_OVERHEAD \
516 (2 * XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE)
518 /* Define XMALLOC_OVERRUN_SIZE_SIZE so that (1) it's large enough to
519 hold a size_t value and (2) the header size is a multiple of the
520 alignment that Emacs needs for C types and for USE_LSB_TAG. */
521 #define XMALLOC_BASE_ALIGNMENT \
522 offsetof ( \
523 struct { \
524 union { long double d; intmax_t i; void *p; } u; \
525 char c; \
526 }, \
528 #ifdef USE_LSB_TAG
529 /* A common multiple of the positive integers A and B. Ideally this
530 would be the least common multiple, but there's no way to do that
531 as a constant expression in C, so do the best that we can easily do. */
532 # define COMMON_MULTIPLE(a, b) \
533 ((a) % (b) == 0 ? (a) : (b) % (a) == 0 ? (b) : (a) * (b))
534 # define XMALLOC_HEADER_ALIGNMENT \
535 COMMON_MULTIPLE (1 << GCTYPEBITS, XMALLOC_BASE_ALIGNMENT)
536 #else
537 # define XMALLOC_HEADER_ALIGNMENT XMALLOC_BASE_ALIGNMENT
538 #endif
539 #define XMALLOC_OVERRUN_SIZE_SIZE \
540 (((XMALLOC_OVERRUN_CHECK_SIZE + sizeof (size_t) \
541 + XMALLOC_HEADER_ALIGNMENT - 1) \
542 / XMALLOC_HEADER_ALIGNMENT * XMALLOC_HEADER_ALIGNMENT) \
543 - XMALLOC_OVERRUN_CHECK_SIZE)
545 static char const xmalloc_overrun_check_header[XMALLOC_OVERRUN_CHECK_SIZE] =
546 { '\x9a', '\x9b', '\xae', '\xaf',
547 '\xbf', '\xbe', '\xce', '\xcf',
548 '\xea', '\xeb', '\xec', '\xed',
549 '\xdf', '\xde', '\x9c', '\x9d' };
551 static char const xmalloc_overrun_check_trailer[XMALLOC_OVERRUN_CHECK_SIZE] =
552 { '\xaa', '\xab', '\xac', '\xad',
553 '\xba', '\xbb', '\xbc', '\xbd',
554 '\xca', '\xcb', '\xcc', '\xcd',
555 '\xda', '\xdb', '\xdc', '\xdd' };
557 /* Insert and extract the block size in the header. */
559 static void
560 xmalloc_put_size (unsigned char *ptr, size_t size)
562 int i;
563 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
565 *--ptr = size & ((1 << CHAR_BIT) - 1);
566 size >>= CHAR_BIT;
570 static size_t
571 xmalloc_get_size (unsigned char *ptr)
573 size_t size = 0;
574 int i;
575 ptr -= XMALLOC_OVERRUN_SIZE_SIZE;
576 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
578 size <<= CHAR_BIT;
579 size += *ptr++;
581 return size;
585 /* The call depth in overrun_check functions. For example, this might happen:
586 xmalloc()
587 overrun_check_malloc()
588 -> malloc -> (via hook)_-> emacs_blocked_malloc
589 -> overrun_check_malloc
590 call malloc (hooks are NULL, so real malloc is called).
591 malloc returns 10000.
592 add overhead, return 10016.
593 <- (back in overrun_check_malloc)
594 add overhead again, return 10032
595 xmalloc returns 10032.
597 (time passes).
599 xfree(10032)
600 overrun_check_free(10032)
601 decrease overhead
602 free(10016) <- crash, because 10000 is the original pointer. */
604 static ptrdiff_t check_depth;
606 /* Like malloc, but wraps allocated block with header and trailer. */
608 static void *
609 overrun_check_malloc (size_t size)
611 register unsigned char *val;
612 int overhead = ++check_depth == 1 ? XMALLOC_OVERRUN_CHECK_OVERHEAD : 0;
613 if (SIZE_MAX - overhead < size)
614 abort ();
616 val = (unsigned char *) malloc (size + overhead);
617 if (val && check_depth == 1)
619 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
620 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
621 xmalloc_put_size (val, size);
622 memcpy (val + size, xmalloc_overrun_check_trailer,
623 XMALLOC_OVERRUN_CHECK_SIZE);
625 --check_depth;
626 return val;
630 /* Like realloc, but checks old block for overrun, and wraps new block
631 with header and trailer. */
633 static void *
634 overrun_check_realloc (void *block, size_t size)
636 register unsigned char *val = (unsigned char *) block;
637 int overhead = ++check_depth == 1 ? XMALLOC_OVERRUN_CHECK_OVERHEAD : 0;
638 if (SIZE_MAX - overhead < size)
639 abort ();
641 if (val
642 && check_depth == 1
643 && memcmp (xmalloc_overrun_check_header,
644 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
645 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
647 size_t osize = xmalloc_get_size (val);
648 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
649 XMALLOC_OVERRUN_CHECK_SIZE))
650 abort ();
651 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
652 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
653 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
656 val = realloc (val, size + overhead);
658 if (val && check_depth == 1)
660 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
661 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
662 xmalloc_put_size (val, size);
663 memcpy (val + size, xmalloc_overrun_check_trailer,
664 XMALLOC_OVERRUN_CHECK_SIZE);
666 --check_depth;
667 return val;
670 /* Like free, but checks block for overrun. */
672 static void
673 overrun_check_free (void *block)
675 unsigned char *val = (unsigned char *) block;
677 ++check_depth;
678 if (val
679 && check_depth == 1
680 && memcmp (xmalloc_overrun_check_header,
681 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
682 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
684 size_t osize = xmalloc_get_size (val);
685 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
686 XMALLOC_OVERRUN_CHECK_SIZE))
687 abort ();
688 #ifdef XMALLOC_CLEAR_FREE_MEMORY
689 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
690 memset (val, 0xff, osize + XMALLOC_OVERRUN_CHECK_OVERHEAD);
691 #else
692 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
693 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
694 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
695 #endif
698 free (val);
699 --check_depth;
702 #undef malloc
703 #undef realloc
704 #undef free
705 #define malloc overrun_check_malloc
706 #define realloc overrun_check_realloc
707 #define free overrun_check_free
708 #endif
710 #ifdef SYNC_INPUT
711 /* When using SYNC_INPUT, we don't call malloc from a signal handler, so
712 there's no need to block input around malloc. */
713 #define MALLOC_BLOCK_INPUT ((void)0)
714 #define MALLOC_UNBLOCK_INPUT ((void)0)
715 #else
716 #define MALLOC_BLOCK_INPUT BLOCK_INPUT
717 #define MALLOC_UNBLOCK_INPUT UNBLOCK_INPUT
718 #endif
720 /* Like malloc but check for no memory and block interrupt input.. */
722 void *
723 xmalloc (size_t size)
725 void *val;
727 MALLOC_BLOCK_INPUT;
728 val = malloc (size);
729 MALLOC_UNBLOCK_INPUT;
731 if (!val && size)
732 memory_full (size);
733 return val;
737 /* Like realloc but check for no memory and block interrupt input.. */
739 void *
740 xrealloc (void *block, size_t size)
742 void *val;
744 MALLOC_BLOCK_INPUT;
745 /* We must call malloc explicitly when BLOCK is 0, since some
746 reallocs don't do this. */
747 if (! block)
748 val = malloc (size);
749 else
750 val = realloc (block, size);
751 MALLOC_UNBLOCK_INPUT;
753 if (!val && size)
754 memory_full (size);
755 return val;
759 /* Like free but block interrupt input. */
761 void
762 xfree (void *block)
764 if (!block)
765 return;
766 MALLOC_BLOCK_INPUT;
767 free (block);
768 MALLOC_UNBLOCK_INPUT;
769 /* We don't call refill_memory_reserve here
770 because that duplicates doing so in emacs_blocked_free
771 and the criterion should go there. */
775 /* Other parts of Emacs pass large int values to allocator functions
776 expecting ptrdiff_t. This is portable in practice, but check it to
777 be safe. */
778 verify (INT_MAX <= PTRDIFF_MAX);
781 /* Allocate an array of NITEMS items, each of size ITEM_SIZE.
782 Signal an error on memory exhaustion, and block interrupt input. */
784 void *
785 xnmalloc (ptrdiff_t nitems, ptrdiff_t item_size)
787 xassert (0 <= nitems && 0 < item_size);
788 if (min (PTRDIFF_MAX, SIZE_MAX) / item_size < nitems)
789 memory_full (SIZE_MAX);
790 return xmalloc (nitems * item_size);
794 /* Reallocate an array PA to make it of NITEMS items, each of size ITEM_SIZE.
795 Signal an error on memory exhaustion, and block interrupt input. */
797 void *
798 xnrealloc (void *pa, ptrdiff_t nitems, ptrdiff_t item_size)
800 xassert (0 <= nitems && 0 < item_size);
801 if (min (PTRDIFF_MAX, SIZE_MAX) / item_size < nitems)
802 memory_full (SIZE_MAX);
803 return xrealloc (pa, nitems * item_size);
807 /* Grow PA, which points to an array of *NITEMS items, and return the
808 location of the reallocated array, updating *NITEMS to reflect its
809 new size. The new array will contain at least NITEMS_INCR_MIN more
810 items, but will not contain more than NITEMS_MAX items total.
811 ITEM_SIZE is the size of each item, in bytes.
813 ITEM_SIZE and NITEMS_INCR_MIN must be positive. *NITEMS must be
814 nonnegative. If NITEMS_MAX is -1, it is treated as if it were
815 infinity.
817 If PA is null, then allocate a new array instead of reallocating
818 the old one. Thus, to grow an array A without saving its old
819 contents, invoke xfree (A) immediately followed by xgrowalloc (0,
820 &NITEMS, ...).
822 Block interrupt input as needed. If memory exhaustion occurs, set
823 *NITEMS to zero if PA is null, and signal an error (i.e., do not
824 return). */
826 void *
827 xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
828 ptrdiff_t nitems_max, ptrdiff_t item_size)
830 /* The approximate size to use for initial small allocation
831 requests. This is the largest "small" request for the GNU C
832 library malloc. */
833 enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
835 /* If the array is tiny, grow it to about (but no greater than)
836 DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%. */
837 ptrdiff_t n = *nitems;
838 ptrdiff_t tiny_max = DEFAULT_MXFAST / item_size - n;
839 ptrdiff_t half_again = n >> 1;
840 ptrdiff_t incr_estimate = max (tiny_max, half_again);
842 /* Adjust the increment according to three constraints: NITEMS_INCR_MIN,
843 NITEMS_MAX, and what the C language can represent safely. */
844 ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / item_size;
845 ptrdiff_t n_max = (0 <= nitems_max && nitems_max < C_language_max
846 ? nitems_max : C_language_max);
847 ptrdiff_t nitems_incr_max = n_max - n;
848 ptrdiff_t incr = max (nitems_incr_min, min (incr_estimate, nitems_incr_max));
850 xassert (0 < item_size && 0 < nitems_incr_min && 0 <= n && -1 <= nitems_max);
851 if (! pa)
852 *nitems = 0;
853 if (nitems_incr_max < incr)
854 memory_full (SIZE_MAX);
855 n += incr;
856 pa = xrealloc (pa, n * item_size);
857 *nitems = n;
858 return pa;
862 /* Like strdup, but uses xmalloc. */
864 char *
865 xstrdup (const char *s)
867 size_t len = strlen (s) + 1;
868 char *p = (char *) xmalloc (len);
869 memcpy (p, s, len);
870 return p;
874 /* Unwind for SAFE_ALLOCA */
876 Lisp_Object
877 safe_alloca_unwind (Lisp_Object arg)
879 register struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
881 p->dogc = 0;
882 xfree (p->pointer);
883 p->pointer = 0;
884 free_misc (arg);
885 return Qnil;
889 /* Like malloc but used for allocating Lisp data. NBYTES is the
890 number of bytes to allocate, TYPE describes the intended use of the
891 allocated memory block (for strings, for conses, ...). */
893 #ifndef USE_LSB_TAG
894 static void *lisp_malloc_loser;
895 #endif
897 static void *
898 lisp_malloc (size_t nbytes, enum mem_type type)
900 register void *val;
902 MALLOC_BLOCK_INPUT;
904 #ifdef GC_MALLOC_CHECK
905 allocated_mem_type = type;
906 #endif
908 val = (void *) malloc (nbytes);
910 #ifndef USE_LSB_TAG
911 /* If the memory just allocated cannot be addressed thru a Lisp
912 object's pointer, and it needs to be,
913 that's equivalent to running out of memory. */
914 if (val && type != MEM_TYPE_NON_LISP)
916 Lisp_Object tem;
917 XSETCONS (tem, (char *) val + nbytes - 1);
918 if ((char *) XCONS (tem) != (char *) val + nbytes - 1)
920 lisp_malloc_loser = val;
921 free (val);
922 val = 0;
925 #endif
927 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
928 if (val && type != MEM_TYPE_NON_LISP)
929 mem_insert (val, (char *) val + nbytes, type);
930 #endif
932 MALLOC_UNBLOCK_INPUT;
933 if (!val && nbytes)
934 memory_full (nbytes);
935 return val;
938 /* Free BLOCK. This must be called to free memory allocated with a
939 call to lisp_malloc. */
941 static void
942 lisp_free (void *block)
944 MALLOC_BLOCK_INPUT;
945 free (block);
946 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
947 mem_delete (mem_find (block));
948 #endif
949 MALLOC_UNBLOCK_INPUT;
952 /***** Allocation of aligned blocks of memory to store Lisp data. *****/
954 /* The entry point is lisp_align_malloc which returns blocks of at most
955 BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */
957 #if defined (HAVE_POSIX_MEMALIGN) && defined (SYSTEM_MALLOC)
958 #define USE_POSIX_MEMALIGN 1
959 #endif
961 /* BLOCK_ALIGN has to be a power of 2. */
962 #define BLOCK_ALIGN (1 << 10)
964 /* Padding to leave at the end of a malloc'd block. This is to give
965 malloc a chance to minimize the amount of memory wasted to alignment.
966 It should be tuned to the particular malloc library used.
967 On glibc-2.3.2, malloc never tries to align, so a padding of 0 is best.
968 posix_memalign on the other hand would ideally prefer a value of 4
969 because otherwise, there's 1020 bytes wasted between each ablocks.
970 In Emacs, testing shows that those 1020 can most of the time be
971 efficiently used by malloc to place other objects, so a value of 0 can
972 still preferable unless you have a lot of aligned blocks and virtually
973 nothing else. */
974 #define BLOCK_PADDING 0
975 #define BLOCK_BYTES \
976 (BLOCK_ALIGN - sizeof (struct ablocks *) - BLOCK_PADDING)
978 /* Internal data structures and constants. */
980 #define ABLOCKS_SIZE 16
982 /* An aligned block of memory. */
983 struct ablock
985 union
987 char payload[BLOCK_BYTES];
988 struct ablock *next_free;
989 } x;
990 /* `abase' is the aligned base of the ablocks. */
991 /* It is overloaded to hold the virtual `busy' field that counts
992 the number of used ablock in the parent ablocks.
993 The first ablock has the `busy' field, the others have the `abase'
994 field. To tell the difference, we assume that pointers will have
995 integer values larger than 2 * ABLOCKS_SIZE. The lowest bit of `busy'
996 is used to tell whether the real base of the parent ablocks is `abase'
997 (if not, the word before the first ablock holds a pointer to the
998 real base). */
999 struct ablocks *abase;
1000 /* The padding of all but the last ablock is unused. The padding of
1001 the last ablock in an ablocks is not allocated. */
1002 #if BLOCK_PADDING
1003 char padding[BLOCK_PADDING];
1004 #endif
1007 /* A bunch of consecutive aligned blocks. */
1008 struct ablocks
1010 struct ablock blocks[ABLOCKS_SIZE];
1013 /* Size of the block requested from malloc or posix_memalign. */
1014 #define ABLOCKS_BYTES (sizeof (struct ablocks) - BLOCK_PADDING)
1016 #define ABLOCK_ABASE(block) \
1017 (((uintptr_t) (block)->abase) <= (1 + 2 * ABLOCKS_SIZE) \
1018 ? (struct ablocks *)(block) \
1019 : (block)->abase)
1021 /* Virtual `busy' field. */
1022 #define ABLOCKS_BUSY(abase) ((abase)->blocks[0].abase)
1024 /* Pointer to the (not necessarily aligned) malloc block. */
1025 #ifdef USE_POSIX_MEMALIGN
1026 #define ABLOCKS_BASE(abase) (abase)
1027 #else
1028 #define ABLOCKS_BASE(abase) \
1029 (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void**)abase)[-1])
1030 #endif
1032 /* The list of free ablock. */
1033 static struct ablock *free_ablock;
1035 /* Allocate an aligned block of nbytes.
1036 Alignment is on a multiple of BLOCK_ALIGN and `nbytes' has to be
1037 smaller or equal to BLOCK_BYTES. */
1038 static void *
1039 lisp_align_malloc (size_t nbytes, enum mem_type type)
1041 void *base, *val;
1042 struct ablocks *abase;
1044 eassert (nbytes <= BLOCK_BYTES);
1046 MALLOC_BLOCK_INPUT;
1048 #ifdef GC_MALLOC_CHECK
1049 allocated_mem_type = type;
1050 #endif
1052 if (!free_ablock)
1054 int i;
1055 intptr_t aligned; /* int gets warning casting to 64-bit pointer. */
1057 #ifdef DOUG_LEA_MALLOC
1058 /* Prevent mmap'ing the chunk. Lisp data may not be mmap'ed
1059 because mapped region contents are not preserved in
1060 a dumped Emacs. */
1061 mallopt (M_MMAP_MAX, 0);
1062 #endif
1064 #ifdef USE_POSIX_MEMALIGN
1066 int err = posix_memalign (&base, BLOCK_ALIGN, ABLOCKS_BYTES);
1067 if (err)
1068 base = NULL;
1069 abase = base;
1071 #else
1072 base = malloc (ABLOCKS_BYTES);
1073 abase = ALIGN (base, BLOCK_ALIGN);
1074 #endif
1076 if (base == 0)
1078 MALLOC_UNBLOCK_INPUT;
1079 memory_full (ABLOCKS_BYTES);
1082 aligned = (base == abase);
1083 if (!aligned)
1084 ((void**)abase)[-1] = base;
1086 #ifdef DOUG_LEA_MALLOC
1087 /* Back to a reasonable maximum of mmap'ed areas. */
1088 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1089 #endif
1091 #ifndef USE_LSB_TAG
1092 /* If the memory just allocated cannot be addressed thru a Lisp
1093 object's pointer, and it needs to be, that's equivalent to
1094 running out of memory. */
1095 if (type != MEM_TYPE_NON_LISP)
1097 Lisp_Object tem;
1098 char *end = (char *) base + ABLOCKS_BYTES - 1;
1099 XSETCONS (tem, end);
1100 if ((char *) XCONS (tem) != end)
1102 lisp_malloc_loser = base;
1103 free (base);
1104 MALLOC_UNBLOCK_INPUT;
1105 memory_full (SIZE_MAX);
1108 #endif
1110 /* Initialize the blocks and put them on the free list.
1111 If `base' was not properly aligned, we can't use the last block. */
1112 for (i = 0; i < (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1); i++)
1114 abase->blocks[i].abase = abase;
1115 abase->blocks[i].x.next_free = free_ablock;
1116 free_ablock = &abase->blocks[i];
1118 ABLOCKS_BUSY (abase) = (struct ablocks *) aligned;
1120 eassert (0 == ((uintptr_t) abase) % BLOCK_ALIGN);
1121 eassert (ABLOCK_ABASE (&abase->blocks[3]) == abase); /* 3 is arbitrary */
1122 eassert (ABLOCK_ABASE (&abase->blocks[0]) == abase);
1123 eassert (ABLOCKS_BASE (abase) == base);
1124 eassert (aligned == (intptr_t) ABLOCKS_BUSY (abase));
1127 abase = ABLOCK_ABASE (free_ablock);
1128 ABLOCKS_BUSY (abase) =
1129 (struct ablocks *) (2 + (intptr_t) ABLOCKS_BUSY (abase));
1130 val = free_ablock;
1131 free_ablock = free_ablock->x.next_free;
1133 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
1134 if (type != MEM_TYPE_NON_LISP)
1135 mem_insert (val, (char *) val + nbytes, type);
1136 #endif
1138 MALLOC_UNBLOCK_INPUT;
1140 eassert (0 == ((uintptr_t) val) % BLOCK_ALIGN);
1141 return val;
1144 static void
1145 lisp_align_free (void *block)
1147 struct ablock *ablock = block;
1148 struct ablocks *abase = ABLOCK_ABASE (ablock);
1150 MALLOC_BLOCK_INPUT;
1151 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
1152 mem_delete (mem_find (block));
1153 #endif
1154 /* Put on free list. */
1155 ablock->x.next_free = free_ablock;
1156 free_ablock = ablock;
1157 /* Update busy count. */
1158 ABLOCKS_BUSY (abase)
1159 = (struct ablocks *) (-2 + (intptr_t) ABLOCKS_BUSY (abase));
1161 if (2 > (intptr_t) ABLOCKS_BUSY (abase))
1162 { /* All the blocks are free. */
1163 int i = 0, aligned = (intptr_t) ABLOCKS_BUSY (abase);
1164 struct ablock **tem = &free_ablock;
1165 struct ablock *atop = &abase->blocks[aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1];
1167 while (*tem)
1169 if (*tem >= (struct ablock *) abase && *tem < atop)
1171 i++;
1172 *tem = (*tem)->x.next_free;
1174 else
1175 tem = &(*tem)->x.next_free;
1177 eassert ((aligned & 1) == aligned);
1178 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1179 #ifdef USE_POSIX_MEMALIGN
1180 eassert ((uintptr_t) ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1181 #endif
1182 free (ABLOCKS_BASE (abase));
1184 MALLOC_UNBLOCK_INPUT;
1187 /* Return a new buffer structure allocated from the heap with
1188 a call to lisp_malloc. */
1190 struct buffer *
1191 allocate_buffer (void)
1193 struct buffer *b
1194 = (struct buffer *) lisp_malloc (sizeof (struct buffer),
1195 MEM_TYPE_BUFFER);
1196 XSETPVECTYPESIZE (b, PVEC_BUFFER,
1197 ((sizeof (struct buffer) + sizeof (EMACS_INT) - 1)
1198 / sizeof (EMACS_INT)));
1199 return b;
1203 #ifndef SYSTEM_MALLOC
1205 /* Arranging to disable input signals while we're in malloc.
1207 This only works with GNU malloc. To help out systems which can't
1208 use GNU malloc, all the calls to malloc, realloc, and free
1209 elsewhere in the code should be inside a BLOCK_INPUT/UNBLOCK_INPUT
1210 pair; unfortunately, we have no idea what C library functions
1211 might call malloc, so we can't really protect them unless you're
1212 using GNU malloc. Fortunately, most of the major operating systems
1213 can use GNU malloc. */
1215 #ifndef SYNC_INPUT
1216 /* When using SYNC_INPUT, we don't call malloc from a signal handler, so
1217 there's no need to block input around malloc. */
1219 #ifndef DOUG_LEA_MALLOC
1220 extern void * (*__malloc_hook) (size_t, const void *);
1221 extern void * (*__realloc_hook) (void *, size_t, const void *);
1222 extern void (*__free_hook) (void *, const void *);
1223 /* Else declared in malloc.h, perhaps with an extra arg. */
1224 #endif /* DOUG_LEA_MALLOC */
1225 static void * (*old_malloc_hook) (size_t, const void *);
1226 static void * (*old_realloc_hook) (void *, size_t, const void*);
1227 static void (*old_free_hook) (void*, const void*);
1229 #ifdef DOUG_LEA_MALLOC
1230 # define BYTES_USED (mallinfo ().uordblks)
1231 #else
1232 # define BYTES_USED _bytes_used
1233 #endif
1235 #ifdef GC_MALLOC_CHECK
1236 static int dont_register_blocks;
1237 #endif
1239 static size_t bytes_used_when_reconsidered;
1241 /* Value of _bytes_used, when spare_memory was freed. */
1243 static size_t bytes_used_when_full;
1245 /* This function is used as the hook for free to call. */
1247 static void
1248 emacs_blocked_free (void *ptr, const void *ptr2)
1250 BLOCK_INPUT_ALLOC;
1252 #ifdef GC_MALLOC_CHECK
1253 if (ptr)
1255 struct mem_node *m;
1257 m = mem_find (ptr);
1258 if (m == MEM_NIL || m->start != ptr)
1260 fprintf (stderr,
1261 "Freeing `%p' which wasn't allocated with malloc\n", ptr);
1262 abort ();
1264 else
1266 /* fprintf (stderr, "free %p...%p (%p)\n", m->start, m->end, ptr); */
1267 mem_delete (m);
1270 #endif /* GC_MALLOC_CHECK */
1272 __free_hook = old_free_hook;
1273 free (ptr);
1275 /* If we released our reserve (due to running out of memory),
1276 and we have a fair amount free once again,
1277 try to set aside another reserve in case we run out once more. */
1278 if (! NILP (Vmemory_full)
1279 /* Verify there is enough space that even with the malloc
1280 hysteresis this call won't run out again.
1281 The code here is correct as long as SPARE_MEMORY
1282 is substantially larger than the block size malloc uses. */
1283 && (bytes_used_when_full
1284 > ((bytes_used_when_reconsidered = BYTES_USED)
1285 + max (malloc_hysteresis, 4) * SPARE_MEMORY)))
1286 refill_memory_reserve ();
1288 __free_hook = emacs_blocked_free;
1289 UNBLOCK_INPUT_ALLOC;
1293 /* This function is the malloc hook that Emacs uses. */
1295 static void *
1296 emacs_blocked_malloc (size_t size, const void *ptr)
1298 void *value;
1300 BLOCK_INPUT_ALLOC;
1301 __malloc_hook = old_malloc_hook;
1302 #ifdef DOUG_LEA_MALLOC
1303 /* Segfaults on my system. --lorentey */
1304 /* mallopt (M_TOP_PAD, malloc_hysteresis * 4096); */
1305 #else
1306 __malloc_extra_blocks = malloc_hysteresis;
1307 #endif
1309 value = (void *) malloc (size);
1311 #ifdef GC_MALLOC_CHECK
1313 struct mem_node *m = mem_find (value);
1314 if (m != MEM_NIL)
1316 fprintf (stderr, "Malloc returned %p which is already in use\n",
1317 value);
1318 fprintf (stderr, "Region in use is %p...%p, %td bytes, type %d\n",
1319 m->start, m->end, (char *) m->end - (char *) m->start,
1320 m->type);
1321 abort ();
1324 if (!dont_register_blocks)
1326 mem_insert (value, (char *) value + max (1, size), allocated_mem_type);
1327 allocated_mem_type = MEM_TYPE_NON_LISP;
1330 #endif /* GC_MALLOC_CHECK */
1332 __malloc_hook = emacs_blocked_malloc;
1333 UNBLOCK_INPUT_ALLOC;
1335 /* fprintf (stderr, "%p malloc\n", value); */
1336 return value;
1340 /* This function is the realloc hook that Emacs uses. */
1342 static void *
1343 emacs_blocked_realloc (void *ptr, size_t size, const void *ptr2)
1345 void *value;
1347 BLOCK_INPUT_ALLOC;
1348 __realloc_hook = old_realloc_hook;
1350 #ifdef GC_MALLOC_CHECK
1351 if (ptr)
1353 struct mem_node *m = mem_find (ptr);
1354 if (m == MEM_NIL || m->start != ptr)
1356 fprintf (stderr,
1357 "Realloc of %p which wasn't allocated with malloc\n",
1358 ptr);
1359 abort ();
1362 mem_delete (m);
1365 /* fprintf (stderr, "%p -> realloc\n", ptr); */
1367 /* Prevent malloc from registering blocks. */
1368 dont_register_blocks = 1;
1369 #endif /* GC_MALLOC_CHECK */
1371 value = (void *) realloc (ptr, size);
1373 #ifdef GC_MALLOC_CHECK
1374 dont_register_blocks = 0;
1377 struct mem_node *m = mem_find (value);
1378 if (m != MEM_NIL)
1380 fprintf (stderr, "Realloc returns memory that is already in use\n");
1381 abort ();
1384 /* Can't handle zero size regions in the red-black tree. */
1385 mem_insert (value, (char *) value + max (size, 1), MEM_TYPE_NON_LISP);
1388 /* fprintf (stderr, "%p <- realloc\n", value); */
1389 #endif /* GC_MALLOC_CHECK */
1391 __realloc_hook = emacs_blocked_realloc;
1392 UNBLOCK_INPUT_ALLOC;
1394 return value;
1398 #ifdef HAVE_PTHREAD
1399 /* Called from Fdump_emacs so that when the dumped Emacs starts, it has a
1400 normal malloc. Some thread implementations need this as they call
1401 malloc before main. The pthread_self call in BLOCK_INPUT_ALLOC then
1402 calls malloc because it is the first call, and we have an endless loop. */
1404 void
1405 reset_malloc_hooks (void)
1407 __free_hook = old_free_hook;
1408 __malloc_hook = old_malloc_hook;
1409 __realloc_hook = old_realloc_hook;
1411 #endif /* HAVE_PTHREAD */
1414 /* Called from main to set up malloc to use our hooks. */
1416 void
1417 uninterrupt_malloc (void)
1419 #ifdef HAVE_PTHREAD
1420 #ifdef DOUG_LEA_MALLOC
1421 pthread_mutexattr_t attr;
1423 /* GLIBC has a faster way to do this, but let's keep it portable.
1424 This is according to the Single UNIX Specification. */
1425 pthread_mutexattr_init (&attr);
1426 pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
1427 pthread_mutex_init (&alloc_mutex, &attr);
1428 #else /* !DOUG_LEA_MALLOC */
1429 /* Some systems such as Solaris 2.6 don't have a recursive mutex,
1430 and the bundled gmalloc.c doesn't require it. */
1431 pthread_mutex_init (&alloc_mutex, NULL);
1432 #endif /* !DOUG_LEA_MALLOC */
1433 #endif /* HAVE_PTHREAD */
1435 if (__free_hook != emacs_blocked_free)
1436 old_free_hook = __free_hook;
1437 __free_hook = emacs_blocked_free;
1439 if (__malloc_hook != emacs_blocked_malloc)
1440 old_malloc_hook = __malloc_hook;
1441 __malloc_hook = emacs_blocked_malloc;
1443 if (__realloc_hook != emacs_blocked_realloc)
1444 old_realloc_hook = __realloc_hook;
1445 __realloc_hook = emacs_blocked_realloc;
1448 #endif /* not SYNC_INPUT */
1449 #endif /* not SYSTEM_MALLOC */
1453 /***********************************************************************
1454 Interval Allocation
1455 ***********************************************************************/
1457 /* Number of intervals allocated in an interval_block structure.
1458 The 1020 is 1024 minus malloc overhead. */
1460 #define INTERVAL_BLOCK_SIZE \
1461 ((1020 - sizeof (struct interval_block *)) / sizeof (struct interval))
1463 /* Intervals are allocated in chunks in form of an interval_block
1464 structure. */
1466 struct interval_block
1468 /* Place `intervals' first, to preserve alignment. */
1469 struct interval intervals[INTERVAL_BLOCK_SIZE];
1470 struct interval_block *next;
1473 /* Current interval block. Its `next' pointer points to older
1474 blocks. */
1476 static struct interval_block *interval_block;
1478 /* Index in interval_block above of the next unused interval
1479 structure. */
1481 static int interval_block_index;
1483 /* Number of free and live intervals. */
1485 static EMACS_INT total_free_intervals, total_intervals;
1487 /* List of free intervals. */
1489 static INTERVAL interval_free_list;
1492 /* Initialize interval allocation. */
1494 static void
1495 init_intervals (void)
1497 interval_block = NULL;
1498 interval_block_index = INTERVAL_BLOCK_SIZE;
1499 interval_free_list = 0;
1503 /* Return a new interval. */
1505 INTERVAL
1506 make_interval (void)
1508 INTERVAL val;
1510 /* eassert (!handling_signal); */
1512 MALLOC_BLOCK_INPUT;
1514 if (interval_free_list)
1516 val = interval_free_list;
1517 interval_free_list = INTERVAL_PARENT (interval_free_list);
1519 else
1521 if (interval_block_index == INTERVAL_BLOCK_SIZE)
1523 register struct interval_block *newi;
1525 newi = (struct interval_block *) lisp_malloc (sizeof *newi,
1526 MEM_TYPE_NON_LISP);
1528 newi->next = interval_block;
1529 interval_block = newi;
1530 interval_block_index = 0;
1532 val = &interval_block->intervals[interval_block_index++];
1535 MALLOC_UNBLOCK_INPUT;
1537 consing_since_gc += sizeof (struct interval);
1538 intervals_consed++;
1539 RESET_INTERVAL (val);
1540 val->gcmarkbit = 0;
1541 return val;
1545 /* Mark Lisp objects in interval I. */
1547 static void
1548 mark_interval (register INTERVAL i, Lisp_Object dummy)
1550 eassert (!i->gcmarkbit); /* Intervals are never shared. */
1551 i->gcmarkbit = 1;
1552 mark_object (i->plist);
1556 /* Mark the interval tree rooted in TREE. Don't call this directly;
1557 use the macro MARK_INTERVAL_TREE instead. */
1559 static void
1560 mark_interval_tree (register INTERVAL tree)
1562 /* No need to test if this tree has been marked already; this
1563 function is always called through the MARK_INTERVAL_TREE macro,
1564 which takes care of that. */
1566 traverse_intervals_noorder (tree, mark_interval, Qnil);
1570 /* Mark the interval tree rooted in I. */
1572 #define MARK_INTERVAL_TREE(i) \
1573 do { \
1574 if (!NULL_INTERVAL_P (i) && !i->gcmarkbit) \
1575 mark_interval_tree (i); \
1576 } while (0)
1579 #define UNMARK_BALANCE_INTERVALS(i) \
1580 do { \
1581 if (! NULL_INTERVAL_P (i)) \
1582 (i) = balance_intervals (i); \
1583 } while (0)
1586 /* Number support. If USE_LISP_UNION_TYPE is in effect, we
1587 can't create number objects in macros. */
1588 #ifndef make_number
1589 Lisp_Object
1590 make_number (EMACS_INT n)
1592 Lisp_Object obj;
1593 obj.s.val = n;
1594 obj.s.type = Lisp_Int;
1595 return obj;
1597 #endif
1599 /* Convert the pointer-sized word P to EMACS_INT while preserving its
1600 type and ptr fields. */
1601 static Lisp_Object
1602 widen_to_Lisp_Object (void *p)
1604 intptr_t i = (intptr_t) p;
1605 #ifdef USE_LISP_UNION_TYPE
1606 Lisp_Object obj;
1607 obj.i = i;
1608 return obj;
1609 #else
1610 return i;
1611 #endif
1614 /***********************************************************************
1615 String Allocation
1616 ***********************************************************************/
1618 /* Lisp_Strings are allocated in string_block structures. When a new
1619 string_block is allocated, all the Lisp_Strings it contains are
1620 added to a free-list string_free_list. When a new Lisp_String is
1621 needed, it is taken from that list. During the sweep phase of GC,
1622 string_blocks that are entirely free are freed, except two which
1623 we keep.
1625 String data is allocated from sblock structures. Strings larger
1626 than LARGE_STRING_BYTES, get their own sblock, data for smaller
1627 strings is sub-allocated out of sblocks of size SBLOCK_SIZE.
1629 Sblocks consist internally of sdata structures, one for each
1630 Lisp_String. The sdata structure points to the Lisp_String it
1631 belongs to. The Lisp_String points back to the `u.data' member of
1632 its sdata structure.
1634 When a Lisp_String is freed during GC, it is put back on
1635 string_free_list, and its `data' member and its sdata's `string'
1636 pointer is set to null. The size of the string is recorded in the
1637 `u.nbytes' member of the sdata. So, sdata structures that are no
1638 longer used, can be easily recognized, and it's easy to compact the
1639 sblocks of small strings which we do in compact_small_strings. */
1641 /* Size in bytes of an sblock structure used for small strings. This
1642 is 8192 minus malloc overhead. */
1644 #define SBLOCK_SIZE 8188
1646 /* Strings larger than this are considered large strings. String data
1647 for large strings is allocated from individual sblocks. */
1649 #define LARGE_STRING_BYTES 1024
1651 /* Structure describing string memory sub-allocated from an sblock.
1652 This is where the contents of Lisp strings are stored. */
1654 struct sdata
1656 /* Back-pointer to the string this sdata belongs to. If null, this
1657 structure is free, and the NBYTES member of the union below
1658 contains the string's byte size (the same value that STRING_BYTES
1659 would return if STRING were non-null). If non-null, STRING_BYTES
1660 (STRING) is the size of the data, and DATA contains the string's
1661 contents. */
1662 struct Lisp_String *string;
1664 #ifdef GC_CHECK_STRING_BYTES
1666 ptrdiff_t nbytes;
1667 unsigned char data[1];
1669 #define SDATA_NBYTES(S) (S)->nbytes
1670 #define SDATA_DATA(S) (S)->data
1671 #define SDATA_SELECTOR(member) member
1673 #else /* not GC_CHECK_STRING_BYTES */
1675 union
1677 /* When STRING is non-null. */
1678 unsigned char data[1];
1680 /* When STRING is null. */
1681 ptrdiff_t nbytes;
1682 } u;
1684 #define SDATA_NBYTES(S) (S)->u.nbytes
1685 #define SDATA_DATA(S) (S)->u.data
1686 #define SDATA_SELECTOR(member) u.member
1688 #endif /* not GC_CHECK_STRING_BYTES */
1690 #define SDATA_DATA_OFFSET offsetof (struct sdata, SDATA_SELECTOR (data))
1694 /* Structure describing a block of memory which is sub-allocated to
1695 obtain string data memory for strings. Blocks for small strings
1696 are of fixed size SBLOCK_SIZE. Blocks for large strings are made
1697 as large as needed. */
1699 struct sblock
1701 /* Next in list. */
1702 struct sblock *next;
1704 /* Pointer to the next free sdata block. This points past the end
1705 of the sblock if there isn't any space left in this block. */
1706 struct sdata *next_free;
1708 /* Start of data. */
1709 struct sdata first_data;
1712 /* Number of Lisp strings in a string_block structure. The 1020 is
1713 1024 minus malloc overhead. */
1715 #define STRING_BLOCK_SIZE \
1716 ((1020 - sizeof (struct string_block *)) / sizeof (struct Lisp_String))
1718 /* Structure describing a block from which Lisp_String structures
1719 are allocated. */
1721 struct string_block
1723 /* Place `strings' first, to preserve alignment. */
1724 struct Lisp_String strings[STRING_BLOCK_SIZE];
1725 struct string_block *next;
1728 /* Head and tail of the list of sblock structures holding Lisp string
1729 data. We always allocate from current_sblock. The NEXT pointers
1730 in the sblock structures go from oldest_sblock to current_sblock. */
1732 static struct sblock *oldest_sblock, *current_sblock;
1734 /* List of sblocks for large strings. */
1736 static struct sblock *large_sblocks;
1738 /* List of string_block structures. */
1740 static struct string_block *string_blocks;
1742 /* Free-list of Lisp_Strings. */
1744 static struct Lisp_String *string_free_list;
1746 /* Number of live and free Lisp_Strings. */
1748 static EMACS_INT total_strings, total_free_strings;
1750 /* Number of bytes used by live strings. */
1752 static EMACS_INT total_string_size;
1754 /* Given a pointer to a Lisp_String S which is on the free-list
1755 string_free_list, return a pointer to its successor in the
1756 free-list. */
1758 #define NEXT_FREE_LISP_STRING(S) (*(struct Lisp_String **) (S))
1760 /* Return a pointer to the sdata structure belonging to Lisp string S.
1761 S must be live, i.e. S->data must not be null. S->data is actually
1762 a pointer to the `u.data' member of its sdata structure; the
1763 structure starts at a constant offset in front of that. */
1765 #define SDATA_OF_STRING(S) ((struct sdata *) ((S)->data - SDATA_DATA_OFFSET))
1768 #ifdef GC_CHECK_STRING_OVERRUN
1770 /* We check for overrun in string data blocks by appending a small
1771 "cookie" after each allocated string data block, and check for the
1772 presence of this cookie during GC. */
1774 #define GC_STRING_OVERRUN_COOKIE_SIZE 4
1775 static char const string_overrun_cookie[GC_STRING_OVERRUN_COOKIE_SIZE] =
1776 { '\xde', '\xad', '\xbe', '\xef' };
1778 #else
1779 #define GC_STRING_OVERRUN_COOKIE_SIZE 0
1780 #endif
1782 /* Value is the size of an sdata structure large enough to hold NBYTES
1783 bytes of string data. The value returned includes a terminating
1784 NUL byte, the size of the sdata structure, and padding. */
1786 #ifdef GC_CHECK_STRING_BYTES
1788 #define SDATA_SIZE(NBYTES) \
1789 ((SDATA_DATA_OFFSET \
1790 + (NBYTES) + 1 \
1791 + sizeof (ptrdiff_t) - 1) \
1792 & ~(sizeof (ptrdiff_t) - 1))
1794 #else /* not GC_CHECK_STRING_BYTES */
1796 /* The 'max' reserves space for the nbytes union member even when NBYTES + 1 is
1797 less than the size of that member. The 'max' is not needed when
1798 SDATA_DATA_OFFSET is a multiple of sizeof (ptrdiff_t), because then the
1799 alignment code reserves enough space. */
1801 #define SDATA_SIZE(NBYTES) \
1802 ((SDATA_DATA_OFFSET \
1803 + (SDATA_DATA_OFFSET % sizeof (ptrdiff_t) == 0 \
1804 ? NBYTES \
1805 : max (NBYTES, sizeof (ptrdiff_t) - 1)) \
1806 + 1 \
1807 + sizeof (ptrdiff_t) - 1) \
1808 & ~(sizeof (ptrdiff_t) - 1))
1810 #endif /* not GC_CHECK_STRING_BYTES */
1812 /* Extra bytes to allocate for each string. */
1814 #define GC_STRING_EXTRA (GC_STRING_OVERRUN_COOKIE_SIZE)
1816 /* Exact bound on the number of bytes in a string, not counting the
1817 terminating null. A string cannot contain more bytes than
1818 STRING_BYTES_BOUND, nor can it be so long that the size_t
1819 arithmetic in allocate_string_data would overflow while it is
1820 calculating a value to be passed to malloc. */
1821 #define STRING_BYTES_MAX \
1822 min (STRING_BYTES_BOUND, \
1823 ((SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD \
1824 - GC_STRING_EXTRA \
1825 - offsetof (struct sblock, first_data) \
1826 - SDATA_DATA_OFFSET) \
1827 & ~(sizeof (EMACS_INT) - 1)))
1829 /* Initialize string allocation. Called from init_alloc_once. */
1831 static void
1832 init_strings (void)
1834 total_strings = total_free_strings = total_string_size = 0;
1835 oldest_sblock = current_sblock = large_sblocks = NULL;
1836 string_blocks = NULL;
1837 string_free_list = NULL;
1838 empty_unibyte_string = make_pure_string ("", 0, 0, 0);
1839 empty_multibyte_string = make_pure_string ("", 0, 0, 1);
1843 #ifdef GC_CHECK_STRING_BYTES
1845 static int check_string_bytes_count;
1847 #define CHECK_STRING_BYTES(S) STRING_BYTES (S)
1850 /* Like GC_STRING_BYTES, but with debugging check. */
1852 ptrdiff_t
1853 string_bytes (struct Lisp_String *s)
1855 ptrdiff_t nbytes =
1856 (s->size_byte < 0 ? s->size & ~ARRAY_MARK_FLAG : s->size_byte);
1858 if (!PURE_POINTER_P (s)
1859 && s->data
1860 && nbytes != SDATA_NBYTES (SDATA_OF_STRING (s)))
1861 abort ();
1862 return nbytes;
1865 /* Check validity of Lisp strings' string_bytes member in B. */
1867 static void
1868 check_sblock (struct sblock *b)
1870 struct sdata *from, *end, *from_end;
1872 end = b->next_free;
1874 for (from = &b->first_data; from < end; from = from_end)
1876 /* Compute the next FROM here because copying below may
1877 overwrite data we need to compute it. */
1878 ptrdiff_t nbytes;
1880 /* Check that the string size recorded in the string is the
1881 same as the one recorded in the sdata structure. */
1882 if (from->string)
1883 CHECK_STRING_BYTES (from->string);
1885 if (from->string)
1886 nbytes = GC_STRING_BYTES (from->string);
1887 else
1888 nbytes = SDATA_NBYTES (from);
1890 nbytes = SDATA_SIZE (nbytes);
1891 from_end = (struct sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
1896 /* Check validity of Lisp strings' string_bytes member. ALL_P
1897 non-zero means check all strings, otherwise check only most
1898 recently allocated strings. Used for hunting a bug. */
1900 static void
1901 check_string_bytes (int all_p)
1903 if (all_p)
1905 struct sblock *b;
1907 for (b = large_sblocks; b; b = b->next)
1909 struct Lisp_String *s = b->first_data.string;
1910 if (s)
1911 CHECK_STRING_BYTES (s);
1914 for (b = oldest_sblock; b; b = b->next)
1915 check_sblock (b);
1917 else
1918 check_sblock (current_sblock);
1921 #endif /* GC_CHECK_STRING_BYTES */
1923 #ifdef GC_CHECK_STRING_FREE_LIST
1925 /* Walk through the string free list looking for bogus next pointers.
1926 This may catch buffer overrun from a previous string. */
1928 static void
1929 check_string_free_list (void)
1931 struct Lisp_String *s;
1933 /* Pop a Lisp_String off the free-list. */
1934 s = string_free_list;
1935 while (s != NULL)
1937 if ((uintptr_t) s < 1024)
1938 abort ();
1939 s = NEXT_FREE_LISP_STRING (s);
1942 #else
1943 #define check_string_free_list()
1944 #endif
1946 /* Return a new Lisp_String. */
1948 static struct Lisp_String *
1949 allocate_string (void)
1951 struct Lisp_String *s;
1953 /* eassert (!handling_signal); */
1955 MALLOC_BLOCK_INPUT;
1957 /* If the free-list is empty, allocate a new string_block, and
1958 add all the Lisp_Strings in it to the free-list. */
1959 if (string_free_list == NULL)
1961 struct string_block *b;
1962 int i;
1964 b = (struct string_block *) lisp_malloc (sizeof *b, MEM_TYPE_STRING);
1965 memset (b, 0, sizeof *b);
1966 b->next = string_blocks;
1967 string_blocks = b;
1969 for (i = STRING_BLOCK_SIZE - 1; i >= 0; --i)
1971 s = b->strings + i;
1972 NEXT_FREE_LISP_STRING (s) = string_free_list;
1973 string_free_list = s;
1976 total_free_strings += STRING_BLOCK_SIZE;
1979 check_string_free_list ();
1981 /* Pop a Lisp_String off the free-list. */
1982 s = string_free_list;
1983 string_free_list = NEXT_FREE_LISP_STRING (s);
1985 MALLOC_UNBLOCK_INPUT;
1987 /* Probably not strictly necessary, but play it safe. */
1988 memset (s, 0, sizeof *s);
1990 --total_free_strings;
1991 ++total_strings;
1992 ++strings_consed;
1993 consing_since_gc += sizeof *s;
1995 #ifdef GC_CHECK_STRING_BYTES
1996 if (!noninteractive)
1998 if (++check_string_bytes_count == 200)
2000 check_string_bytes_count = 0;
2001 check_string_bytes (1);
2003 else
2004 check_string_bytes (0);
2006 #endif /* GC_CHECK_STRING_BYTES */
2008 return s;
2012 /* Set up Lisp_String S for holding NCHARS characters, NBYTES bytes,
2013 plus a NUL byte at the end. Allocate an sdata structure for S, and
2014 set S->data to its `u.data' member. Store a NUL byte at the end of
2015 S->data. Set S->size to NCHARS and S->size_byte to NBYTES. Free
2016 S->data if it was initially non-null. */
2018 void
2019 allocate_string_data (struct Lisp_String *s,
2020 EMACS_INT nchars, EMACS_INT nbytes)
2022 struct sdata *data, *old_data;
2023 struct sblock *b;
2024 ptrdiff_t needed, old_nbytes;
2026 if (STRING_BYTES_MAX < nbytes)
2027 string_overflow ();
2029 /* Determine the number of bytes needed to store NBYTES bytes
2030 of string data. */
2031 needed = SDATA_SIZE (nbytes);
2032 old_data = s->data ? SDATA_OF_STRING (s) : NULL;
2033 old_nbytes = GC_STRING_BYTES (s);
2035 MALLOC_BLOCK_INPUT;
2037 if (nbytes > LARGE_STRING_BYTES)
2039 size_t size = offsetof (struct sblock, first_data) + needed;
2041 #ifdef DOUG_LEA_MALLOC
2042 /* Prevent mmap'ing the chunk. Lisp data may not be mmap'ed
2043 because mapped region contents are not preserved in
2044 a dumped Emacs.
2046 In case you think of allowing it in a dumped Emacs at the
2047 cost of not being able to re-dump, there's another reason:
2048 mmap'ed data typically have an address towards the top of the
2049 address space, which won't fit into an EMACS_INT (at least on
2050 32-bit systems with the current tagging scheme). --fx */
2051 mallopt (M_MMAP_MAX, 0);
2052 #endif
2054 b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
2056 #ifdef DOUG_LEA_MALLOC
2057 /* Back to a reasonable maximum of mmap'ed areas. */
2058 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
2059 #endif
2061 b->next_free = &b->first_data;
2062 b->first_data.string = NULL;
2063 b->next = large_sblocks;
2064 large_sblocks = b;
2066 else if (current_sblock == NULL
2067 || (((char *) current_sblock + SBLOCK_SIZE
2068 - (char *) current_sblock->next_free)
2069 < (needed + GC_STRING_EXTRA)))
2071 /* Not enough room in the current sblock. */
2072 b = (struct sblock *) lisp_malloc (SBLOCK_SIZE, MEM_TYPE_NON_LISP);
2073 b->next_free = &b->first_data;
2074 b->first_data.string = NULL;
2075 b->next = NULL;
2077 if (current_sblock)
2078 current_sblock->next = b;
2079 else
2080 oldest_sblock = b;
2081 current_sblock = b;
2083 else
2084 b = current_sblock;
2086 data = b->next_free;
2087 b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA);
2089 MALLOC_UNBLOCK_INPUT;
2091 data->string = s;
2092 s->data = SDATA_DATA (data);
2093 #ifdef GC_CHECK_STRING_BYTES
2094 SDATA_NBYTES (data) = nbytes;
2095 #endif
2096 s->size = nchars;
2097 s->size_byte = nbytes;
2098 s->data[nbytes] = '\0';
2099 #ifdef GC_CHECK_STRING_OVERRUN
2100 memcpy ((char *) data + needed, string_overrun_cookie,
2101 GC_STRING_OVERRUN_COOKIE_SIZE);
2102 #endif
2104 /* If S had already data assigned, mark that as free by setting its
2105 string back-pointer to null, and recording the size of the data
2106 in it. */
2107 if (old_data)
2109 SDATA_NBYTES (old_data) = old_nbytes;
2110 old_data->string = NULL;
2113 consing_since_gc += needed;
2117 /* Sweep and compact strings. */
2119 static void
2120 sweep_strings (void)
2122 struct string_block *b, *next;
2123 struct string_block *live_blocks = NULL;
2125 string_free_list = NULL;
2126 total_strings = total_free_strings = 0;
2127 total_string_size = 0;
2129 /* Scan strings_blocks, free Lisp_Strings that aren't marked. */
2130 for (b = string_blocks; b; b = next)
2132 int i, nfree = 0;
2133 struct Lisp_String *free_list_before = string_free_list;
2135 next = b->next;
2137 for (i = 0; i < STRING_BLOCK_SIZE; ++i)
2139 struct Lisp_String *s = b->strings + i;
2141 if (s->data)
2143 /* String was not on free-list before. */
2144 if (STRING_MARKED_P (s))
2146 /* String is live; unmark it and its intervals. */
2147 UNMARK_STRING (s);
2149 if (!NULL_INTERVAL_P (s->intervals))
2150 UNMARK_BALANCE_INTERVALS (s->intervals);
2152 ++total_strings;
2153 total_string_size += STRING_BYTES (s);
2155 else
2157 /* String is dead. Put it on the free-list. */
2158 struct sdata *data = SDATA_OF_STRING (s);
2160 /* Save the size of S in its sdata so that we know
2161 how large that is. Reset the sdata's string
2162 back-pointer so that we know it's free. */
2163 #ifdef GC_CHECK_STRING_BYTES
2164 if (GC_STRING_BYTES (s) != SDATA_NBYTES (data))
2165 abort ();
2166 #else
2167 data->u.nbytes = GC_STRING_BYTES (s);
2168 #endif
2169 data->string = NULL;
2171 /* Reset the strings's `data' member so that we
2172 know it's free. */
2173 s->data = NULL;
2175 /* Put the string on the free-list. */
2176 NEXT_FREE_LISP_STRING (s) = string_free_list;
2177 string_free_list = s;
2178 ++nfree;
2181 else
2183 /* S was on the free-list before. Put it there again. */
2184 NEXT_FREE_LISP_STRING (s) = string_free_list;
2185 string_free_list = s;
2186 ++nfree;
2190 /* Free blocks that contain free Lisp_Strings only, except
2191 the first two of them. */
2192 if (nfree == STRING_BLOCK_SIZE
2193 && total_free_strings > STRING_BLOCK_SIZE)
2195 lisp_free (b);
2196 string_free_list = free_list_before;
2198 else
2200 total_free_strings += nfree;
2201 b->next = live_blocks;
2202 live_blocks = b;
2206 check_string_free_list ();
2208 string_blocks = live_blocks;
2209 free_large_strings ();
2210 compact_small_strings ();
2212 check_string_free_list ();
2216 /* Free dead large strings. */
2218 static void
2219 free_large_strings (void)
2221 struct sblock *b, *next;
2222 struct sblock *live_blocks = NULL;
2224 for (b = large_sblocks; b; b = next)
2226 next = b->next;
2228 if (b->first_data.string == NULL)
2229 lisp_free (b);
2230 else
2232 b->next = live_blocks;
2233 live_blocks = b;
2237 large_sblocks = live_blocks;
2241 /* Compact data of small strings. Free sblocks that don't contain
2242 data of live strings after compaction. */
2244 static void
2245 compact_small_strings (void)
2247 struct sblock *b, *tb, *next;
2248 struct sdata *from, *to, *end, *tb_end;
2249 struct sdata *to_end, *from_end;
2251 /* TB is the sblock we copy to, TO is the sdata within TB we copy
2252 to, and TB_END is the end of TB. */
2253 tb = oldest_sblock;
2254 tb_end = (struct sdata *) ((char *) tb + SBLOCK_SIZE);
2255 to = &tb->first_data;
2257 /* Step through the blocks from the oldest to the youngest. We
2258 expect that old blocks will stabilize over time, so that less
2259 copying will happen this way. */
2260 for (b = oldest_sblock; b; b = b->next)
2262 end = b->next_free;
2263 xassert ((char *) end <= (char *) b + SBLOCK_SIZE);
2265 for (from = &b->first_data; from < end; from = from_end)
2267 /* Compute the next FROM here because copying below may
2268 overwrite data we need to compute it. */
2269 ptrdiff_t nbytes;
2271 #ifdef GC_CHECK_STRING_BYTES
2272 /* Check that the string size recorded in the string is the
2273 same as the one recorded in the sdata structure. */
2274 if (from->string
2275 && GC_STRING_BYTES (from->string) != SDATA_NBYTES (from))
2276 abort ();
2277 #endif /* GC_CHECK_STRING_BYTES */
2279 if (from->string)
2280 nbytes = GC_STRING_BYTES (from->string);
2281 else
2282 nbytes = SDATA_NBYTES (from);
2284 if (nbytes > LARGE_STRING_BYTES)
2285 abort ();
2287 nbytes = SDATA_SIZE (nbytes);
2288 from_end = (struct sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
2290 #ifdef GC_CHECK_STRING_OVERRUN
2291 if (memcmp (string_overrun_cookie,
2292 (char *) from_end - GC_STRING_OVERRUN_COOKIE_SIZE,
2293 GC_STRING_OVERRUN_COOKIE_SIZE))
2294 abort ();
2295 #endif
2297 /* FROM->string non-null means it's alive. Copy its data. */
2298 if (from->string)
2300 /* If TB is full, proceed with the next sblock. */
2301 to_end = (struct sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2302 if (to_end > tb_end)
2304 tb->next_free = to;
2305 tb = tb->next;
2306 tb_end = (struct sdata *) ((char *) tb + SBLOCK_SIZE);
2307 to = &tb->first_data;
2308 to_end = (struct sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2311 /* Copy, and update the string's `data' pointer. */
2312 if (from != to)
2314 xassert (tb != b || to < from);
2315 memmove (to, from, nbytes + GC_STRING_EXTRA);
2316 to->string->data = SDATA_DATA (to);
2319 /* Advance past the sdata we copied to. */
2320 to = to_end;
2325 /* The rest of the sblocks following TB don't contain live data, so
2326 we can free them. */
2327 for (b = tb->next; b; b = next)
2329 next = b->next;
2330 lisp_free (b);
2333 tb->next_free = to;
2334 tb->next = NULL;
2335 current_sblock = tb;
2338 void
2339 string_overflow (void)
2341 error ("Maximum string size exceeded");
2344 DEFUN ("make-string", Fmake_string, Smake_string, 2, 2, 0,
2345 doc: /* Return a newly created string of length LENGTH, with INIT in each element.
2346 LENGTH must be an integer.
2347 INIT must be an integer that represents a character. */)
2348 (Lisp_Object length, Lisp_Object init)
2350 register Lisp_Object val;
2351 register unsigned char *p, *end;
2352 int c;
2353 EMACS_INT nbytes;
2355 CHECK_NATNUM (length);
2356 CHECK_CHARACTER (init);
2358 c = XFASTINT (init);
2359 if (ASCII_CHAR_P (c))
2361 nbytes = XINT (length);
2362 val = make_uninit_string (nbytes);
2363 p = SDATA (val);
2364 end = p + SCHARS (val);
2365 while (p != end)
2366 *p++ = c;
2368 else
2370 unsigned char str[MAX_MULTIBYTE_LENGTH];
2371 int len = CHAR_STRING (c, str);
2372 EMACS_INT string_len = XINT (length);
2374 if (string_len > STRING_BYTES_MAX / len)
2375 string_overflow ();
2376 nbytes = len * string_len;
2377 val = make_uninit_multibyte_string (string_len, nbytes);
2378 p = SDATA (val);
2379 end = p + nbytes;
2380 while (p != end)
2382 memcpy (p, str, len);
2383 p += len;
2387 *p = 0;
2388 return val;
2392 DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0,
2393 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element.
2394 LENGTH must be a number. INIT matters only in whether it is t or nil. */)
2395 (Lisp_Object length, Lisp_Object init)
2397 register Lisp_Object val;
2398 struct Lisp_Bool_Vector *p;
2399 ptrdiff_t length_in_chars;
2400 EMACS_INT length_in_elts;
2401 int bits_per_value;
2403 CHECK_NATNUM (length);
2405 bits_per_value = sizeof (EMACS_INT) * BOOL_VECTOR_BITS_PER_CHAR;
2407 length_in_elts = (XFASTINT (length) + bits_per_value - 1) / bits_per_value;
2409 /* We must allocate one more elements than LENGTH_IN_ELTS for the
2410 slot `size' of the struct Lisp_Bool_Vector. */
2411 val = Fmake_vector (make_number (length_in_elts + 1), Qnil);
2413 /* No Lisp_Object to trace in there. */
2414 XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0);
2416 p = XBOOL_VECTOR (val);
2417 p->size = XFASTINT (length);
2419 length_in_chars = ((XFASTINT (length) + BOOL_VECTOR_BITS_PER_CHAR - 1)
2420 / BOOL_VECTOR_BITS_PER_CHAR);
2421 if (length_in_chars)
2423 memset (p->data, ! NILP (init) ? -1 : 0, length_in_chars);
2425 /* Clear any extraneous bits in the last byte. */
2426 p->data[length_in_chars - 1]
2427 &= (1 << (XINT (length) % BOOL_VECTOR_BITS_PER_CHAR)) - 1;
2430 return val;
2434 /* Make a string from NBYTES bytes at CONTENTS, and compute the number
2435 of characters from the contents. This string may be unibyte or
2436 multibyte, depending on the contents. */
2438 Lisp_Object
2439 make_string (const char *contents, ptrdiff_t nbytes)
2441 register Lisp_Object val;
2442 ptrdiff_t nchars, multibyte_nbytes;
2444 parse_str_as_multibyte ((const unsigned char *) contents, nbytes,
2445 &nchars, &multibyte_nbytes);
2446 if (nbytes == nchars || nbytes != multibyte_nbytes)
2447 /* CONTENTS contains no multibyte sequences or contains an invalid
2448 multibyte sequence. We must make unibyte string. */
2449 val = make_unibyte_string (contents, nbytes);
2450 else
2451 val = make_multibyte_string (contents, nchars, nbytes);
2452 return val;
2456 /* Make an unibyte string from LENGTH bytes at CONTENTS. */
2458 Lisp_Object
2459 make_unibyte_string (const char *contents, ptrdiff_t length)
2461 register Lisp_Object val;
2462 val = make_uninit_string (length);
2463 memcpy (SDATA (val), contents, length);
2464 return val;
2468 /* Make a multibyte string from NCHARS characters occupying NBYTES
2469 bytes at CONTENTS. */
2471 Lisp_Object
2472 make_multibyte_string (const char *contents,
2473 ptrdiff_t nchars, ptrdiff_t nbytes)
2475 register Lisp_Object val;
2476 val = make_uninit_multibyte_string (nchars, nbytes);
2477 memcpy (SDATA (val), contents, nbytes);
2478 return val;
2482 /* Make a string from NCHARS characters occupying NBYTES bytes at
2483 CONTENTS. It is a multibyte string if NBYTES != NCHARS. */
2485 Lisp_Object
2486 make_string_from_bytes (const char *contents,
2487 ptrdiff_t nchars, ptrdiff_t nbytes)
2489 register Lisp_Object val;
2490 val = make_uninit_multibyte_string (nchars, nbytes);
2491 memcpy (SDATA (val), contents, nbytes);
2492 if (SBYTES (val) == SCHARS (val))
2493 STRING_SET_UNIBYTE (val);
2494 return val;
2498 /* Make a string from NCHARS characters occupying NBYTES bytes at
2499 CONTENTS. The argument MULTIBYTE controls whether to label the
2500 string as multibyte. If NCHARS is negative, it counts the number of
2501 characters by itself. */
2503 Lisp_Object
2504 make_specified_string (const char *contents,
2505 ptrdiff_t nchars, ptrdiff_t nbytes, int multibyte)
2507 register Lisp_Object val;
2509 if (nchars < 0)
2511 if (multibyte)
2512 nchars = multibyte_chars_in_text ((const unsigned char *) contents,
2513 nbytes);
2514 else
2515 nchars = nbytes;
2517 val = make_uninit_multibyte_string (nchars, nbytes);
2518 memcpy (SDATA (val), contents, nbytes);
2519 if (!multibyte)
2520 STRING_SET_UNIBYTE (val);
2521 return val;
2525 /* Make a string from the data at STR, treating it as multibyte if the
2526 data warrants. */
2528 Lisp_Object
2529 build_string (const char *str)
2531 return make_string (str, strlen (str));
2535 /* Return an unibyte Lisp_String set up to hold LENGTH characters
2536 occupying LENGTH bytes. */
2538 Lisp_Object
2539 make_uninit_string (EMACS_INT length)
2541 Lisp_Object val;
2543 if (!length)
2544 return empty_unibyte_string;
2545 val = make_uninit_multibyte_string (length, length);
2546 STRING_SET_UNIBYTE (val);
2547 return val;
2551 /* Return a multibyte Lisp_String set up to hold NCHARS characters
2552 which occupy NBYTES bytes. */
2554 Lisp_Object
2555 make_uninit_multibyte_string (EMACS_INT nchars, EMACS_INT nbytes)
2557 Lisp_Object string;
2558 struct Lisp_String *s;
2560 if (nchars < 0)
2561 abort ();
2562 if (!nbytes)
2563 return empty_multibyte_string;
2565 s = allocate_string ();
2566 allocate_string_data (s, nchars, nbytes);
2567 XSETSTRING (string, s);
2568 string_chars_consed += nbytes;
2569 return string;
2574 /***********************************************************************
2575 Float Allocation
2576 ***********************************************************************/
2578 /* We store float cells inside of float_blocks, allocating a new
2579 float_block with malloc whenever necessary. Float cells reclaimed
2580 by GC are put on a free list to be reallocated before allocating
2581 any new float cells from the latest float_block. */
2583 #define FLOAT_BLOCK_SIZE \
2584 (((BLOCK_BYTES - sizeof (struct float_block *) \
2585 /* The compiler might add padding at the end. */ \
2586 - (sizeof (struct Lisp_Float) - sizeof (int))) * CHAR_BIT) \
2587 / (sizeof (struct Lisp_Float) * CHAR_BIT + 1))
2589 #define GETMARKBIT(block,n) \
2590 (((block)->gcmarkbits[(n) / (sizeof (int) * CHAR_BIT)] \
2591 >> ((n) % (sizeof (int) * CHAR_BIT))) \
2592 & 1)
2594 #define SETMARKBIT(block,n) \
2595 (block)->gcmarkbits[(n) / (sizeof (int) * CHAR_BIT)] \
2596 |= 1 << ((n) % (sizeof (int) * CHAR_BIT))
2598 #define UNSETMARKBIT(block,n) \
2599 (block)->gcmarkbits[(n) / (sizeof (int) * CHAR_BIT)] \
2600 &= ~(1 << ((n) % (sizeof (int) * CHAR_BIT)))
2602 #define FLOAT_BLOCK(fptr) \
2603 ((struct float_block *) (((uintptr_t) (fptr)) & ~(BLOCK_ALIGN - 1)))
2605 #define FLOAT_INDEX(fptr) \
2606 ((((uintptr_t) (fptr)) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Float))
2608 struct float_block
2610 /* Place `floats' at the beginning, to ease up FLOAT_INDEX's job. */
2611 struct Lisp_Float floats[FLOAT_BLOCK_SIZE];
2612 int gcmarkbits[1 + FLOAT_BLOCK_SIZE / (sizeof (int) * CHAR_BIT)];
2613 struct float_block *next;
2616 #define FLOAT_MARKED_P(fptr) \
2617 GETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2619 #define FLOAT_MARK(fptr) \
2620 SETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2622 #define FLOAT_UNMARK(fptr) \
2623 UNSETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2625 /* Current float_block. */
2627 static struct float_block *float_block;
2629 /* Index of first unused Lisp_Float in the current float_block. */
2631 static int float_block_index;
2633 /* Free-list of Lisp_Floats. */
2635 static struct Lisp_Float *float_free_list;
2638 /* Initialize float allocation. */
2640 static void
2641 init_float (void)
2643 float_block = NULL;
2644 float_block_index = FLOAT_BLOCK_SIZE; /* Force alloc of new float_block. */
2645 float_free_list = 0;
2649 /* Return a new float object with value FLOAT_VALUE. */
2651 Lisp_Object
2652 make_float (double float_value)
2654 register Lisp_Object val;
2656 /* eassert (!handling_signal); */
2658 MALLOC_BLOCK_INPUT;
2660 if (float_free_list)
2662 /* We use the data field for chaining the free list
2663 so that we won't use the same field that has the mark bit. */
2664 XSETFLOAT (val, float_free_list);
2665 float_free_list = float_free_list->u.chain;
2667 else
2669 if (float_block_index == FLOAT_BLOCK_SIZE)
2671 register struct float_block *new;
2673 new = (struct float_block *) lisp_align_malloc (sizeof *new,
2674 MEM_TYPE_FLOAT);
2675 new->next = float_block;
2676 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2677 float_block = new;
2678 float_block_index = 0;
2680 XSETFLOAT (val, &float_block->floats[float_block_index]);
2681 float_block_index++;
2684 MALLOC_UNBLOCK_INPUT;
2686 XFLOAT_INIT (val, float_value);
2687 eassert (!FLOAT_MARKED_P (XFLOAT (val)));
2688 consing_since_gc += sizeof (struct Lisp_Float);
2689 floats_consed++;
2690 return val;
2695 /***********************************************************************
2696 Cons Allocation
2697 ***********************************************************************/
2699 /* We store cons cells inside of cons_blocks, allocating a new
2700 cons_block with malloc whenever necessary. Cons cells reclaimed by
2701 GC are put on a free list to be reallocated before allocating
2702 any new cons cells from the latest cons_block. */
2704 #define CONS_BLOCK_SIZE \
2705 (((BLOCK_BYTES - sizeof (struct cons_block *) \
2706 /* The compiler might add padding at the end. */ \
2707 - (sizeof (struct Lisp_Cons) - sizeof (int))) * CHAR_BIT) \
2708 / (sizeof (struct Lisp_Cons) * CHAR_BIT + 1))
2710 #define CONS_BLOCK(fptr) \
2711 ((struct cons_block *) ((uintptr_t) (fptr) & ~(BLOCK_ALIGN - 1)))
2713 #define CONS_INDEX(fptr) \
2714 (((uintptr_t) (fptr) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Cons))
2716 struct cons_block
2718 /* Place `conses' at the beginning, to ease up CONS_INDEX's job. */
2719 struct Lisp_Cons conses[CONS_BLOCK_SIZE];
2720 int gcmarkbits[1 + CONS_BLOCK_SIZE / (sizeof (int) * CHAR_BIT)];
2721 struct cons_block *next;
2724 #define CONS_MARKED_P(fptr) \
2725 GETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2727 #define CONS_MARK(fptr) \
2728 SETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2730 #define CONS_UNMARK(fptr) \
2731 UNSETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2733 /* Current cons_block. */
2735 static struct cons_block *cons_block;
2737 /* Index of first unused Lisp_Cons in the current block. */
2739 static int cons_block_index;
2741 /* Free-list of Lisp_Cons structures. */
2743 static struct Lisp_Cons *cons_free_list;
2746 /* Initialize cons allocation. */
2748 static void
2749 init_cons (void)
2751 cons_block = NULL;
2752 cons_block_index = CONS_BLOCK_SIZE; /* Force alloc of new cons_block. */
2753 cons_free_list = 0;
2757 /* Explicitly free a cons cell by putting it on the free-list. */
2759 void
2760 free_cons (struct Lisp_Cons *ptr)
2762 ptr->u.chain = cons_free_list;
2763 #if GC_MARK_STACK
2764 ptr->car = Vdead;
2765 #endif
2766 cons_free_list = ptr;
2769 DEFUN ("cons", Fcons, Scons, 2, 2, 0,
2770 doc: /* Create a new cons, give it CAR and CDR as components, and return it. */)
2771 (Lisp_Object car, Lisp_Object cdr)
2773 register Lisp_Object val;
2775 /* eassert (!handling_signal); */
2777 MALLOC_BLOCK_INPUT;
2779 if (cons_free_list)
2781 /* We use the cdr for chaining the free list
2782 so that we won't use the same field that has the mark bit. */
2783 XSETCONS (val, cons_free_list);
2784 cons_free_list = cons_free_list->u.chain;
2786 else
2788 if (cons_block_index == CONS_BLOCK_SIZE)
2790 register struct cons_block *new;
2791 new = (struct cons_block *) lisp_align_malloc (sizeof *new,
2792 MEM_TYPE_CONS);
2793 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2794 new->next = cons_block;
2795 cons_block = new;
2796 cons_block_index = 0;
2798 XSETCONS (val, &cons_block->conses[cons_block_index]);
2799 cons_block_index++;
2802 MALLOC_UNBLOCK_INPUT;
2804 XSETCAR (val, car);
2805 XSETCDR (val, cdr);
2806 eassert (!CONS_MARKED_P (XCONS (val)));
2807 consing_since_gc += sizeof (struct Lisp_Cons);
2808 cons_cells_consed++;
2809 return val;
2812 #ifdef GC_CHECK_CONS_LIST
2813 /* Get an error now if there's any junk in the cons free list. */
2814 void
2815 check_cons_list (void)
2817 struct Lisp_Cons *tail = cons_free_list;
2819 while (tail)
2820 tail = tail->u.chain;
2822 #endif
2824 /* Make a list of 1, 2, 3, 4 or 5 specified objects. */
2826 Lisp_Object
2827 list1 (Lisp_Object arg1)
2829 return Fcons (arg1, Qnil);
2832 Lisp_Object
2833 list2 (Lisp_Object arg1, Lisp_Object arg2)
2835 return Fcons (arg1, Fcons (arg2, Qnil));
2839 Lisp_Object
2840 list3 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3)
2842 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Qnil)));
2846 Lisp_Object
2847 list4 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4)
2849 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4, Qnil))));
2853 Lisp_Object
2854 list5 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5)
2856 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4,
2857 Fcons (arg5, Qnil)))));
2861 DEFUN ("list", Flist, Slist, 0, MANY, 0,
2862 doc: /* Return a newly created list with specified arguments as elements.
2863 Any number of arguments, even zero arguments, are allowed.
2864 usage: (list &rest OBJECTS) */)
2865 (ptrdiff_t nargs, Lisp_Object *args)
2867 register Lisp_Object val;
2868 val = Qnil;
2870 while (nargs > 0)
2872 nargs--;
2873 val = Fcons (args[nargs], val);
2875 return val;
2879 DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
2880 doc: /* Return a newly created list of length LENGTH, with each element being INIT. */)
2881 (register Lisp_Object length, Lisp_Object init)
2883 register Lisp_Object val;
2884 register EMACS_INT size;
2886 CHECK_NATNUM (length);
2887 size = XFASTINT (length);
2889 val = Qnil;
2890 while (size > 0)
2892 val = Fcons (init, val);
2893 --size;
2895 if (size > 0)
2897 val = Fcons (init, val);
2898 --size;
2900 if (size > 0)
2902 val = Fcons (init, val);
2903 --size;
2905 if (size > 0)
2907 val = Fcons (init, val);
2908 --size;
2910 if (size > 0)
2912 val = Fcons (init, val);
2913 --size;
2919 QUIT;
2922 return val;
2927 /***********************************************************************
2928 Vector Allocation
2929 ***********************************************************************/
2931 /* Singly-linked list of all vectors. */
2933 static struct Lisp_Vector *all_vectors;
2935 /* Handy constants for vectorlike objects. */
2936 enum
2938 header_size = offsetof (struct Lisp_Vector, contents),
2939 word_size = sizeof (Lisp_Object)
2942 /* Value is a pointer to a newly allocated Lisp_Vector structure
2943 with room for LEN Lisp_Objects. */
2945 static struct Lisp_Vector *
2946 allocate_vectorlike (ptrdiff_t len)
2948 struct Lisp_Vector *p;
2949 size_t nbytes;
2951 MALLOC_BLOCK_INPUT;
2953 #ifdef DOUG_LEA_MALLOC
2954 /* Prevent mmap'ing the chunk. Lisp data may not be mmap'ed
2955 because mapped region contents are not preserved in
2956 a dumped Emacs. */
2957 mallopt (M_MMAP_MAX, 0);
2958 #endif
2960 /* This gets triggered by code which I haven't bothered to fix. --Stef */
2961 /* eassert (!handling_signal); */
2963 nbytes = header_size + len * word_size;
2964 p = (struct Lisp_Vector *) lisp_malloc (nbytes, MEM_TYPE_VECTORLIKE);
2966 #ifdef DOUG_LEA_MALLOC
2967 /* Back to a reasonable maximum of mmap'ed areas. */
2968 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
2969 #endif
2971 consing_since_gc += nbytes;
2972 vector_cells_consed += len;
2974 p->header.next.vector = all_vectors;
2975 all_vectors = p;
2977 MALLOC_UNBLOCK_INPUT;
2979 return p;
2983 /* Allocate a vector with LEN slots. */
2985 struct Lisp_Vector *
2986 allocate_vector (EMACS_INT len)
2988 struct Lisp_Vector *v;
2989 ptrdiff_t nbytes_max = min (PTRDIFF_MAX, SIZE_MAX);
2991 if (min ((nbytes_max - header_size) / word_size, MOST_POSITIVE_FIXNUM) < len)
2992 memory_full (SIZE_MAX);
2993 v = allocate_vectorlike (len);
2994 v->header.size = len;
2995 return v;
2999 /* Allocate other vector-like structures. */
3001 struct Lisp_Vector *
3002 allocate_pseudovector (int memlen, int lisplen, int tag)
3004 struct Lisp_Vector *v = allocate_vectorlike (memlen);
3005 int i;
3007 /* Only the first lisplen slots will be traced normally by the GC. */
3008 for (i = 0; i < lisplen; ++i)
3009 v->contents[i] = Qnil;
3011 XSETPVECTYPESIZE (v, tag, lisplen);
3012 return v;
3015 struct Lisp_Hash_Table *
3016 allocate_hash_table (void)
3018 return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, PVEC_HASH_TABLE);
3022 struct window *
3023 allocate_window (void)
3025 return ALLOCATE_PSEUDOVECTOR (struct window, current_matrix, PVEC_WINDOW);
3029 struct terminal *
3030 allocate_terminal (void)
3032 struct terminal *t = ALLOCATE_PSEUDOVECTOR (struct terminal,
3033 next_terminal, PVEC_TERMINAL);
3034 /* Zero out the non-GC'd fields. FIXME: This should be made unnecessary. */
3035 memset (&t->next_terminal, 0,
3036 (char*) (t + 1) - (char*) &t->next_terminal);
3038 return t;
3041 struct frame *
3042 allocate_frame (void)
3044 struct frame *f = ALLOCATE_PSEUDOVECTOR (struct frame,
3045 face_cache, PVEC_FRAME);
3046 /* Zero out the non-GC'd fields. FIXME: This should be made unnecessary. */
3047 memset (&f->face_cache, 0,
3048 (char *) (f + 1) - (char *) &f->face_cache);
3049 return f;
3053 struct Lisp_Process *
3054 allocate_process (void)
3056 return ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
3060 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
3061 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
3062 See also the function `vector'. */)
3063 (register Lisp_Object length, Lisp_Object init)
3065 Lisp_Object vector;
3066 register ptrdiff_t sizei;
3067 register ptrdiff_t i;
3068 register struct Lisp_Vector *p;
3070 CHECK_NATNUM (length);
3072 p = allocate_vector (XFASTINT (length));
3073 sizei = XFASTINT (length);
3074 for (i = 0; i < sizei; i++)
3075 p->contents[i] = init;
3077 XSETVECTOR (vector, p);
3078 return vector;
3082 DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
3083 doc: /* Return a newly created vector with specified arguments as elements.
3084 Any number of arguments, even zero arguments, are allowed.
3085 usage: (vector &rest OBJECTS) */)
3086 (ptrdiff_t nargs, Lisp_Object *args)
3088 register Lisp_Object len, val;
3089 ptrdiff_t i;
3090 register struct Lisp_Vector *p;
3092 XSETFASTINT (len, nargs);
3093 val = Fmake_vector (len, Qnil);
3094 p = XVECTOR (val);
3095 for (i = 0; i < nargs; i++)
3096 p->contents[i] = args[i];
3097 return val;
3101 DEFUN ("make-byte-code", Fmake_byte_code, Smake_byte_code, 4, MANY, 0,
3102 doc: /* Create a byte-code object with specified arguments as elements.
3103 The arguments should be the ARGLIST, bytecode-string BYTE-CODE, constant
3104 vector CONSTANTS, maximum stack size DEPTH, (optional) DOCSTRING,
3105 and (optional) INTERACTIVE-SPEC.
3106 The first four arguments are required; at most six have any
3107 significance.
3108 The ARGLIST can be either like the one of `lambda', in which case the arguments
3109 will be dynamically bound before executing the byte code, or it can be an
3110 integer of the form NNNNNNNRMMMMMMM where the 7bit MMMMMMM specifies the
3111 minimum number of arguments, the 7-bit NNNNNNN specifies the maximum number
3112 of arguments (ignoring &rest) and the R bit specifies whether there is a &rest
3113 argument to catch the left-over arguments. If such an integer is used, the
3114 arguments will not be dynamically bound but will be instead pushed on the
3115 stack before executing the byte-code.
3116 usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS) */)
3117 (ptrdiff_t nargs, Lisp_Object *args)
3119 register Lisp_Object len, val;
3120 ptrdiff_t i;
3121 register struct Lisp_Vector *p;
3123 XSETFASTINT (len, nargs);
3124 if (!NILP (Vpurify_flag))
3125 val = make_pure_vector (nargs);
3126 else
3127 val = Fmake_vector (len, Qnil);
3129 if (nargs > 1 && STRINGP (args[1]) && STRING_MULTIBYTE (args[1]))
3130 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the
3131 earlier because they produced a raw 8-bit string for byte-code
3132 and now such a byte-code string is loaded as multibyte while
3133 raw 8-bit characters converted to multibyte form. Thus, now we
3134 must convert them back to the original unibyte form. */
3135 args[1] = Fstring_as_unibyte (args[1]);
3137 p = XVECTOR (val);
3138 for (i = 0; i < nargs; i++)
3140 if (!NILP (Vpurify_flag))
3141 args[i] = Fpurecopy (args[i]);
3142 p->contents[i] = args[i];
3144 XSETPVECTYPE (p, PVEC_COMPILED);
3145 XSETCOMPILED (val, p);
3146 return val;
3151 /***********************************************************************
3152 Symbol Allocation
3153 ***********************************************************************/
3155 /* Like struct Lisp_Symbol, but padded so that the size is a multiple
3156 of the required alignment if LSB tags are used. */
3158 union aligned_Lisp_Symbol
3160 struct Lisp_Symbol s;
3161 #ifdef USE_LSB_TAG
3162 unsigned char c[(sizeof (struct Lisp_Symbol) + (1 << GCTYPEBITS) - 1)
3163 & -(1 << GCTYPEBITS)];
3164 #endif
3167 /* Each symbol_block is just under 1020 bytes long, since malloc
3168 really allocates in units of powers of two and uses 4 bytes for its
3169 own overhead. */
3171 #define SYMBOL_BLOCK_SIZE \
3172 ((1020 - sizeof (struct symbol_block *)) / sizeof (union aligned_Lisp_Symbol))
3174 struct symbol_block
3176 /* Place `symbols' first, to preserve alignment. */
3177 union aligned_Lisp_Symbol symbols[SYMBOL_BLOCK_SIZE];
3178 struct symbol_block *next;
3181 /* Current symbol block and index of first unused Lisp_Symbol
3182 structure in it. */
3184 static struct symbol_block *symbol_block;
3185 static int symbol_block_index;
3187 /* List of free symbols. */
3189 static struct Lisp_Symbol *symbol_free_list;
3192 /* Initialize symbol allocation. */
3194 static void
3195 init_symbol (void)
3197 symbol_block = NULL;
3198 symbol_block_index = SYMBOL_BLOCK_SIZE;
3199 symbol_free_list = 0;
3203 DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0,
3204 doc: /* Return a newly allocated uninterned symbol whose name is NAME.
3205 Its value and function definition are void, and its property list is nil. */)
3206 (Lisp_Object name)
3208 register Lisp_Object val;
3209 register struct Lisp_Symbol *p;
3211 CHECK_STRING (name);
3213 /* eassert (!handling_signal); */
3215 MALLOC_BLOCK_INPUT;
3217 if (symbol_free_list)
3219 XSETSYMBOL (val, symbol_free_list);
3220 symbol_free_list = symbol_free_list->next;
3222 else
3224 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
3226 struct symbol_block *new;
3227 new = (struct symbol_block *) lisp_malloc (sizeof *new,
3228 MEM_TYPE_SYMBOL);
3229 new->next = symbol_block;
3230 symbol_block = new;
3231 symbol_block_index = 0;
3233 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index].s);
3234 symbol_block_index++;
3237 MALLOC_UNBLOCK_INPUT;
3239 p = XSYMBOL (val);
3240 p->xname = name;
3241 p->plist = Qnil;
3242 p->redirect = SYMBOL_PLAINVAL;
3243 SET_SYMBOL_VAL (p, Qunbound);
3244 p->function = Qunbound;
3245 p->next = NULL;
3246 p->gcmarkbit = 0;
3247 p->interned = SYMBOL_UNINTERNED;
3248 p->constant = 0;
3249 p->declared_special = 0;
3250 consing_since_gc += sizeof (struct Lisp_Symbol);
3251 symbols_consed++;
3252 return val;
3257 /***********************************************************************
3258 Marker (Misc) Allocation
3259 ***********************************************************************/
3261 /* Like union Lisp_Misc, but padded so that its size is a multiple of
3262 the required alignment when LSB tags are used. */
3264 union aligned_Lisp_Misc
3266 union Lisp_Misc m;
3267 #ifdef USE_LSB_TAG
3268 unsigned char c[(sizeof (union Lisp_Misc) + (1 << GCTYPEBITS) - 1)
3269 & -(1 << GCTYPEBITS)];
3270 #endif
3273 /* Allocation of markers and other objects that share that structure.
3274 Works like allocation of conses. */
3276 #define MARKER_BLOCK_SIZE \
3277 ((1020 - sizeof (struct marker_block *)) / sizeof (union aligned_Lisp_Misc))
3279 struct marker_block
3281 /* Place `markers' first, to preserve alignment. */
3282 union aligned_Lisp_Misc markers[MARKER_BLOCK_SIZE];
3283 struct marker_block *next;
3286 static struct marker_block *marker_block;
3287 static int marker_block_index;
3289 static union Lisp_Misc *marker_free_list;
3291 static void
3292 init_marker (void)
3294 marker_block = NULL;
3295 marker_block_index = MARKER_BLOCK_SIZE;
3296 marker_free_list = 0;
3299 /* Return a newly allocated Lisp_Misc object, with no substructure. */
3301 Lisp_Object
3302 allocate_misc (void)
3304 Lisp_Object val;
3306 /* eassert (!handling_signal); */
3308 MALLOC_BLOCK_INPUT;
3310 if (marker_free_list)
3312 XSETMISC (val, marker_free_list);
3313 marker_free_list = marker_free_list->u_free.chain;
3315 else
3317 if (marker_block_index == MARKER_BLOCK_SIZE)
3319 struct marker_block *new;
3320 new = (struct marker_block *) lisp_malloc (sizeof *new,
3321 MEM_TYPE_MISC);
3322 new->next = marker_block;
3323 marker_block = new;
3324 marker_block_index = 0;
3325 total_free_markers += MARKER_BLOCK_SIZE;
3327 XSETMISC (val, &marker_block->markers[marker_block_index].m);
3328 marker_block_index++;
3331 MALLOC_UNBLOCK_INPUT;
3333 --total_free_markers;
3334 consing_since_gc += sizeof (union Lisp_Misc);
3335 misc_objects_consed++;
3336 XMISCANY (val)->gcmarkbit = 0;
3337 return val;
3340 /* Free a Lisp_Misc object */
3342 static void
3343 free_misc (Lisp_Object misc)
3345 XMISCTYPE (misc) = Lisp_Misc_Free;
3346 XMISC (misc)->u_free.chain = marker_free_list;
3347 marker_free_list = XMISC (misc);
3349 total_free_markers++;
3352 /* Return a Lisp_Misc_Save_Value object containing POINTER and
3353 INTEGER. This is used to package C values to call record_unwind_protect.
3354 The unwind function can get the C values back using XSAVE_VALUE. */
3356 Lisp_Object
3357 make_save_value (void *pointer, ptrdiff_t integer)
3359 register Lisp_Object val;
3360 register struct Lisp_Save_Value *p;
3362 val = allocate_misc ();
3363 XMISCTYPE (val) = Lisp_Misc_Save_Value;
3364 p = XSAVE_VALUE (val);
3365 p->pointer = pointer;
3366 p->integer = integer;
3367 p->dogc = 0;
3368 return val;
3371 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3372 doc: /* Return a newly allocated marker which does not point at any place. */)
3373 (void)
3375 register Lisp_Object val;
3376 register struct Lisp_Marker *p;
3378 val = allocate_misc ();
3379 XMISCTYPE (val) = Lisp_Misc_Marker;
3380 p = XMARKER (val);
3381 p->buffer = 0;
3382 p->bytepos = 0;
3383 p->charpos = 0;
3384 p->next = NULL;
3385 p->insertion_type = 0;
3386 return val;
3389 /* Put MARKER back on the free list after using it temporarily. */
3391 void
3392 free_marker (Lisp_Object marker)
3394 unchain_marker (XMARKER (marker));
3395 free_misc (marker);
3399 /* Return a newly created vector or string with specified arguments as
3400 elements. If all the arguments are characters that can fit
3401 in a string of events, make a string; otherwise, make a vector.
3403 Any number of arguments, even zero arguments, are allowed. */
3405 Lisp_Object
3406 make_event_array (register int nargs, Lisp_Object *args)
3408 int i;
3410 for (i = 0; i < nargs; i++)
3411 /* The things that fit in a string
3412 are characters that are in 0...127,
3413 after discarding the meta bit and all the bits above it. */
3414 if (!INTEGERP (args[i])
3415 || (XINT (args[i]) & ~(-CHAR_META)) >= 0200)
3416 return Fvector (nargs, args);
3418 /* Since the loop exited, we know that all the things in it are
3419 characters, so we can make a string. */
3421 Lisp_Object result;
3423 result = Fmake_string (make_number (nargs), make_number (0));
3424 for (i = 0; i < nargs; i++)
3426 SSET (result, i, XINT (args[i]));
3427 /* Move the meta bit to the right place for a string char. */
3428 if (XINT (args[i]) & CHAR_META)
3429 SSET (result, i, SREF (result, i) | 0x80);
3432 return result;
3438 /************************************************************************
3439 Memory Full Handling
3440 ************************************************************************/
3443 /* Called if malloc (NBYTES) returns zero. If NBYTES == SIZE_MAX,
3444 there may have been size_t overflow so that malloc was never
3445 called, or perhaps malloc was invoked successfully but the
3446 resulting pointer had problems fitting into a tagged EMACS_INT. In
3447 either case this counts as memory being full even though malloc did
3448 not fail. */
3450 void
3451 memory_full (size_t nbytes)
3453 /* Do not go into hysterics merely because a large request failed. */
3454 int enough_free_memory = 0;
3455 if (SPARE_MEMORY < nbytes)
3457 void *p;
3459 MALLOC_BLOCK_INPUT;
3460 p = malloc (SPARE_MEMORY);
3461 if (p)
3463 free (p);
3464 enough_free_memory = 1;
3466 MALLOC_UNBLOCK_INPUT;
3469 if (! enough_free_memory)
3471 int i;
3473 Vmemory_full = Qt;
3475 memory_full_cons_threshold = sizeof (struct cons_block);
3477 /* The first time we get here, free the spare memory. */
3478 for (i = 0; i < sizeof (spare_memory) / sizeof (char *); i++)
3479 if (spare_memory[i])
3481 if (i == 0)
3482 free (spare_memory[i]);
3483 else if (i >= 1 && i <= 4)
3484 lisp_align_free (spare_memory[i]);
3485 else
3486 lisp_free (spare_memory[i]);
3487 spare_memory[i] = 0;
3490 /* Record the space now used. When it decreases substantially,
3491 we can refill the memory reserve. */
3492 #if !defined SYSTEM_MALLOC && !defined SYNC_INPUT
3493 bytes_used_when_full = BYTES_USED;
3494 #endif
3497 /* This used to call error, but if we've run out of memory, we could
3498 get infinite recursion trying to build the string. */
3499 xsignal (Qnil, Vmemory_signal_data);
3502 /* If we released our reserve (due to running out of memory),
3503 and we have a fair amount free once again,
3504 try to set aside another reserve in case we run out once more.
3506 This is called when a relocatable block is freed in ralloc.c,
3507 and also directly from this file, in case we're not using ralloc.c. */
3509 void
3510 refill_memory_reserve (void)
3512 #ifndef SYSTEM_MALLOC
3513 if (spare_memory[0] == 0)
3514 spare_memory[0] = (char *) malloc (SPARE_MEMORY);
3515 if (spare_memory[1] == 0)
3516 spare_memory[1] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3517 MEM_TYPE_CONS);
3518 if (spare_memory[2] == 0)
3519 spare_memory[2] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3520 MEM_TYPE_CONS);
3521 if (spare_memory[3] == 0)
3522 spare_memory[3] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3523 MEM_TYPE_CONS);
3524 if (spare_memory[4] == 0)
3525 spare_memory[4] = (char *) lisp_align_malloc (sizeof (struct cons_block),
3526 MEM_TYPE_CONS);
3527 if (spare_memory[5] == 0)
3528 spare_memory[5] = (char *) lisp_malloc (sizeof (struct string_block),
3529 MEM_TYPE_STRING);
3530 if (spare_memory[6] == 0)
3531 spare_memory[6] = (char *) lisp_malloc (sizeof (struct string_block),
3532 MEM_TYPE_STRING);
3533 if (spare_memory[0] && spare_memory[1] && spare_memory[5])
3534 Vmemory_full = Qnil;
3535 #endif
3538 /************************************************************************
3539 C Stack Marking
3540 ************************************************************************/
3542 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
3544 /* Conservative C stack marking requires a method to identify possibly
3545 live Lisp objects given a pointer value. We do this by keeping
3546 track of blocks of Lisp data that are allocated in a red-black tree
3547 (see also the comment of mem_node which is the type of nodes in
3548 that tree). Function lisp_malloc adds information for an allocated
3549 block to the red-black tree with calls to mem_insert, and function
3550 lisp_free removes it with mem_delete. Functions live_string_p etc
3551 call mem_find to lookup information about a given pointer in the
3552 tree, and use that to determine if the pointer points to a Lisp
3553 object or not. */
3555 /* Initialize this part of alloc.c. */
3557 static void
3558 mem_init (void)
3560 mem_z.left = mem_z.right = MEM_NIL;
3561 mem_z.parent = NULL;
3562 mem_z.color = MEM_BLACK;
3563 mem_z.start = mem_z.end = NULL;
3564 mem_root = MEM_NIL;
3568 /* Value is a pointer to the mem_node containing START. Value is
3569 MEM_NIL if there is no node in the tree containing START. */
3571 static inline struct mem_node *
3572 mem_find (void *start)
3574 struct mem_node *p;
3576 if (start < min_heap_address || start > max_heap_address)
3577 return MEM_NIL;
3579 /* Make the search always successful to speed up the loop below. */
3580 mem_z.start = start;
3581 mem_z.end = (char *) start + 1;
3583 p = mem_root;
3584 while (start < p->start || start >= p->end)
3585 p = start < p->start ? p->left : p->right;
3586 return p;
3590 /* Insert a new node into the tree for a block of memory with start
3591 address START, end address END, and type TYPE. Value is a
3592 pointer to the node that was inserted. */
3594 static struct mem_node *
3595 mem_insert (void *start, void *end, enum mem_type type)
3597 struct mem_node *c, *parent, *x;
3599 if (min_heap_address == NULL || start < min_heap_address)
3600 min_heap_address = start;
3601 if (max_heap_address == NULL || end > max_heap_address)
3602 max_heap_address = end;
3604 /* See where in the tree a node for START belongs. In this
3605 particular application, it shouldn't happen that a node is already
3606 present. For debugging purposes, let's check that. */
3607 c = mem_root;
3608 parent = NULL;
3610 #if GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS
3612 while (c != MEM_NIL)
3614 if (start >= c->start && start < c->end)
3615 abort ();
3616 parent = c;
3617 c = start < c->start ? c->left : c->right;
3620 #else /* GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS */
3622 while (c != MEM_NIL)
3624 parent = c;
3625 c = start < c->start ? c->left : c->right;
3628 #endif /* GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS */
3630 /* Create a new node. */
3631 #ifdef GC_MALLOC_CHECK
3632 x = (struct mem_node *) _malloc_internal (sizeof *x);
3633 if (x == NULL)
3634 abort ();
3635 #else
3636 x = (struct mem_node *) xmalloc (sizeof *x);
3637 #endif
3638 x->start = start;
3639 x->end = end;
3640 x->type = type;
3641 x->parent = parent;
3642 x->left = x->right = MEM_NIL;
3643 x->color = MEM_RED;
3645 /* Insert it as child of PARENT or install it as root. */
3646 if (parent)
3648 if (start < parent->start)
3649 parent->left = x;
3650 else
3651 parent->right = x;
3653 else
3654 mem_root = x;
3656 /* Re-establish red-black tree properties. */
3657 mem_insert_fixup (x);
3659 return x;
3663 /* Re-establish the red-black properties of the tree, and thereby
3664 balance the tree, after node X has been inserted; X is always red. */
3666 static void
3667 mem_insert_fixup (struct mem_node *x)
3669 while (x != mem_root && x->parent->color == MEM_RED)
3671 /* X is red and its parent is red. This is a violation of
3672 red-black tree property #3. */
3674 if (x->parent == x->parent->parent->left)
3676 /* We're on the left side of our grandparent, and Y is our
3677 "uncle". */
3678 struct mem_node *y = x->parent->parent->right;
3680 if (y->color == MEM_RED)
3682 /* Uncle and parent are red but should be black because
3683 X is red. Change the colors accordingly and proceed
3684 with the grandparent. */
3685 x->parent->color = MEM_BLACK;
3686 y->color = MEM_BLACK;
3687 x->parent->parent->color = MEM_RED;
3688 x = x->parent->parent;
3690 else
3692 /* Parent and uncle have different colors; parent is
3693 red, uncle is black. */
3694 if (x == x->parent->right)
3696 x = x->parent;
3697 mem_rotate_left (x);
3700 x->parent->color = MEM_BLACK;
3701 x->parent->parent->color = MEM_RED;
3702 mem_rotate_right (x->parent->parent);
3705 else
3707 /* This is the symmetrical case of above. */
3708 struct mem_node *y = x->parent->parent->left;
3710 if (y->color == MEM_RED)
3712 x->parent->color = MEM_BLACK;
3713 y->color = MEM_BLACK;
3714 x->parent->parent->color = MEM_RED;
3715 x = x->parent->parent;
3717 else
3719 if (x == x->parent->left)
3721 x = x->parent;
3722 mem_rotate_right (x);
3725 x->parent->color = MEM_BLACK;
3726 x->parent->parent->color = MEM_RED;
3727 mem_rotate_left (x->parent->parent);
3732 /* The root may have been changed to red due to the algorithm. Set
3733 it to black so that property #5 is satisfied. */
3734 mem_root->color = MEM_BLACK;
3738 /* (x) (y)
3739 / \ / \
3740 a (y) ===> (x) c
3741 / \ / \
3742 b c a b */
3744 static void
3745 mem_rotate_left (struct mem_node *x)
3747 struct mem_node *y;
3749 /* Turn y's left sub-tree into x's right sub-tree. */
3750 y = x->right;
3751 x->right = y->left;
3752 if (y->left != MEM_NIL)
3753 y->left->parent = x;
3755 /* Y's parent was x's parent. */
3756 if (y != MEM_NIL)
3757 y->parent = x->parent;
3759 /* Get the parent to point to y instead of x. */
3760 if (x->parent)
3762 if (x == x->parent->left)
3763 x->parent->left = y;
3764 else
3765 x->parent->right = y;
3767 else
3768 mem_root = y;
3770 /* Put x on y's left. */
3771 y->left = x;
3772 if (x != MEM_NIL)
3773 x->parent = y;
3777 /* (x) (Y)
3778 / \ / \
3779 (y) c ===> a (x)
3780 / \ / \
3781 a b b c */
3783 static void
3784 mem_rotate_right (struct mem_node *x)
3786 struct mem_node *y = x->left;
3788 x->left = y->right;
3789 if (y->right != MEM_NIL)
3790 y->right->parent = x;
3792 if (y != MEM_NIL)
3793 y->parent = x->parent;
3794 if (x->parent)
3796 if (x == x->parent->right)
3797 x->parent->right = y;
3798 else
3799 x->parent->left = y;
3801 else
3802 mem_root = y;
3804 y->right = x;
3805 if (x != MEM_NIL)
3806 x->parent = y;
3810 /* Delete node Z from the tree. If Z is null or MEM_NIL, do nothing. */
3812 static void
3813 mem_delete (struct mem_node *z)
3815 struct mem_node *x, *y;
3817 if (!z || z == MEM_NIL)
3818 return;
3820 if (z->left == MEM_NIL || z->right == MEM_NIL)
3821 y = z;
3822 else
3824 y = z->right;
3825 while (y->left != MEM_NIL)
3826 y = y->left;
3829 if (y->left != MEM_NIL)
3830 x = y->left;
3831 else
3832 x = y->right;
3834 x->parent = y->parent;
3835 if (y->parent)
3837 if (y == y->parent->left)
3838 y->parent->left = x;
3839 else
3840 y->parent->right = x;
3842 else
3843 mem_root = x;
3845 if (y != z)
3847 z->start = y->start;
3848 z->end = y->end;
3849 z->type = y->type;
3852 if (y->color == MEM_BLACK)
3853 mem_delete_fixup (x);
3855 #ifdef GC_MALLOC_CHECK
3856 _free_internal (y);
3857 #else
3858 xfree (y);
3859 #endif
3863 /* Re-establish the red-black properties of the tree, after a
3864 deletion. */
3866 static void
3867 mem_delete_fixup (struct mem_node *x)
3869 while (x != mem_root && x->color == MEM_BLACK)
3871 if (x == x->parent->left)
3873 struct mem_node *w = x->parent->right;
3875 if (w->color == MEM_RED)
3877 w->color = MEM_BLACK;
3878 x->parent->color = MEM_RED;
3879 mem_rotate_left (x->parent);
3880 w = x->parent->right;
3883 if (w->left->color == MEM_BLACK && w->right->color == MEM_BLACK)
3885 w->color = MEM_RED;
3886 x = x->parent;
3888 else
3890 if (w->right->color == MEM_BLACK)
3892 w->left->color = MEM_BLACK;
3893 w->color = MEM_RED;
3894 mem_rotate_right (w);
3895 w = x->parent->right;
3897 w->color = x->parent->color;
3898 x->parent->color = MEM_BLACK;
3899 w->right->color = MEM_BLACK;
3900 mem_rotate_left (x->parent);
3901 x = mem_root;
3904 else
3906 struct mem_node *w = x->parent->left;
3908 if (w->color == MEM_RED)
3910 w->color = MEM_BLACK;
3911 x->parent->color = MEM_RED;
3912 mem_rotate_right (x->parent);
3913 w = x->parent->left;
3916 if (w->right->color == MEM_BLACK && w->left->color == MEM_BLACK)
3918 w->color = MEM_RED;
3919 x = x->parent;
3921 else
3923 if (w->left->color == MEM_BLACK)
3925 w->right->color = MEM_BLACK;
3926 w->color = MEM_RED;
3927 mem_rotate_left (w);
3928 w = x->parent->left;
3931 w->color = x->parent->color;
3932 x->parent->color = MEM_BLACK;
3933 w->left->color = MEM_BLACK;
3934 mem_rotate_right (x->parent);
3935 x = mem_root;
3940 x->color = MEM_BLACK;
3944 /* Value is non-zero if P is a pointer to a live Lisp string on
3945 the heap. M is a pointer to the mem_block for P. */
3947 static inline int
3948 live_string_p (struct mem_node *m, void *p)
3950 if (m->type == MEM_TYPE_STRING)
3952 struct string_block *b = (struct string_block *) m->start;
3953 ptrdiff_t offset = (char *) p - (char *) &b->strings[0];
3955 /* P must point to the start of a Lisp_String structure, and it
3956 must not be on the free-list. */
3957 return (offset >= 0
3958 && offset % sizeof b->strings[0] == 0
3959 && offset < (STRING_BLOCK_SIZE * sizeof b->strings[0])
3960 && ((struct Lisp_String *) p)->data != NULL);
3962 else
3963 return 0;
3967 /* Value is non-zero if P is a pointer to a live Lisp cons on
3968 the heap. M is a pointer to the mem_block for P. */
3970 static inline int
3971 live_cons_p (struct mem_node *m, void *p)
3973 if (m->type == MEM_TYPE_CONS)
3975 struct cons_block *b = (struct cons_block *) m->start;
3976 ptrdiff_t offset = (char *) p - (char *) &b->conses[0];
3978 /* P must point to the start of a Lisp_Cons, not be
3979 one of the unused cells in the current cons block,
3980 and not be on the free-list. */
3981 return (offset >= 0
3982 && offset % sizeof b->conses[0] == 0
3983 && offset < (CONS_BLOCK_SIZE * sizeof b->conses[0])
3984 && (b != cons_block
3985 || offset / sizeof b->conses[0] < cons_block_index)
3986 && !EQ (((struct Lisp_Cons *) p)->car, Vdead));
3988 else
3989 return 0;
3993 /* Value is non-zero if P is a pointer to a live Lisp symbol on
3994 the heap. M is a pointer to the mem_block for P. */
3996 static inline int
3997 live_symbol_p (struct mem_node *m, void *p)
3999 if (m->type == MEM_TYPE_SYMBOL)
4001 struct symbol_block *b = (struct symbol_block *) m->start;
4002 ptrdiff_t offset = (char *) p - (char *) &b->symbols[0];
4004 /* P must point to the start of a Lisp_Symbol, not be
4005 one of the unused cells in the current symbol block,
4006 and not be on the free-list. */
4007 return (offset >= 0
4008 && offset % sizeof b->symbols[0] == 0
4009 && offset < (SYMBOL_BLOCK_SIZE * sizeof b->symbols[0])
4010 && (b != symbol_block
4011 || offset / sizeof b->symbols[0] < symbol_block_index)
4012 && !EQ (((struct Lisp_Symbol *) p)->function, Vdead));
4014 else
4015 return 0;
4019 /* Value is non-zero if P is a pointer to a live Lisp float on
4020 the heap. M is a pointer to the mem_block for P. */
4022 static inline int
4023 live_float_p (struct mem_node *m, void *p)
4025 if (m->type == MEM_TYPE_FLOAT)
4027 struct float_block *b = (struct float_block *) m->start;
4028 ptrdiff_t offset = (char *) p - (char *) &b->floats[0];
4030 /* P must point to the start of a Lisp_Float and not be
4031 one of the unused cells in the current float block. */
4032 return (offset >= 0
4033 && offset % sizeof b->floats[0] == 0
4034 && offset < (FLOAT_BLOCK_SIZE * sizeof b->floats[0])
4035 && (b != float_block
4036 || offset / sizeof b->floats[0] < float_block_index));
4038 else
4039 return 0;
4043 /* Value is non-zero if P is a pointer to a live Lisp Misc on
4044 the heap. M is a pointer to the mem_block for P. */
4046 static inline int
4047 live_misc_p (struct mem_node *m, void *p)
4049 if (m->type == MEM_TYPE_MISC)
4051 struct marker_block *b = (struct marker_block *) m->start;
4052 ptrdiff_t offset = (char *) p - (char *) &b->markers[0];
4054 /* P must point to the start of a Lisp_Misc, not be
4055 one of the unused cells in the current misc block,
4056 and not be on the free-list. */
4057 return (offset >= 0
4058 && offset % sizeof b->markers[0] == 0
4059 && offset < (MARKER_BLOCK_SIZE * sizeof b->markers[0])
4060 && (b != marker_block
4061 || offset / sizeof b->markers[0] < marker_block_index)
4062 && ((union Lisp_Misc *) p)->u_any.type != Lisp_Misc_Free);
4064 else
4065 return 0;
4069 /* Value is non-zero if P is a pointer to a live vector-like object.
4070 M is a pointer to the mem_block for P. */
4072 static inline int
4073 live_vector_p (struct mem_node *m, void *p)
4075 return (p == m->start && m->type == MEM_TYPE_VECTORLIKE);
4079 /* Value is non-zero if P is a pointer to a live buffer. M is a
4080 pointer to the mem_block for P. */
4082 static inline int
4083 live_buffer_p (struct mem_node *m, void *p)
4085 /* P must point to the start of the block, and the buffer
4086 must not have been killed. */
4087 return (m->type == MEM_TYPE_BUFFER
4088 && p == m->start
4089 && !NILP (((struct buffer *) p)->BUFFER_INTERNAL_FIELD (name)));
4092 #endif /* GC_MARK_STACK || defined GC_MALLOC_CHECK */
4094 #if GC_MARK_STACK
4096 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4098 /* Array of objects that are kept alive because the C stack contains
4099 a pattern that looks like a reference to them . */
4101 #define MAX_ZOMBIES 10
4102 static Lisp_Object zombies[MAX_ZOMBIES];
4104 /* Number of zombie objects. */
4106 static EMACS_INT nzombies;
4108 /* Number of garbage collections. */
4110 static EMACS_INT ngcs;
4112 /* Average percentage of zombies per collection. */
4114 static double avg_zombies;
4116 /* Max. number of live and zombie objects. */
4118 static EMACS_INT max_live, max_zombies;
4120 /* Average number of live objects per GC. */
4122 static double avg_live;
4124 DEFUN ("gc-status", Fgc_status, Sgc_status, 0, 0, "",
4125 doc: /* Show information about live and zombie objects. */)
4126 (void)
4128 Lisp_Object args[8], zombie_list = Qnil;
4129 EMACS_INT i;
4130 for (i = 0; i < min (MAX_ZOMBIES, nzombies); i++)
4131 zombie_list = Fcons (zombies[i], zombie_list);
4132 args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d\nzombies: %S");
4133 args[1] = make_number (ngcs);
4134 args[2] = make_float (avg_live);
4135 args[3] = make_float (avg_zombies);
4136 args[4] = make_float (avg_zombies / avg_live / 100);
4137 args[5] = make_number (max_live);
4138 args[6] = make_number (max_zombies);
4139 args[7] = zombie_list;
4140 return Fmessage (8, args);
4143 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
4146 /* Mark OBJ if we can prove it's a Lisp_Object. */
4148 static inline void
4149 mark_maybe_object (Lisp_Object obj)
4151 void *po;
4152 struct mem_node *m;
4154 if (INTEGERP (obj))
4155 return;
4157 po = (void *) XPNTR (obj);
4158 m = mem_find (po);
4160 if (m != MEM_NIL)
4162 int mark_p = 0;
4164 switch (XTYPE (obj))
4166 case Lisp_String:
4167 mark_p = (live_string_p (m, po)
4168 && !STRING_MARKED_P ((struct Lisp_String *) po));
4169 break;
4171 case Lisp_Cons:
4172 mark_p = (live_cons_p (m, po) && !CONS_MARKED_P (XCONS (obj)));
4173 break;
4175 case Lisp_Symbol:
4176 mark_p = (live_symbol_p (m, po) && !XSYMBOL (obj)->gcmarkbit);
4177 break;
4179 case Lisp_Float:
4180 mark_p = (live_float_p (m, po) && !FLOAT_MARKED_P (XFLOAT (obj)));
4181 break;
4183 case Lisp_Vectorlike:
4184 /* Note: can't check BUFFERP before we know it's a
4185 buffer because checking that dereferences the pointer
4186 PO which might point anywhere. */
4187 if (live_vector_p (m, po))
4188 mark_p = !SUBRP (obj) && !VECTOR_MARKED_P (XVECTOR (obj));
4189 else if (live_buffer_p (m, po))
4190 mark_p = BUFFERP (obj) && !VECTOR_MARKED_P (XBUFFER (obj));
4191 break;
4193 case Lisp_Misc:
4194 mark_p = (live_misc_p (m, po) && !XMISCANY (obj)->gcmarkbit);
4195 break;
4197 default:
4198 break;
4201 if (mark_p)
4203 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4204 if (nzombies < MAX_ZOMBIES)
4205 zombies[nzombies] = obj;
4206 ++nzombies;
4207 #endif
4208 mark_object (obj);
4214 /* If P points to Lisp data, mark that as live if it isn't already
4215 marked. */
4217 static inline void
4218 mark_maybe_pointer (void *p)
4220 struct mem_node *m;
4222 /* Quickly rule out some values which can't point to Lisp data. */
4223 if ((intptr_t) p %
4224 #ifdef USE_LSB_TAG
4225 8 /* USE_LSB_TAG needs Lisp data to be aligned on multiples of 8. */
4226 #else
4227 2 /* We assume that Lisp data is aligned on even addresses. */
4228 #endif
4230 return;
4232 m = mem_find (p);
4233 if (m != MEM_NIL)
4235 Lisp_Object obj = Qnil;
4237 switch (m->type)
4239 case MEM_TYPE_NON_LISP:
4240 /* Nothing to do; not a pointer to Lisp memory. */
4241 break;
4243 case MEM_TYPE_BUFFER:
4244 if (live_buffer_p (m, p) && !VECTOR_MARKED_P ((struct buffer *)p))
4245 XSETVECTOR (obj, p);
4246 break;
4248 case MEM_TYPE_CONS:
4249 if (live_cons_p (m, p) && !CONS_MARKED_P ((struct Lisp_Cons *) p))
4250 XSETCONS (obj, p);
4251 break;
4253 case MEM_TYPE_STRING:
4254 if (live_string_p (m, p)
4255 && !STRING_MARKED_P ((struct Lisp_String *) p))
4256 XSETSTRING (obj, p);
4257 break;
4259 case MEM_TYPE_MISC:
4260 if (live_misc_p (m, p) && !((struct Lisp_Free *) p)->gcmarkbit)
4261 XSETMISC (obj, p);
4262 break;
4264 case MEM_TYPE_SYMBOL:
4265 if (live_symbol_p (m, p) && !((struct Lisp_Symbol *) p)->gcmarkbit)
4266 XSETSYMBOL (obj, p);
4267 break;
4269 case MEM_TYPE_FLOAT:
4270 if (live_float_p (m, p) && !FLOAT_MARKED_P (p))
4271 XSETFLOAT (obj, p);
4272 break;
4274 case MEM_TYPE_VECTORLIKE:
4275 if (live_vector_p (m, p))
4277 Lisp_Object tem;
4278 XSETVECTOR (tem, p);
4279 if (!SUBRP (tem) && !VECTOR_MARKED_P (XVECTOR (tem)))
4280 obj = tem;
4282 break;
4284 default:
4285 abort ();
4288 if (!NILP (obj))
4289 mark_object (obj);
4294 /* Alignment of pointer values. Use offsetof, as it sometimes returns
4295 a smaller alignment than GCC's __alignof__ and mark_memory might
4296 miss objects if __alignof__ were used. */
4297 #define GC_POINTER_ALIGNMENT offsetof (struct {char a; void *b;}, b)
4299 /* Define POINTERS_MIGHT_HIDE_IN_OBJECTS to 1 if marking via C pointers does
4300 not suffice, which is the typical case. A host where a Lisp_Object is
4301 wider than a pointer might allocate a Lisp_Object in non-adjacent halves.
4302 If USE_LSB_TAG, the bottom half is not a valid pointer, but it should
4303 suffice to widen it to to a Lisp_Object and check it that way. */
4304 #if defined USE_LSB_TAG || VAL_MAX < UINTPTR_MAX
4305 # if !defined USE_LSB_TAG && VAL_MAX < UINTPTR_MAX >> GCTYPEBITS
4306 /* If tag bits straddle pointer-word boundaries, neither mark_maybe_pointer
4307 nor mark_maybe_object can follow the pointers. This should not occur on
4308 any practical porting target. */
4309 # error "MSB type bits straddle pointer-word boundaries"
4310 # endif
4311 /* Marking via C pointers does not suffice, because Lisp_Objects contain
4312 pointer words that hold pointers ORed with type bits. */
4313 # define POINTERS_MIGHT_HIDE_IN_OBJECTS 1
4314 #else
4315 /* Marking via C pointers suffices, because Lisp_Objects contain pointer
4316 words that hold unmodified pointers. */
4317 # define POINTERS_MIGHT_HIDE_IN_OBJECTS 0
4318 #endif
4320 /* Mark Lisp objects referenced from the address range START+OFFSET..END
4321 or END+OFFSET..START. */
4323 static void
4324 mark_memory (void *start, void *end)
4326 void **pp;
4327 int i;
4329 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4330 nzombies = 0;
4331 #endif
4333 /* Make START the pointer to the start of the memory region,
4334 if it isn't already. */
4335 if (end < start)
4337 void *tem = start;
4338 start = end;
4339 end = tem;
4342 /* Mark Lisp data pointed to. This is necessary because, in some
4343 situations, the C compiler optimizes Lisp objects away, so that
4344 only a pointer to them remains. Example:
4346 DEFUN ("testme", Ftestme, Stestme, 0, 0, 0, "")
4349 Lisp_Object obj = build_string ("test");
4350 struct Lisp_String *s = XSTRING (obj);
4351 Fgarbage_collect ();
4352 fprintf (stderr, "test `%s'\n", s->data);
4353 return Qnil;
4356 Here, `obj' isn't really used, and the compiler optimizes it
4357 away. The only reference to the life string is through the
4358 pointer `s'. */
4360 for (pp = start; (void *) pp < end; pp++)
4361 for (i = 0; i < sizeof *pp; i += GC_POINTER_ALIGNMENT)
4363 void *p = *(void **) ((char *) pp + i);
4364 mark_maybe_pointer (p);
4365 if (POINTERS_MIGHT_HIDE_IN_OBJECTS)
4366 mark_maybe_object (widen_to_Lisp_Object (p));
4370 /* setjmp will work with GCC unless NON_SAVING_SETJMP is defined in
4371 the GCC system configuration. In gcc 3.2, the only systems for
4372 which this is so are i386-sco5 non-ELF, i386-sysv3 (maybe included
4373 by others?) and ns32k-pc532-min. */
4375 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
4377 static int setjmp_tested_p, longjmps_done;
4379 #define SETJMP_WILL_LIKELY_WORK "\
4381 Emacs garbage collector has been changed to use conservative stack\n\
4382 marking. Emacs has determined that the method it uses to do the\n\
4383 marking will likely work on your system, but this isn't sure.\n\
4385 If you are a system-programmer, or can get the help of a local wizard\n\
4386 who is, please take a look at the function mark_stack in alloc.c, and\n\
4387 verify that the methods used are appropriate for your system.\n\
4389 Please mail the result to <emacs-devel@gnu.org>.\n\
4392 #define SETJMP_WILL_NOT_WORK "\
4394 Emacs garbage collector has been changed to use conservative stack\n\
4395 marking. Emacs has determined that the default method it uses to do the\n\
4396 marking will not work on your system. We will need a system-dependent\n\
4397 solution for your system.\n\
4399 Please take a look at the function mark_stack in alloc.c, and\n\
4400 try to find a way to make it work on your system.\n\
4402 Note that you may get false negatives, depending on the compiler.\n\
4403 In particular, you need to use -O with GCC for this test.\n\
4405 Please mail the result to <emacs-devel@gnu.org>.\n\
4409 /* Perform a quick check if it looks like setjmp saves registers in a
4410 jmp_buf. Print a message to stderr saying so. When this test
4411 succeeds, this is _not_ a proof that setjmp is sufficient for
4412 conservative stack marking. Only the sources or a disassembly
4413 can prove that. */
4415 static void
4416 test_setjmp (void)
4418 char buf[10];
4419 register int x;
4420 jmp_buf jbuf;
4421 int result = 0;
4423 /* Arrange for X to be put in a register. */
4424 sprintf (buf, "1");
4425 x = strlen (buf);
4426 x = 2 * x - 1;
4428 setjmp (jbuf);
4429 if (longjmps_done == 1)
4431 /* Came here after the longjmp at the end of the function.
4433 If x == 1, the longjmp has restored the register to its
4434 value before the setjmp, and we can hope that setjmp
4435 saves all such registers in the jmp_buf, although that
4436 isn't sure.
4438 For other values of X, either something really strange is
4439 taking place, or the setjmp just didn't save the register. */
4441 if (x == 1)
4442 fprintf (stderr, SETJMP_WILL_LIKELY_WORK);
4443 else
4445 fprintf (stderr, SETJMP_WILL_NOT_WORK);
4446 exit (1);
4450 ++longjmps_done;
4451 x = 2;
4452 if (longjmps_done == 1)
4453 longjmp (jbuf, 1);
4456 #endif /* not GC_SAVE_REGISTERS_ON_STACK && not GC_SETJMP_WORKS */
4459 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
4461 /* Abort if anything GCPRO'd doesn't survive the GC. */
4463 static void
4464 check_gcpros (void)
4466 struct gcpro *p;
4467 ptrdiff_t i;
4469 for (p = gcprolist; p; p = p->next)
4470 for (i = 0; i < p->nvars; ++i)
4471 if (!survives_gc_p (p->var[i]))
4472 /* FIXME: It's not necessarily a bug. It might just be that the
4473 GCPRO is unnecessary or should release the object sooner. */
4474 abort ();
4477 #elif GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4479 static void
4480 dump_zombies (void)
4482 int i;
4484 fprintf (stderr, "\nZombies kept alive = %"pI"d:\n", nzombies);
4485 for (i = 0; i < min (MAX_ZOMBIES, nzombies); ++i)
4487 fprintf (stderr, " %d = ", i);
4488 debug_print (zombies[i]);
4492 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
4495 /* Mark live Lisp objects on the C stack.
4497 There are several system-dependent problems to consider when
4498 porting this to new architectures:
4500 Processor Registers
4502 We have to mark Lisp objects in CPU registers that can hold local
4503 variables or are used to pass parameters.
4505 If GC_SAVE_REGISTERS_ON_STACK is defined, it should expand to
4506 something that either saves relevant registers on the stack, or
4507 calls mark_maybe_object passing it each register's contents.
4509 If GC_SAVE_REGISTERS_ON_STACK is not defined, the current
4510 implementation assumes that calling setjmp saves registers we need
4511 to see in a jmp_buf which itself lies on the stack. This doesn't
4512 have to be true! It must be verified for each system, possibly
4513 by taking a look at the source code of setjmp.
4515 If __builtin_unwind_init is available (defined by GCC >= 2.8) we
4516 can use it as a machine independent method to store all registers
4517 to the stack. In this case the macros described in the previous
4518 two paragraphs are not used.
4520 Stack Layout
4522 Architectures differ in the way their processor stack is organized.
4523 For example, the stack might look like this
4525 +----------------+
4526 | Lisp_Object | size = 4
4527 +----------------+
4528 | something else | size = 2
4529 +----------------+
4530 | Lisp_Object | size = 4
4531 +----------------+
4532 | ... |
4534 In such a case, not every Lisp_Object will be aligned equally. To
4535 find all Lisp_Object on the stack it won't be sufficient to walk
4536 the stack in steps of 4 bytes. Instead, two passes will be
4537 necessary, one starting at the start of the stack, and a second
4538 pass starting at the start of the stack + 2. Likewise, if the
4539 minimal alignment of Lisp_Objects on the stack is 1, four passes
4540 would be necessary, each one starting with one byte more offset
4541 from the stack start. */
4543 static void
4544 mark_stack (void)
4546 void *end;
4548 #ifdef HAVE___BUILTIN_UNWIND_INIT
4549 /* Force callee-saved registers and register windows onto the stack.
4550 This is the preferred method if available, obviating the need for
4551 machine dependent methods. */
4552 __builtin_unwind_init ();
4553 end = &end;
4554 #else /* not HAVE___BUILTIN_UNWIND_INIT */
4555 #ifndef GC_SAVE_REGISTERS_ON_STACK
4556 /* jmp_buf may not be aligned enough on darwin-ppc64 */
4557 union aligned_jmpbuf {
4558 Lisp_Object o;
4559 jmp_buf j;
4560 } j;
4561 volatile int stack_grows_down_p = (char *) &j > (char *) stack_base;
4562 #endif
4563 /* This trick flushes the register windows so that all the state of
4564 the process is contained in the stack. */
4565 /* Fixme: Code in the Boehm GC suggests flushing (with `flushrs') is
4566 needed on ia64 too. See mach_dep.c, where it also says inline
4567 assembler doesn't work with relevant proprietary compilers. */
4568 #ifdef __sparc__
4569 #if defined (__sparc64__) && defined (__FreeBSD__)
4570 /* FreeBSD does not have a ta 3 handler. */
4571 asm ("flushw");
4572 #else
4573 asm ("ta 3");
4574 #endif
4575 #endif
4577 /* Save registers that we need to see on the stack. We need to see
4578 registers used to hold register variables and registers used to
4579 pass parameters. */
4580 #ifdef GC_SAVE_REGISTERS_ON_STACK
4581 GC_SAVE_REGISTERS_ON_STACK (end);
4582 #else /* not GC_SAVE_REGISTERS_ON_STACK */
4584 #ifndef GC_SETJMP_WORKS /* If it hasn't been checked yet that
4585 setjmp will definitely work, test it
4586 and print a message with the result
4587 of the test. */
4588 if (!setjmp_tested_p)
4590 setjmp_tested_p = 1;
4591 test_setjmp ();
4593 #endif /* GC_SETJMP_WORKS */
4595 setjmp (j.j);
4596 end = stack_grows_down_p ? (char *) &j + sizeof j : (char *) &j;
4597 #endif /* not GC_SAVE_REGISTERS_ON_STACK */
4598 #endif /* not HAVE___BUILTIN_UNWIND_INIT */
4600 /* This assumes that the stack is a contiguous region in memory. If
4601 that's not the case, something has to be done here to iterate
4602 over the stack segments. */
4603 mark_memory (stack_base, end);
4605 /* Allow for marking a secondary stack, like the register stack on the
4606 ia64. */
4607 #ifdef GC_MARK_SECONDARY_STACK
4608 GC_MARK_SECONDARY_STACK ();
4609 #endif
4611 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
4612 check_gcpros ();
4613 #endif
4616 #endif /* GC_MARK_STACK != 0 */
4619 /* Determine whether it is safe to access memory at address P. */
4620 static int
4621 valid_pointer_p (void *p)
4623 #ifdef WINDOWSNT
4624 return w32_valid_pointer_p (p, 16);
4625 #else
4626 int fd[2];
4628 /* Obviously, we cannot just access it (we would SEGV trying), so we
4629 trick the o/s to tell us whether p is a valid pointer.
4630 Unfortunately, we cannot use NULL_DEVICE here, as emacs_write may
4631 not validate p in that case. */
4633 if (pipe (fd) == 0)
4635 int valid = (emacs_write (fd[1], (char *) p, 16) == 16);
4636 emacs_close (fd[1]);
4637 emacs_close (fd[0]);
4638 return valid;
4641 return -1;
4642 #endif
4645 /* Return 1 if OBJ is a valid lisp object.
4646 Return 0 if OBJ is NOT a valid lisp object.
4647 Return -1 if we cannot validate OBJ.
4648 This function can be quite slow,
4649 so it should only be used in code for manual debugging. */
4652 valid_lisp_object_p (Lisp_Object obj)
4654 void *p;
4655 #if GC_MARK_STACK
4656 struct mem_node *m;
4657 #endif
4659 if (INTEGERP (obj))
4660 return 1;
4662 p = (void *) XPNTR (obj);
4663 if (PURE_POINTER_P (p))
4664 return 1;
4666 #if !GC_MARK_STACK
4667 return valid_pointer_p (p);
4668 #else
4670 m = mem_find (p);
4672 if (m == MEM_NIL)
4674 int valid = valid_pointer_p (p);
4675 if (valid <= 0)
4676 return valid;
4678 if (SUBRP (obj))
4679 return 1;
4681 return 0;
4684 switch (m->type)
4686 case MEM_TYPE_NON_LISP:
4687 return 0;
4689 case MEM_TYPE_BUFFER:
4690 return live_buffer_p (m, p);
4692 case MEM_TYPE_CONS:
4693 return live_cons_p (m, p);
4695 case MEM_TYPE_STRING:
4696 return live_string_p (m, p);
4698 case MEM_TYPE_MISC:
4699 return live_misc_p (m, p);
4701 case MEM_TYPE_SYMBOL:
4702 return live_symbol_p (m, p);
4704 case MEM_TYPE_FLOAT:
4705 return live_float_p (m, p);
4707 case MEM_TYPE_VECTORLIKE:
4708 return live_vector_p (m, p);
4710 default:
4711 break;
4714 return 0;
4715 #endif
4721 /***********************************************************************
4722 Pure Storage Management
4723 ***********************************************************************/
4725 /* Allocate room for SIZE bytes from pure Lisp storage and return a
4726 pointer to it. TYPE is the Lisp type for which the memory is
4727 allocated. TYPE < 0 means it's not used for a Lisp object. */
4729 static void *
4730 pure_alloc (size_t size, int type)
4732 void *result;
4733 #ifdef USE_LSB_TAG
4734 size_t alignment = (1 << GCTYPEBITS);
4735 #else
4736 size_t alignment = sizeof (EMACS_INT);
4738 /* Give Lisp_Floats an extra alignment. */
4739 if (type == Lisp_Float)
4741 #if defined __GNUC__ && __GNUC__ >= 2
4742 alignment = __alignof (struct Lisp_Float);
4743 #else
4744 alignment = sizeof (struct Lisp_Float);
4745 #endif
4747 #endif
4749 again:
4750 if (type >= 0)
4752 /* Allocate space for a Lisp object from the beginning of the free
4753 space with taking account of alignment. */
4754 result = ALIGN (purebeg + pure_bytes_used_lisp, alignment);
4755 pure_bytes_used_lisp = ((char *)result - (char *)purebeg) + size;
4757 else
4759 /* Allocate space for a non-Lisp object from the end of the free
4760 space. */
4761 pure_bytes_used_non_lisp += size;
4762 result = purebeg + pure_size - pure_bytes_used_non_lisp;
4764 pure_bytes_used = pure_bytes_used_lisp + pure_bytes_used_non_lisp;
4766 if (pure_bytes_used <= pure_size)
4767 return result;
4769 /* Don't allocate a large amount here,
4770 because it might get mmap'd and then its address
4771 might not be usable. */
4772 purebeg = (char *) xmalloc (10000);
4773 pure_size = 10000;
4774 pure_bytes_used_before_overflow += pure_bytes_used - size;
4775 pure_bytes_used = 0;
4776 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
4777 goto again;
4781 /* Print a warning if PURESIZE is too small. */
4783 void
4784 check_pure_size (void)
4786 if (pure_bytes_used_before_overflow)
4787 message (("emacs:0:Pure Lisp storage overflow (approx. %"pI"d"
4788 " bytes needed)"),
4789 pure_bytes_used + pure_bytes_used_before_overflow);
4793 /* Find the byte sequence {DATA[0], ..., DATA[NBYTES-1], '\0'} from
4794 the non-Lisp data pool of the pure storage, and return its start
4795 address. Return NULL if not found. */
4797 static char *
4798 find_string_data_in_pure (const char *data, ptrdiff_t nbytes)
4800 int i;
4801 ptrdiff_t skip, bm_skip[256], last_char_skip, infinity, start, start_max;
4802 const unsigned char *p;
4803 char *non_lisp_beg;
4805 if (pure_bytes_used_non_lisp <= nbytes)
4806 return NULL;
4808 /* Set up the Boyer-Moore table. */
4809 skip = nbytes + 1;
4810 for (i = 0; i < 256; i++)
4811 bm_skip[i] = skip;
4813 p = (const unsigned char *) data;
4814 while (--skip > 0)
4815 bm_skip[*p++] = skip;
4817 last_char_skip = bm_skip['\0'];
4819 non_lisp_beg = purebeg + pure_size - pure_bytes_used_non_lisp;
4820 start_max = pure_bytes_used_non_lisp - (nbytes + 1);
4822 /* See the comments in the function `boyer_moore' (search.c) for the
4823 use of `infinity'. */
4824 infinity = pure_bytes_used_non_lisp + 1;
4825 bm_skip['\0'] = infinity;
4827 p = (const unsigned char *) non_lisp_beg + nbytes;
4828 start = 0;
4831 /* Check the last character (== '\0'). */
4834 start += bm_skip[*(p + start)];
4836 while (start <= start_max);
4838 if (start < infinity)
4839 /* Couldn't find the last character. */
4840 return NULL;
4842 /* No less than `infinity' means we could find the last
4843 character at `p[start - infinity]'. */
4844 start -= infinity;
4846 /* Check the remaining characters. */
4847 if (memcmp (data, non_lisp_beg + start, nbytes) == 0)
4848 /* Found. */
4849 return non_lisp_beg + start;
4851 start += last_char_skip;
4853 while (start <= start_max);
4855 return NULL;
4859 /* Return a string allocated in pure space. DATA is a buffer holding
4860 NCHARS characters, and NBYTES bytes of string data. MULTIBYTE
4861 non-zero means make the result string multibyte.
4863 Must get an error if pure storage is full, since if it cannot hold
4864 a large string it may be able to hold conses that point to that
4865 string; then the string is not protected from gc. */
4867 Lisp_Object
4868 make_pure_string (const char *data,
4869 ptrdiff_t nchars, ptrdiff_t nbytes, int multibyte)
4871 Lisp_Object string;
4872 struct Lisp_String *s;
4874 s = (struct Lisp_String *) pure_alloc (sizeof *s, Lisp_String);
4875 s->data = (unsigned char *) find_string_data_in_pure (data, nbytes);
4876 if (s->data == NULL)
4878 s->data = (unsigned char *) pure_alloc (nbytes + 1, -1);
4879 memcpy (s->data, data, nbytes);
4880 s->data[nbytes] = '\0';
4882 s->size = nchars;
4883 s->size_byte = multibyte ? nbytes : -1;
4884 s->intervals = NULL_INTERVAL;
4885 XSETSTRING (string, s);
4886 return string;
4889 /* Return a string a string allocated in pure space. Do not allocate
4890 the string data, just point to DATA. */
4892 Lisp_Object
4893 make_pure_c_string (const char *data)
4895 Lisp_Object string;
4896 struct Lisp_String *s;
4897 ptrdiff_t nchars = strlen (data);
4899 s = (struct Lisp_String *) pure_alloc (sizeof *s, Lisp_String);
4900 s->size = nchars;
4901 s->size_byte = -1;
4902 s->data = (unsigned char *) data;
4903 s->intervals = NULL_INTERVAL;
4904 XSETSTRING (string, s);
4905 return string;
4908 /* Return a cons allocated from pure space. Give it pure copies
4909 of CAR as car and CDR as cdr. */
4911 Lisp_Object
4912 pure_cons (Lisp_Object car, Lisp_Object cdr)
4914 register Lisp_Object new;
4915 struct Lisp_Cons *p;
4917 p = (struct Lisp_Cons *) pure_alloc (sizeof *p, Lisp_Cons);
4918 XSETCONS (new, p);
4919 XSETCAR (new, Fpurecopy (car));
4920 XSETCDR (new, Fpurecopy (cdr));
4921 return new;
4925 /* Value is a float object with value NUM allocated from pure space. */
4927 static Lisp_Object
4928 make_pure_float (double num)
4930 register Lisp_Object new;
4931 struct Lisp_Float *p;
4933 p = (struct Lisp_Float *) pure_alloc (sizeof *p, Lisp_Float);
4934 XSETFLOAT (new, p);
4935 XFLOAT_INIT (new, num);
4936 return new;
4940 /* Return a vector with room for LEN Lisp_Objects allocated from
4941 pure space. */
4943 static Lisp_Object
4944 make_pure_vector (ptrdiff_t len)
4946 Lisp_Object new;
4947 struct Lisp_Vector *p;
4948 size_t size = (offsetof (struct Lisp_Vector, contents)
4949 + len * sizeof (Lisp_Object));
4951 p = (struct Lisp_Vector *) pure_alloc (size, Lisp_Vectorlike);
4952 XSETVECTOR (new, p);
4953 XVECTOR (new)->header.size = len;
4954 return new;
4958 DEFUN ("purecopy", Fpurecopy, Spurecopy, 1, 1, 0,
4959 doc: /* Make a copy of object OBJ in pure storage.
4960 Recursively copies contents of vectors and cons cells.
4961 Does not copy symbols. Copies strings without text properties. */)
4962 (register Lisp_Object obj)
4964 if (NILP (Vpurify_flag))
4965 return obj;
4967 if (PURE_POINTER_P (XPNTR (obj)))
4968 return obj;
4970 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
4972 Lisp_Object tmp = Fgethash (obj, Vpurify_flag, Qnil);
4973 if (!NILP (tmp))
4974 return tmp;
4977 if (CONSP (obj))
4978 obj = pure_cons (XCAR (obj), XCDR (obj));
4979 else if (FLOATP (obj))
4980 obj = make_pure_float (XFLOAT_DATA (obj));
4981 else if (STRINGP (obj))
4982 obj = make_pure_string (SSDATA (obj), SCHARS (obj),
4983 SBYTES (obj),
4984 STRING_MULTIBYTE (obj));
4985 else if (COMPILEDP (obj) || VECTORP (obj))
4987 register struct Lisp_Vector *vec;
4988 register ptrdiff_t i;
4989 ptrdiff_t size;
4991 size = ASIZE (obj);
4992 if (size & PSEUDOVECTOR_FLAG)
4993 size &= PSEUDOVECTOR_SIZE_MASK;
4994 vec = XVECTOR (make_pure_vector (size));
4995 for (i = 0; i < size; i++)
4996 vec->contents[i] = Fpurecopy (XVECTOR (obj)->contents[i]);
4997 if (COMPILEDP (obj))
4999 XSETPVECTYPE (vec, PVEC_COMPILED);
5000 XSETCOMPILED (obj, vec);
5002 else
5003 XSETVECTOR (obj, vec);
5005 else if (MARKERP (obj))
5006 error ("Attempt to copy a marker to pure storage");
5007 else
5008 /* Not purified, don't hash-cons. */
5009 return obj;
5011 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5012 Fputhash (obj, obj, Vpurify_flag);
5014 return obj;
5019 /***********************************************************************
5020 Protection from GC
5021 ***********************************************************************/
5023 /* Put an entry in staticvec, pointing at the variable with address
5024 VARADDRESS. */
5026 void
5027 staticpro (Lisp_Object *varaddress)
5029 staticvec[staticidx++] = varaddress;
5030 if (staticidx >= NSTATICS)
5031 abort ();
5035 /***********************************************************************
5036 Protection from GC
5037 ***********************************************************************/
5039 /* Temporarily prevent garbage collection. */
5041 ptrdiff_t
5042 inhibit_garbage_collection (void)
5044 ptrdiff_t count = SPECPDL_INDEX ();
5046 specbind (Qgc_cons_threshold, make_number (MOST_POSITIVE_FIXNUM));
5047 return count;
5051 DEFUN ("garbage-collect", Fgarbage_collect, Sgarbage_collect, 0, 0, "",
5052 doc: /* Reclaim storage for Lisp objects no longer needed.
5053 Garbage collection happens automatically if you cons more than
5054 `gc-cons-threshold' bytes of Lisp data since previous garbage collection.
5055 `garbage-collect' normally returns a list with info on amount of space in use:
5056 ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
5057 (USED-MISCS . FREE-MISCS) USED-STRING-CHARS USED-VECTOR-SLOTS
5058 (USED-FLOATS . FREE-FLOATS) (USED-INTERVALS . FREE-INTERVALS)
5059 (USED-STRINGS . FREE-STRINGS))
5060 However, if there was overflow in pure space, `garbage-collect'
5061 returns nil, because real GC can't be done.
5062 See Info node `(elisp)Garbage Collection'. */)
5063 (void)
5065 register struct specbinding *bind;
5066 char stack_top_variable;
5067 ptrdiff_t i;
5068 int message_p;
5069 Lisp_Object total[8];
5070 ptrdiff_t count = SPECPDL_INDEX ();
5071 EMACS_TIME t1, t2, t3;
5073 if (abort_on_gc)
5074 abort ();
5076 /* Can't GC if pure storage overflowed because we can't determine
5077 if something is a pure object or not. */
5078 if (pure_bytes_used_before_overflow)
5079 return Qnil;
5081 CHECK_CONS_LIST ();
5083 /* Don't keep undo information around forever.
5084 Do this early on, so it is no problem if the user quits. */
5086 register struct buffer *nextb = all_buffers;
5088 while (nextb)
5090 /* If a buffer's undo list is Qt, that means that undo is
5091 turned off in that buffer. Calling truncate_undo_list on
5092 Qt tends to return NULL, which effectively turns undo back on.
5093 So don't call truncate_undo_list if undo_list is Qt. */
5094 if (! NILP (nextb->BUFFER_INTERNAL_FIELD (name)) && ! EQ (nextb->BUFFER_INTERNAL_FIELD (undo_list), Qt))
5095 truncate_undo_list (nextb);
5097 /* Shrink buffer gaps, but skip indirect and dead buffers. */
5098 if (nextb->base_buffer == 0 && !NILP (nextb->BUFFER_INTERNAL_FIELD (name))
5099 && ! nextb->text->inhibit_shrinking)
5101 /* If a buffer's gap size is more than 10% of the buffer
5102 size, or larger than 2000 bytes, then shrink it
5103 accordingly. Keep a minimum size of 20 bytes. */
5104 int size = min (2000, max (20, (nextb->text->z_byte / 10)));
5106 if (nextb->text->gap_size > size)
5108 struct buffer *save_current = current_buffer;
5109 current_buffer = nextb;
5110 make_gap (-(nextb->text->gap_size - size));
5111 current_buffer = save_current;
5115 nextb = nextb->header.next.buffer;
5119 EMACS_GET_TIME (t1);
5121 /* In case user calls debug_print during GC,
5122 don't let that cause a recursive GC. */
5123 consing_since_gc = 0;
5125 /* Save what's currently displayed in the echo area. */
5126 message_p = push_message ();
5127 record_unwind_protect (pop_message_unwind, Qnil);
5129 /* Save a copy of the contents of the stack, for debugging. */
5130 #if MAX_SAVE_STACK > 0
5131 if (NILP (Vpurify_flag))
5133 char *stack;
5134 ptrdiff_t stack_size;
5135 if (&stack_top_variable < stack_bottom)
5137 stack = &stack_top_variable;
5138 stack_size = stack_bottom - &stack_top_variable;
5140 else
5142 stack = stack_bottom;
5143 stack_size = &stack_top_variable - stack_bottom;
5145 if (stack_size <= MAX_SAVE_STACK)
5147 if (stack_copy_size < stack_size)
5149 stack_copy = (char *) xrealloc (stack_copy, stack_size);
5150 stack_copy_size = stack_size;
5152 memcpy (stack_copy, stack, stack_size);
5155 #endif /* MAX_SAVE_STACK > 0 */
5157 if (garbage_collection_messages)
5158 message1_nolog ("Garbage collecting...");
5160 BLOCK_INPUT;
5162 shrink_regexp_cache ();
5164 gc_in_progress = 1;
5166 /* clear_marks (); */
5168 /* Mark all the special slots that serve as the roots of accessibility. */
5170 for (i = 0; i < staticidx; i++)
5171 mark_object (*staticvec[i]);
5173 for (bind = specpdl; bind != specpdl_ptr; bind++)
5175 mark_object (bind->symbol);
5176 mark_object (bind->old_value);
5178 mark_terminals ();
5179 mark_kboards ();
5180 mark_ttys ();
5182 #ifdef USE_GTK
5184 extern void xg_mark_data (void);
5185 xg_mark_data ();
5187 #endif
5189 #if (GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS \
5190 || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
5191 mark_stack ();
5192 #else
5194 register struct gcpro *tail;
5195 for (tail = gcprolist; tail; tail = tail->next)
5196 for (i = 0; i < tail->nvars; i++)
5197 mark_object (tail->var[i]);
5199 mark_byte_stack ();
5201 struct catchtag *catch;
5202 struct handler *handler;
5204 for (catch = catchlist; catch; catch = catch->next)
5206 mark_object (catch->tag);
5207 mark_object (catch->val);
5209 for (handler = handlerlist; handler; handler = handler->next)
5211 mark_object (handler->handler);
5212 mark_object (handler->var);
5215 mark_backtrace ();
5216 #endif
5218 #ifdef HAVE_WINDOW_SYSTEM
5219 mark_fringe_data ();
5220 #endif
5222 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
5223 mark_stack ();
5224 #endif
5226 /* Everything is now marked, except for the things that require special
5227 finalization, i.e. the undo_list.
5228 Look thru every buffer's undo list
5229 for elements that update markers that were not marked,
5230 and delete them. */
5232 register struct buffer *nextb = all_buffers;
5234 while (nextb)
5236 /* If a buffer's undo list is Qt, that means that undo is
5237 turned off in that buffer. Calling truncate_undo_list on
5238 Qt tends to return NULL, which effectively turns undo back on.
5239 So don't call truncate_undo_list if undo_list is Qt. */
5240 if (! EQ (nextb->BUFFER_INTERNAL_FIELD (undo_list), Qt))
5242 Lisp_Object tail, prev;
5243 tail = nextb->BUFFER_INTERNAL_FIELD (undo_list);
5244 prev = Qnil;
5245 while (CONSP (tail))
5247 if (CONSP (XCAR (tail))
5248 && MARKERP (XCAR (XCAR (tail)))
5249 && !XMARKER (XCAR (XCAR (tail)))->gcmarkbit)
5251 if (NILP (prev))
5252 nextb->BUFFER_INTERNAL_FIELD (undo_list) = tail = XCDR (tail);
5253 else
5255 tail = XCDR (tail);
5256 XSETCDR (prev, tail);
5259 else
5261 prev = tail;
5262 tail = XCDR (tail);
5266 /* Now that we have stripped the elements that need not be in the
5267 undo_list any more, we can finally mark the list. */
5268 mark_object (nextb->BUFFER_INTERNAL_FIELD (undo_list));
5270 nextb = nextb->header.next.buffer;
5274 gc_sweep ();
5276 /* Clear the mark bits that we set in certain root slots. */
5278 unmark_byte_stack ();
5279 VECTOR_UNMARK (&buffer_defaults);
5280 VECTOR_UNMARK (&buffer_local_symbols);
5282 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES && 0
5283 dump_zombies ();
5284 #endif
5286 UNBLOCK_INPUT;
5288 CHECK_CONS_LIST ();
5290 /* clear_marks (); */
5291 gc_in_progress = 0;
5293 consing_since_gc = 0;
5294 if (gc_cons_threshold < 10000)
5295 gc_cons_threshold = 10000;
5297 gc_relative_threshold = 0;
5298 if (FLOATP (Vgc_cons_percentage))
5299 { /* Set gc_cons_combined_threshold. */
5300 double tot = 0;
5302 tot += total_conses * sizeof (struct Lisp_Cons);
5303 tot += total_symbols * sizeof (struct Lisp_Symbol);
5304 tot += total_markers * sizeof (union Lisp_Misc);
5305 tot += total_string_size;
5306 tot += total_vector_size * sizeof (Lisp_Object);
5307 tot += total_floats * sizeof (struct Lisp_Float);
5308 tot += total_intervals * sizeof (struct interval);
5309 tot += total_strings * sizeof (struct Lisp_String);
5311 tot *= XFLOAT_DATA (Vgc_cons_percentage);
5312 if (0 < tot)
5314 if (tot < TYPE_MAXIMUM (EMACS_INT))
5315 gc_relative_threshold = tot;
5316 else
5317 gc_relative_threshold = TYPE_MAXIMUM (EMACS_INT);
5321 if (garbage_collection_messages)
5323 if (message_p || minibuf_level > 0)
5324 restore_message ();
5325 else
5326 message1_nolog ("Garbage collecting...done");
5329 unbind_to (count, Qnil);
5331 total[0] = Fcons (make_number (total_conses),
5332 make_number (total_free_conses));
5333 total[1] = Fcons (make_number (total_symbols),
5334 make_number (total_free_symbols));
5335 total[2] = Fcons (make_number (total_markers),
5336 make_number (total_free_markers));
5337 total[3] = make_number (total_string_size);
5338 total[4] = make_number (total_vector_size);
5339 total[5] = Fcons (make_number (total_floats),
5340 make_number (total_free_floats));
5341 total[6] = Fcons (make_number (total_intervals),
5342 make_number (total_free_intervals));
5343 total[7] = Fcons (make_number (total_strings),
5344 make_number (total_free_strings));
5346 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
5348 /* Compute average percentage of zombies. */
5349 double nlive = 0;
5351 for (i = 0; i < 7; ++i)
5352 if (CONSP (total[i]))
5353 nlive += XFASTINT (XCAR (total[i]));
5355 avg_live = (avg_live * ngcs + nlive) / (ngcs + 1);
5356 max_live = max (nlive, max_live);
5357 avg_zombies = (avg_zombies * ngcs + nzombies) / (ngcs + 1);
5358 max_zombies = max (nzombies, max_zombies);
5359 ++ngcs;
5361 #endif
5363 if (!NILP (Vpost_gc_hook))
5365 ptrdiff_t gc_count = inhibit_garbage_collection ();
5366 safe_run_hooks (Qpost_gc_hook);
5367 unbind_to (gc_count, Qnil);
5370 /* Accumulate statistics. */
5371 EMACS_GET_TIME (t2);
5372 EMACS_SUB_TIME (t3, t2, t1);
5373 if (FLOATP (Vgc_elapsed))
5374 Vgc_elapsed = make_float (XFLOAT_DATA (Vgc_elapsed) +
5375 EMACS_SECS (t3) +
5376 EMACS_USECS (t3) * 1.0e-6);
5377 gcs_done++;
5379 return Flist (sizeof total / sizeof *total, total);
5383 /* Mark Lisp objects in glyph matrix MATRIX. Currently the
5384 only interesting objects referenced from glyphs are strings. */
5386 static void
5387 mark_glyph_matrix (struct glyph_matrix *matrix)
5389 struct glyph_row *row = matrix->rows;
5390 struct glyph_row *end = row + matrix->nrows;
5392 for (; row < end; ++row)
5393 if (row->enabled_p)
5395 int area;
5396 for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
5398 struct glyph *glyph = row->glyphs[area];
5399 struct glyph *end_glyph = glyph + row->used[area];
5401 for (; glyph < end_glyph; ++glyph)
5402 if (STRINGP (glyph->object)
5403 && !STRING_MARKED_P (XSTRING (glyph->object)))
5404 mark_object (glyph->object);
5410 /* Mark Lisp faces in the face cache C. */
5412 static void
5413 mark_face_cache (struct face_cache *c)
5415 if (c)
5417 int i, j;
5418 for (i = 0; i < c->used; ++i)
5420 struct face *face = FACE_FROM_ID (c->f, i);
5422 if (face)
5424 for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
5425 mark_object (face->lface[j]);
5433 /* Mark reference to a Lisp_Object.
5434 If the object referred to has not been seen yet, recursively mark
5435 all the references contained in it. */
5437 #define LAST_MARKED_SIZE 500
5438 static Lisp_Object last_marked[LAST_MARKED_SIZE];
5439 static int last_marked_index;
5441 /* For debugging--call abort when we cdr down this many
5442 links of a list, in mark_object. In debugging,
5443 the call to abort will hit a breakpoint.
5444 Normally this is zero and the check never goes off. */
5445 ptrdiff_t mark_object_loop_halt EXTERNALLY_VISIBLE;
5447 static void
5448 mark_vectorlike (struct Lisp_Vector *ptr)
5450 ptrdiff_t size = ptr->header.size;
5451 ptrdiff_t i;
5453 eassert (!VECTOR_MARKED_P (ptr));
5454 VECTOR_MARK (ptr); /* Else mark it */
5455 if (size & PSEUDOVECTOR_FLAG)
5456 size &= PSEUDOVECTOR_SIZE_MASK;
5458 /* Note that this size is not the memory-footprint size, but only
5459 the number of Lisp_Object fields that we should trace.
5460 The distinction is used e.g. by Lisp_Process which places extra
5461 non-Lisp_Object fields at the end of the structure. */
5462 for (i = 0; i < size; i++) /* and then mark its elements */
5463 mark_object (ptr->contents[i]);
5466 /* Like mark_vectorlike but optimized for char-tables (and
5467 sub-char-tables) assuming that the contents are mostly integers or
5468 symbols. */
5470 static void
5471 mark_char_table (struct Lisp_Vector *ptr)
5473 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
5474 int i;
5476 eassert (!VECTOR_MARKED_P (ptr));
5477 VECTOR_MARK (ptr);
5478 for (i = 0; i < size; i++)
5480 Lisp_Object val = ptr->contents[i];
5482 if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->gcmarkbit))
5483 continue;
5484 if (SUB_CHAR_TABLE_P (val))
5486 if (! VECTOR_MARKED_P (XVECTOR (val)))
5487 mark_char_table (XVECTOR (val));
5489 else
5490 mark_object (val);
5494 void
5495 mark_object (Lisp_Object arg)
5497 register Lisp_Object obj = arg;
5498 #ifdef GC_CHECK_MARKED_OBJECTS
5499 void *po;
5500 struct mem_node *m;
5501 #endif
5502 ptrdiff_t cdr_count = 0;
5504 loop:
5506 if (PURE_POINTER_P (XPNTR (obj)))
5507 return;
5509 last_marked[last_marked_index++] = obj;
5510 if (last_marked_index == LAST_MARKED_SIZE)
5511 last_marked_index = 0;
5513 /* Perform some sanity checks on the objects marked here. Abort if
5514 we encounter an object we know is bogus. This increases GC time
5515 by ~80%, and requires compilation with GC_MARK_STACK != 0. */
5516 #ifdef GC_CHECK_MARKED_OBJECTS
5518 po = (void *) XPNTR (obj);
5520 /* Check that the object pointed to by PO is known to be a Lisp
5521 structure allocated from the heap. */
5522 #define CHECK_ALLOCATED() \
5523 do { \
5524 m = mem_find (po); \
5525 if (m == MEM_NIL) \
5526 abort (); \
5527 } while (0)
5529 /* Check that the object pointed to by PO is live, using predicate
5530 function LIVEP. */
5531 #define CHECK_LIVE(LIVEP) \
5532 do { \
5533 if (!LIVEP (m, po)) \
5534 abort (); \
5535 } while (0)
5537 /* Check both of the above conditions. */
5538 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) \
5539 do { \
5540 CHECK_ALLOCATED (); \
5541 CHECK_LIVE (LIVEP); \
5542 } while (0) \
5544 #else /* not GC_CHECK_MARKED_OBJECTS */
5546 #define CHECK_LIVE(LIVEP) (void) 0
5547 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) (void) 0
5549 #endif /* not GC_CHECK_MARKED_OBJECTS */
5551 switch (SWITCH_ENUM_CAST (XTYPE (obj)))
5553 case Lisp_String:
5555 register struct Lisp_String *ptr = XSTRING (obj);
5556 if (STRING_MARKED_P (ptr))
5557 break;
5558 CHECK_ALLOCATED_AND_LIVE (live_string_p);
5559 MARK_INTERVAL_TREE (ptr->intervals);
5560 MARK_STRING (ptr);
5561 #ifdef GC_CHECK_STRING_BYTES
5562 /* Check that the string size recorded in the string is the
5563 same as the one recorded in the sdata structure. */
5564 CHECK_STRING_BYTES (ptr);
5565 #endif /* GC_CHECK_STRING_BYTES */
5567 break;
5569 case Lisp_Vectorlike:
5570 if (VECTOR_MARKED_P (XVECTOR (obj)))
5571 break;
5572 #ifdef GC_CHECK_MARKED_OBJECTS
5573 m = mem_find (po);
5574 if (m == MEM_NIL && !SUBRP (obj)
5575 && po != &buffer_defaults
5576 && po != &buffer_local_symbols)
5577 abort ();
5578 #endif /* GC_CHECK_MARKED_OBJECTS */
5580 if (BUFFERP (obj))
5582 #ifdef GC_CHECK_MARKED_OBJECTS
5583 if (po != &buffer_defaults && po != &buffer_local_symbols)
5585 struct buffer *b;
5586 for (b = all_buffers; b && b != po; b = b->header.next.buffer)
5588 if (b == NULL)
5589 abort ();
5591 #endif /* GC_CHECK_MARKED_OBJECTS */
5592 mark_buffer (obj);
5594 else if (SUBRP (obj))
5595 break;
5596 else if (COMPILEDP (obj))
5597 /* We could treat this just like a vector, but it is better to
5598 save the COMPILED_CONSTANTS element for last and avoid
5599 recursion there. */
5601 register struct Lisp_Vector *ptr = XVECTOR (obj);
5602 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
5603 int i;
5605 CHECK_LIVE (live_vector_p);
5606 VECTOR_MARK (ptr); /* Else mark it */
5607 for (i = 0; i < size; i++) /* and then mark its elements */
5609 if (i != COMPILED_CONSTANTS)
5610 mark_object (ptr->contents[i]);
5612 obj = ptr->contents[COMPILED_CONSTANTS];
5613 goto loop;
5615 else if (FRAMEP (obj))
5617 register struct frame *ptr = XFRAME (obj);
5618 mark_vectorlike (XVECTOR (obj));
5619 mark_face_cache (ptr->face_cache);
5621 else if (WINDOWP (obj))
5623 register struct Lisp_Vector *ptr = XVECTOR (obj);
5624 struct window *w = XWINDOW (obj);
5625 mark_vectorlike (ptr);
5626 /* Mark glyphs for leaf windows. Marking window matrices is
5627 sufficient because frame matrices use the same glyph
5628 memory. */
5629 if (NILP (w->hchild)
5630 && NILP (w->vchild)
5631 && w->current_matrix)
5633 mark_glyph_matrix (w->current_matrix);
5634 mark_glyph_matrix (w->desired_matrix);
5637 else if (HASH_TABLE_P (obj))
5639 struct Lisp_Hash_Table *h = XHASH_TABLE (obj);
5640 mark_vectorlike ((struct Lisp_Vector *)h);
5641 /* If hash table is not weak, mark all keys and values.
5642 For weak tables, mark only the vector. */
5643 if (NILP (h->weak))
5644 mark_object (h->key_and_value);
5645 else
5646 VECTOR_MARK (XVECTOR (h->key_and_value));
5648 else if (CHAR_TABLE_P (obj))
5649 mark_char_table (XVECTOR (obj));
5650 else
5651 mark_vectorlike (XVECTOR (obj));
5652 break;
5654 case Lisp_Symbol:
5656 register struct Lisp_Symbol *ptr = XSYMBOL (obj);
5657 struct Lisp_Symbol *ptrx;
5659 if (ptr->gcmarkbit)
5660 break;
5661 CHECK_ALLOCATED_AND_LIVE (live_symbol_p);
5662 ptr->gcmarkbit = 1;
5663 mark_object (ptr->function);
5664 mark_object (ptr->plist);
5665 switch (ptr->redirect)
5667 case SYMBOL_PLAINVAL: mark_object (SYMBOL_VAL (ptr)); break;
5668 case SYMBOL_VARALIAS:
5670 Lisp_Object tem;
5671 XSETSYMBOL (tem, SYMBOL_ALIAS (ptr));
5672 mark_object (tem);
5673 break;
5675 case SYMBOL_LOCALIZED:
5677 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
5678 /* If the value is forwarded to a buffer or keyboard field,
5679 these are marked when we see the corresponding object.
5680 And if it's forwarded to a C variable, either it's not
5681 a Lisp_Object var, or it's staticpro'd already. */
5682 mark_object (blv->where);
5683 mark_object (blv->valcell);
5684 mark_object (blv->defcell);
5685 break;
5687 case SYMBOL_FORWARDED:
5688 /* If the value is forwarded to a buffer or keyboard field,
5689 these are marked when we see the corresponding object.
5690 And if it's forwarded to a C variable, either it's not
5691 a Lisp_Object var, or it's staticpro'd already. */
5692 break;
5693 default: abort ();
5695 if (!PURE_POINTER_P (XSTRING (ptr->xname)))
5696 MARK_STRING (XSTRING (ptr->xname));
5697 MARK_INTERVAL_TREE (STRING_INTERVALS (ptr->xname));
5699 ptr = ptr->next;
5700 if (ptr)
5702 ptrx = ptr; /* Use of ptrx avoids compiler bug on Sun */
5703 XSETSYMBOL (obj, ptrx);
5704 goto loop;
5707 break;
5709 case Lisp_Misc:
5710 CHECK_ALLOCATED_AND_LIVE (live_misc_p);
5711 if (XMISCANY (obj)->gcmarkbit)
5712 break;
5713 XMISCANY (obj)->gcmarkbit = 1;
5715 switch (XMISCTYPE (obj))
5718 case Lisp_Misc_Marker:
5719 /* DO NOT mark thru the marker's chain.
5720 The buffer's markers chain does not preserve markers from gc;
5721 instead, markers are removed from the chain when freed by gc. */
5722 break;
5724 case Lisp_Misc_Save_Value:
5725 #if GC_MARK_STACK
5727 register struct Lisp_Save_Value *ptr = XSAVE_VALUE (obj);
5728 /* If DOGC is set, POINTER is the address of a memory
5729 area containing INTEGER potential Lisp_Objects. */
5730 if (ptr->dogc)
5732 Lisp_Object *p = (Lisp_Object *) ptr->pointer;
5733 ptrdiff_t nelt;
5734 for (nelt = ptr->integer; nelt > 0; nelt--, p++)
5735 mark_maybe_object (*p);
5738 #endif
5739 break;
5741 case Lisp_Misc_Overlay:
5743 struct Lisp_Overlay *ptr = XOVERLAY (obj);
5744 mark_object (ptr->start);
5745 mark_object (ptr->end);
5746 mark_object (ptr->plist);
5747 if (ptr->next)
5749 XSETMISC (obj, ptr->next);
5750 goto loop;
5753 break;
5755 default:
5756 abort ();
5758 break;
5760 case Lisp_Cons:
5762 register struct Lisp_Cons *ptr = XCONS (obj);
5763 if (CONS_MARKED_P (ptr))
5764 break;
5765 CHECK_ALLOCATED_AND_LIVE (live_cons_p);
5766 CONS_MARK (ptr);
5767 /* If the cdr is nil, avoid recursion for the car. */
5768 if (EQ (ptr->u.cdr, Qnil))
5770 obj = ptr->car;
5771 cdr_count = 0;
5772 goto loop;
5774 mark_object (ptr->car);
5775 obj = ptr->u.cdr;
5776 cdr_count++;
5777 if (cdr_count == mark_object_loop_halt)
5778 abort ();
5779 goto loop;
5782 case Lisp_Float:
5783 CHECK_ALLOCATED_AND_LIVE (live_float_p);
5784 FLOAT_MARK (XFLOAT (obj));
5785 break;
5787 case_Lisp_Int:
5788 break;
5790 default:
5791 abort ();
5794 #undef CHECK_LIVE
5795 #undef CHECK_ALLOCATED
5796 #undef CHECK_ALLOCATED_AND_LIVE
5799 /* Mark the pointers in a buffer structure. */
5801 static void
5802 mark_buffer (Lisp_Object buf)
5804 register struct buffer *buffer = XBUFFER (buf);
5805 register Lisp_Object *ptr, tmp;
5806 Lisp_Object base_buffer;
5808 eassert (!VECTOR_MARKED_P (buffer));
5809 VECTOR_MARK (buffer);
5811 MARK_INTERVAL_TREE (BUF_INTERVALS (buffer));
5813 /* For now, we just don't mark the undo_list. It's done later in
5814 a special way just before the sweep phase, and after stripping
5815 some of its elements that are not needed any more. */
5817 if (buffer->overlays_before)
5819 XSETMISC (tmp, buffer->overlays_before);
5820 mark_object (tmp);
5822 if (buffer->overlays_after)
5824 XSETMISC (tmp, buffer->overlays_after);
5825 mark_object (tmp);
5828 /* buffer-local Lisp variables start at `undo_list',
5829 tho only the ones from `name' on are GC'd normally. */
5830 for (ptr = &buffer->BUFFER_INTERNAL_FIELD (name);
5831 ptr <= &PER_BUFFER_VALUE (buffer,
5832 PER_BUFFER_VAR_OFFSET (LAST_FIELD_PER_BUFFER));
5833 ptr++)
5834 mark_object (*ptr);
5836 /* If this is an indirect buffer, mark its base buffer. */
5837 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
5839 XSETBUFFER (base_buffer, buffer->base_buffer);
5840 mark_buffer (base_buffer);
5844 /* Mark the Lisp pointers in the terminal objects.
5845 Called by Fgarbage_collect. */
5847 static void
5848 mark_terminals (void)
5850 struct terminal *t;
5851 for (t = terminal_list; t; t = t->next_terminal)
5853 eassert (t->name != NULL);
5854 #ifdef HAVE_WINDOW_SYSTEM
5855 /* If a terminal object is reachable from a stacpro'ed object,
5856 it might have been marked already. Make sure the image cache
5857 gets marked. */
5858 mark_image_cache (t->image_cache);
5859 #endif /* HAVE_WINDOW_SYSTEM */
5860 if (!VECTOR_MARKED_P (t))
5861 mark_vectorlike ((struct Lisp_Vector *)t);
5867 /* Value is non-zero if OBJ will survive the current GC because it's
5868 either marked or does not need to be marked to survive. */
5871 survives_gc_p (Lisp_Object obj)
5873 int survives_p;
5875 switch (XTYPE (obj))
5877 case_Lisp_Int:
5878 survives_p = 1;
5879 break;
5881 case Lisp_Symbol:
5882 survives_p = XSYMBOL (obj)->gcmarkbit;
5883 break;
5885 case Lisp_Misc:
5886 survives_p = XMISCANY (obj)->gcmarkbit;
5887 break;
5889 case Lisp_String:
5890 survives_p = STRING_MARKED_P (XSTRING (obj));
5891 break;
5893 case Lisp_Vectorlike:
5894 survives_p = SUBRP (obj) || VECTOR_MARKED_P (XVECTOR (obj));
5895 break;
5897 case Lisp_Cons:
5898 survives_p = CONS_MARKED_P (XCONS (obj));
5899 break;
5901 case Lisp_Float:
5902 survives_p = FLOAT_MARKED_P (XFLOAT (obj));
5903 break;
5905 default:
5906 abort ();
5909 return survives_p || PURE_POINTER_P ((void *) XPNTR (obj));
5914 /* Sweep: find all structures not marked, and free them. */
5916 static void
5917 gc_sweep (void)
5919 /* Remove or mark entries in weak hash tables.
5920 This must be done before any object is unmarked. */
5921 sweep_weak_hash_tables ();
5923 sweep_strings ();
5924 #ifdef GC_CHECK_STRING_BYTES
5925 if (!noninteractive)
5926 check_string_bytes (1);
5927 #endif
5929 /* Put all unmarked conses on free list */
5931 register struct cons_block *cblk;
5932 struct cons_block **cprev = &cons_block;
5933 register int lim = cons_block_index;
5934 EMACS_INT num_free = 0, num_used = 0;
5936 cons_free_list = 0;
5938 for (cblk = cons_block; cblk; cblk = *cprev)
5940 register int i = 0;
5941 int this_free = 0;
5942 int ilim = (lim + BITS_PER_INT - 1) / BITS_PER_INT;
5944 /* Scan the mark bits an int at a time. */
5945 for (i = 0; i < ilim; i++)
5947 if (cblk->gcmarkbits[i] == -1)
5949 /* Fast path - all cons cells for this int are marked. */
5950 cblk->gcmarkbits[i] = 0;
5951 num_used += BITS_PER_INT;
5953 else
5955 /* Some cons cells for this int are not marked.
5956 Find which ones, and free them. */
5957 int start, pos, stop;
5959 start = i * BITS_PER_INT;
5960 stop = lim - start;
5961 if (stop > BITS_PER_INT)
5962 stop = BITS_PER_INT;
5963 stop += start;
5965 for (pos = start; pos < stop; pos++)
5967 if (!CONS_MARKED_P (&cblk->conses[pos]))
5969 this_free++;
5970 cblk->conses[pos].u.chain = cons_free_list;
5971 cons_free_list = &cblk->conses[pos];
5972 #if GC_MARK_STACK
5973 cons_free_list->car = Vdead;
5974 #endif
5976 else
5978 num_used++;
5979 CONS_UNMARK (&cblk->conses[pos]);
5985 lim = CONS_BLOCK_SIZE;
5986 /* If this block contains only free conses and we have already
5987 seen more than two blocks worth of free conses then deallocate
5988 this block. */
5989 if (this_free == CONS_BLOCK_SIZE && num_free > CONS_BLOCK_SIZE)
5991 *cprev = cblk->next;
5992 /* Unhook from the free list. */
5993 cons_free_list = cblk->conses[0].u.chain;
5994 lisp_align_free (cblk);
5996 else
5998 num_free += this_free;
5999 cprev = &cblk->next;
6002 total_conses = num_used;
6003 total_free_conses = num_free;
6006 /* Put all unmarked floats on free list */
6008 register struct float_block *fblk;
6009 struct float_block **fprev = &float_block;
6010 register int lim = float_block_index;
6011 EMACS_INT num_free = 0, num_used = 0;
6013 float_free_list = 0;
6015 for (fblk = float_block; fblk; fblk = *fprev)
6017 register int i;
6018 int this_free = 0;
6019 for (i = 0; i < lim; i++)
6020 if (!FLOAT_MARKED_P (&fblk->floats[i]))
6022 this_free++;
6023 fblk->floats[i].u.chain = float_free_list;
6024 float_free_list = &fblk->floats[i];
6026 else
6028 num_used++;
6029 FLOAT_UNMARK (&fblk->floats[i]);
6031 lim = FLOAT_BLOCK_SIZE;
6032 /* If this block contains only free floats and we have already
6033 seen more than two blocks worth of free floats then deallocate
6034 this block. */
6035 if (this_free == FLOAT_BLOCK_SIZE && num_free > FLOAT_BLOCK_SIZE)
6037 *fprev = fblk->next;
6038 /* Unhook from the free list. */
6039 float_free_list = fblk->floats[0].u.chain;
6040 lisp_align_free (fblk);
6042 else
6044 num_free += this_free;
6045 fprev = &fblk->next;
6048 total_floats = num_used;
6049 total_free_floats = num_free;
6052 /* Put all unmarked intervals on free list */
6054 register struct interval_block *iblk;
6055 struct interval_block **iprev = &interval_block;
6056 register int lim = interval_block_index;
6057 EMACS_INT num_free = 0, num_used = 0;
6059 interval_free_list = 0;
6061 for (iblk = interval_block; iblk; iblk = *iprev)
6063 register int i;
6064 int this_free = 0;
6066 for (i = 0; i < lim; i++)
6068 if (!iblk->intervals[i].gcmarkbit)
6070 SET_INTERVAL_PARENT (&iblk->intervals[i], interval_free_list);
6071 interval_free_list = &iblk->intervals[i];
6072 this_free++;
6074 else
6076 num_used++;
6077 iblk->intervals[i].gcmarkbit = 0;
6080 lim = INTERVAL_BLOCK_SIZE;
6081 /* If this block contains only free intervals and we have already
6082 seen more than two blocks worth of free intervals then
6083 deallocate this block. */
6084 if (this_free == INTERVAL_BLOCK_SIZE && num_free > INTERVAL_BLOCK_SIZE)
6086 *iprev = iblk->next;
6087 /* Unhook from the free list. */
6088 interval_free_list = INTERVAL_PARENT (&iblk->intervals[0]);
6089 lisp_free (iblk);
6091 else
6093 num_free += this_free;
6094 iprev = &iblk->next;
6097 total_intervals = num_used;
6098 total_free_intervals = num_free;
6101 /* Put all unmarked symbols on free list */
6103 register struct symbol_block *sblk;
6104 struct symbol_block **sprev = &symbol_block;
6105 register int lim = symbol_block_index;
6106 EMACS_INT num_free = 0, num_used = 0;
6108 symbol_free_list = NULL;
6110 for (sblk = symbol_block; sblk; sblk = *sprev)
6112 int this_free = 0;
6113 union aligned_Lisp_Symbol *sym = sblk->symbols;
6114 union aligned_Lisp_Symbol *end = sym + lim;
6116 for (; sym < end; ++sym)
6118 /* Check if the symbol was created during loadup. In such a case
6119 it might be pointed to by pure bytecode which we don't trace,
6120 so we conservatively assume that it is live. */
6121 int pure_p = PURE_POINTER_P (XSTRING (sym->s.xname));
6123 if (!sym->s.gcmarkbit && !pure_p)
6125 if (sym->s.redirect == SYMBOL_LOCALIZED)
6126 xfree (SYMBOL_BLV (&sym->s));
6127 sym->s.next = symbol_free_list;
6128 symbol_free_list = &sym->s;
6129 #if GC_MARK_STACK
6130 symbol_free_list->function = Vdead;
6131 #endif
6132 ++this_free;
6134 else
6136 ++num_used;
6137 if (!pure_p)
6138 UNMARK_STRING (XSTRING (sym->s.xname));
6139 sym->s.gcmarkbit = 0;
6143 lim = SYMBOL_BLOCK_SIZE;
6144 /* If this block contains only free symbols and we have already
6145 seen more than two blocks worth of free symbols then deallocate
6146 this block. */
6147 if (this_free == SYMBOL_BLOCK_SIZE && num_free > SYMBOL_BLOCK_SIZE)
6149 *sprev = sblk->next;
6150 /* Unhook from the free list. */
6151 symbol_free_list = sblk->symbols[0].s.next;
6152 lisp_free (sblk);
6154 else
6156 num_free += this_free;
6157 sprev = &sblk->next;
6160 total_symbols = num_used;
6161 total_free_symbols = num_free;
6164 /* Put all unmarked misc's on free list.
6165 For a marker, first unchain it from the buffer it points into. */
6167 register struct marker_block *mblk;
6168 struct marker_block **mprev = &marker_block;
6169 register int lim = marker_block_index;
6170 EMACS_INT num_free = 0, num_used = 0;
6172 marker_free_list = 0;
6174 for (mblk = marker_block; mblk; mblk = *mprev)
6176 register int i;
6177 int this_free = 0;
6179 for (i = 0; i < lim; i++)
6181 if (!mblk->markers[i].m.u_any.gcmarkbit)
6183 if (mblk->markers[i].m.u_any.type == Lisp_Misc_Marker)
6184 unchain_marker (&mblk->markers[i].m.u_marker);
6185 /* Set the type of the freed object to Lisp_Misc_Free.
6186 We could leave the type alone, since nobody checks it,
6187 but this might catch bugs faster. */
6188 mblk->markers[i].m.u_marker.type = Lisp_Misc_Free;
6189 mblk->markers[i].m.u_free.chain = marker_free_list;
6190 marker_free_list = &mblk->markers[i].m;
6191 this_free++;
6193 else
6195 num_used++;
6196 mblk->markers[i].m.u_any.gcmarkbit = 0;
6199 lim = MARKER_BLOCK_SIZE;
6200 /* If this block contains only free markers and we have already
6201 seen more than two blocks worth of free markers then deallocate
6202 this block. */
6203 if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE)
6205 *mprev = mblk->next;
6206 /* Unhook from the free list. */
6207 marker_free_list = mblk->markers[0].m.u_free.chain;
6208 lisp_free (mblk);
6210 else
6212 num_free += this_free;
6213 mprev = &mblk->next;
6217 total_markers = num_used;
6218 total_free_markers = num_free;
6221 /* Free all unmarked buffers */
6223 register struct buffer *buffer = all_buffers, *prev = 0, *next;
6225 while (buffer)
6226 if (!VECTOR_MARKED_P (buffer))
6228 if (prev)
6229 prev->header.next = buffer->header.next;
6230 else
6231 all_buffers = buffer->header.next.buffer;
6232 next = buffer->header.next.buffer;
6233 lisp_free (buffer);
6234 buffer = next;
6236 else
6238 VECTOR_UNMARK (buffer);
6239 UNMARK_BALANCE_INTERVALS (BUF_INTERVALS (buffer));
6240 prev = buffer, buffer = buffer->header.next.buffer;
6244 /* Free all unmarked vectors */
6246 register struct Lisp_Vector *vector = all_vectors, *prev = 0, *next;
6247 total_vector_size = 0;
6249 while (vector)
6250 if (!VECTOR_MARKED_P (vector))
6252 if (prev)
6253 prev->header.next = vector->header.next;
6254 else
6255 all_vectors = vector->header.next.vector;
6256 next = vector->header.next.vector;
6257 lisp_free (vector);
6258 vector = next;
6261 else
6263 VECTOR_UNMARK (vector);
6264 if (vector->header.size & PSEUDOVECTOR_FLAG)
6265 total_vector_size += PSEUDOVECTOR_SIZE_MASK & vector->header.size;
6266 else
6267 total_vector_size += vector->header.size;
6268 prev = vector, vector = vector->header.next.vector;
6272 #ifdef GC_CHECK_STRING_BYTES
6273 if (!noninteractive)
6274 check_string_bytes (1);
6275 #endif
6281 /* Debugging aids. */
6283 DEFUN ("memory-limit", Fmemory_limit, Smemory_limit, 0, 0, 0,
6284 doc: /* Return the address of the last byte Emacs has allocated, divided by 1024.
6285 This may be helpful in debugging Emacs's memory usage.
6286 We divide the value by 1024 to make sure it fits in a Lisp integer. */)
6287 (void)
6289 Lisp_Object end;
6291 XSETINT (end, (intptr_t) (char *) sbrk (0) / 1024);
6293 return end;
6296 DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0,
6297 doc: /* Return a list of counters that measure how much consing there has been.
6298 Each of these counters increments for a certain kind of object.
6299 The counters wrap around from the largest positive integer to zero.
6300 Garbage collection does not decrease them.
6301 The elements of the value are as follows:
6302 (CONSES FLOATS VECTOR-CELLS SYMBOLS STRING-CHARS MISCS INTERVALS STRINGS)
6303 All are in units of 1 = one object consed
6304 except for VECTOR-CELLS and STRING-CHARS, which count the total length of
6305 objects consed.
6306 MISCS include overlays, markers, and some internal types.
6307 Frames, windows, buffers, and subprocesses count as vectors
6308 (but the contents of a buffer's text do not count here). */)
6309 (void)
6311 Lisp_Object consed[8];
6313 consed[0] = make_number (min (MOST_POSITIVE_FIXNUM, cons_cells_consed));
6314 consed[1] = make_number (min (MOST_POSITIVE_FIXNUM, floats_consed));
6315 consed[2] = make_number (min (MOST_POSITIVE_FIXNUM, vector_cells_consed));
6316 consed[3] = make_number (min (MOST_POSITIVE_FIXNUM, symbols_consed));
6317 consed[4] = make_number (min (MOST_POSITIVE_FIXNUM, string_chars_consed));
6318 consed[5] = make_number (min (MOST_POSITIVE_FIXNUM, misc_objects_consed));
6319 consed[6] = make_number (min (MOST_POSITIVE_FIXNUM, intervals_consed));
6320 consed[7] = make_number (min (MOST_POSITIVE_FIXNUM, strings_consed));
6322 return Flist (8, consed);
6325 /* Find at most FIND_MAX symbols which have OBJ as their value or
6326 function. This is used in gdbinit's `xwhichsymbols' command. */
6328 Lisp_Object
6329 which_symbols (Lisp_Object obj, EMACS_INT find_max)
6331 struct symbol_block *sblk;
6332 ptrdiff_t gc_count = inhibit_garbage_collection ();
6333 Lisp_Object found = Qnil;
6335 if (! DEADP (obj))
6337 for (sblk = symbol_block; sblk; sblk = sblk->next)
6339 union aligned_Lisp_Symbol *aligned_sym = sblk->symbols;
6340 int bn;
6342 for (bn = 0; bn < SYMBOL_BLOCK_SIZE; bn++, aligned_sym++)
6344 struct Lisp_Symbol *sym = &aligned_sym->s;
6345 Lisp_Object val;
6346 Lisp_Object tem;
6348 if (sblk == symbol_block && bn >= symbol_block_index)
6349 break;
6351 XSETSYMBOL (tem, sym);
6352 val = find_symbol_value (tem);
6353 if (EQ (val, obj)
6354 || EQ (sym->function, obj)
6355 || (!NILP (sym->function)
6356 && COMPILEDP (sym->function)
6357 && EQ (AREF (sym->function, COMPILED_BYTECODE), obj))
6358 || (!NILP (val)
6359 && COMPILEDP (val)
6360 && EQ (AREF (val, COMPILED_BYTECODE), obj)))
6362 found = Fcons (tem, found);
6363 if (--find_max == 0)
6364 goto out;
6370 out:
6371 unbind_to (gc_count, Qnil);
6372 return found;
6375 #ifdef ENABLE_CHECKING
6376 int suppress_checking;
6378 void
6379 die (const char *msg, const char *file, int line)
6381 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: %s\r\n",
6382 file, line, msg);
6383 abort ();
6385 #endif
6387 /* Initialization */
6389 void
6390 init_alloc_once (void)
6392 /* Used to do Vpurify_flag = Qt here, but Qt isn't set up yet! */
6393 purebeg = PUREBEG;
6394 pure_size = PURESIZE;
6395 pure_bytes_used = 0;
6396 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
6397 pure_bytes_used_before_overflow = 0;
6399 /* Initialize the list of free aligned blocks. */
6400 free_ablock = NULL;
6402 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
6403 mem_init ();
6404 Vdead = make_pure_string ("DEAD", 4, 4, 0);
6405 #endif
6407 all_vectors = 0;
6408 ignore_warnings = 1;
6409 #ifdef DOUG_LEA_MALLOC
6410 mallopt (M_TRIM_THRESHOLD, 128*1024); /* trim threshold */
6411 mallopt (M_MMAP_THRESHOLD, 64*1024); /* mmap threshold */
6412 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); /* max. number of mmap'ed areas */
6413 #endif
6414 init_strings ();
6415 init_cons ();
6416 init_symbol ();
6417 init_marker ();
6418 init_float ();
6419 init_intervals ();
6420 init_weak_hash_tables ();
6422 #ifdef REL_ALLOC
6423 malloc_hysteresis = 32;
6424 #else
6425 malloc_hysteresis = 0;
6426 #endif
6428 refill_memory_reserve ();
6430 ignore_warnings = 0;
6431 gcprolist = 0;
6432 byte_stack_list = 0;
6433 staticidx = 0;
6434 consing_since_gc = 0;
6435 gc_cons_threshold = 100000 * sizeof (Lisp_Object);
6436 gc_relative_threshold = 0;
6439 void
6440 init_alloc (void)
6442 gcprolist = 0;
6443 byte_stack_list = 0;
6444 #if GC_MARK_STACK
6445 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
6446 setjmp_tested_p = longjmps_done = 0;
6447 #endif
6448 #endif
6449 Vgc_elapsed = make_float (0.0);
6450 gcs_done = 0;
6453 void
6454 syms_of_alloc (void)
6456 DEFVAR_INT ("gc-cons-threshold", gc_cons_threshold,
6457 doc: /* Number of bytes of consing between garbage collections.
6458 Garbage collection can happen automatically once this many bytes have been
6459 allocated since the last garbage collection. All data types count.
6461 Garbage collection happens automatically only when `eval' is called.
6463 By binding this temporarily to a large number, you can effectively
6464 prevent garbage collection during a part of the program.
6465 See also `gc-cons-percentage'. */);
6467 DEFVAR_LISP ("gc-cons-percentage", Vgc_cons_percentage,
6468 doc: /* Portion of the heap used for allocation.
6469 Garbage collection can happen automatically once this portion of the heap
6470 has been allocated since the last garbage collection.
6471 If this portion is smaller than `gc-cons-threshold', this is ignored. */);
6472 Vgc_cons_percentage = make_float (0.1);
6474 DEFVAR_INT ("pure-bytes-used", pure_bytes_used,
6475 doc: /* Number of bytes of shareable Lisp data allocated so far. */);
6477 DEFVAR_INT ("cons-cells-consed", cons_cells_consed,
6478 doc: /* Number of cons cells that have been consed so far. */);
6480 DEFVAR_INT ("floats-consed", floats_consed,
6481 doc: /* Number of floats that have been consed so far. */);
6483 DEFVAR_INT ("vector-cells-consed", vector_cells_consed,
6484 doc: /* Number of vector cells that have been consed so far. */);
6486 DEFVAR_INT ("symbols-consed", symbols_consed,
6487 doc: /* Number of symbols that have been consed so far. */);
6489 DEFVAR_INT ("string-chars-consed", string_chars_consed,
6490 doc: /* Number of string characters that have been consed so far. */);
6492 DEFVAR_INT ("misc-objects-consed", misc_objects_consed,
6493 doc: /* Number of miscellaneous objects that have been consed so far.
6494 These include markers and overlays, plus certain objects not visible
6495 to users. */);
6497 DEFVAR_INT ("intervals-consed", intervals_consed,
6498 doc: /* Number of intervals that have been consed so far. */);
6500 DEFVAR_INT ("strings-consed", strings_consed,
6501 doc: /* Number of strings that have been consed so far. */);
6503 DEFVAR_LISP ("purify-flag", Vpurify_flag,
6504 doc: /* Non-nil means loading Lisp code in order to dump an executable.
6505 This means that certain objects should be allocated in shared (pure) space.
6506 It can also be set to a hash-table, in which case this table is used to
6507 do hash-consing of the objects allocated to pure space. */);
6509 DEFVAR_BOOL ("garbage-collection-messages", garbage_collection_messages,
6510 doc: /* Non-nil means display messages at start and end of garbage collection. */);
6511 garbage_collection_messages = 0;
6513 DEFVAR_LISP ("post-gc-hook", Vpost_gc_hook,
6514 doc: /* Hook run after garbage collection has finished. */);
6515 Vpost_gc_hook = Qnil;
6516 DEFSYM (Qpost_gc_hook, "post-gc-hook");
6518 DEFVAR_LISP ("memory-signal-data", Vmemory_signal_data,
6519 doc: /* Precomputed `signal' argument for memory-full error. */);
6520 /* We build this in advance because if we wait until we need it, we might
6521 not be able to allocate the memory to hold it. */
6522 Vmemory_signal_data
6523 = pure_cons (Qerror,
6524 pure_cons (make_pure_c_string ("Memory exhausted--use M-x save-some-buffers then exit and restart Emacs"), Qnil));
6526 DEFVAR_LISP ("memory-full", Vmemory_full,
6527 doc: /* Non-nil means Emacs cannot get much more Lisp memory. */);
6528 Vmemory_full = Qnil;
6530 DEFSYM (Qgc_cons_threshold, "gc-cons-threshold");
6531 DEFSYM (Qchar_table_extra_slots, "char-table-extra-slots");
6533 DEFVAR_LISP ("gc-elapsed", Vgc_elapsed,
6534 doc: /* Accumulated time elapsed in garbage collections.
6535 The time is in seconds as a floating point value. */);
6536 DEFVAR_INT ("gcs-done", gcs_done,
6537 doc: /* Accumulated number of garbage collections done. */);
6539 defsubr (&Scons);
6540 defsubr (&Slist);
6541 defsubr (&Svector);
6542 defsubr (&Smake_byte_code);
6543 defsubr (&Smake_list);
6544 defsubr (&Smake_vector);
6545 defsubr (&Smake_string);
6546 defsubr (&Smake_bool_vector);
6547 defsubr (&Smake_symbol);
6548 defsubr (&Smake_marker);
6549 defsubr (&Spurecopy);
6550 defsubr (&Sgarbage_collect);
6551 defsubr (&Smemory_limit);
6552 defsubr (&Smemory_use_counts);
6554 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
6555 defsubr (&Sgc_status);
6556 #endif