ibuffer-map-deletion-lines: Re-included it
[emacs.git] / src / alloc.c
blob6eced7bab18dfbf749b06125e43db116d93be312
1 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
3 Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2016 Free Software
4 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 (at
11 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>
23 #include <errno.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <limits.h> /* For CHAR_BIT. */
27 #include <signal.h> /* For SIGABRT, SIGDANGER. */
29 #ifdef HAVE_PTHREAD
30 #include <pthread.h>
31 #endif
33 #include "lisp.h"
34 #include "dispextern.h"
35 #include "intervals.h"
36 #include "puresize.h"
37 #include "sheap.h"
38 #include "systime.h"
39 #include "character.h"
40 #include "buffer.h"
41 #include "window.h"
42 #include "keyboard.h"
43 #include "frame.h"
44 #include "blockinput.h"
45 #include "termhooks.h" /* For struct terminal. */
46 #ifdef HAVE_WINDOW_SYSTEM
47 #include TERM_HEADER
48 #endif /* HAVE_WINDOW_SYSTEM */
50 #include <flexmember.h>
51 #include <verify.h>
52 #include <execinfo.h> /* For backtrace. */
54 #ifdef HAVE_LINUX_SYSINFO
55 #include <sys/sysinfo.h>
56 #endif
58 #ifdef MSDOS
59 #include "dosfns.h" /* For dos_memory_info. */
60 #endif
62 #ifdef HAVE_MALLOC_H
63 # include <malloc.h>
64 #endif
66 #if (defined ENABLE_CHECKING \
67 && defined HAVE_VALGRIND_VALGRIND_H \
68 && !defined USE_VALGRIND)
69 # define USE_VALGRIND 1
70 #endif
72 #if USE_VALGRIND
73 #include <valgrind/valgrind.h>
74 #include <valgrind/memcheck.h>
75 static bool valgrind_p;
76 #endif
78 /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects. */
80 /* GC_MALLOC_CHECK defined means perform validity checks of malloc'd
81 memory. Can do this only if using gmalloc.c and if not checking
82 marked objects. */
84 #if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \
85 || defined HYBRID_MALLOC || defined GC_CHECK_MARKED_OBJECTS)
86 #undef GC_MALLOC_CHECK
87 #endif
89 #include <unistd.h>
90 #include <fcntl.h>
92 #ifdef USE_GTK
93 # include "gtkutil.h"
94 #endif
95 #ifdef WINDOWSNT
96 #include "w32.h"
97 #include "w32heap.h" /* for sbrk */
98 #endif
100 #ifdef GNU_LINUX
101 /* The address where the heap starts. */
102 void *
103 my_heap_start (void)
105 static void *start;
106 if (! start)
107 start = sbrk (0);
108 return start;
110 #endif
112 #ifdef DOUG_LEA_MALLOC
114 /* Specify maximum number of areas to mmap. It would be nice to use a
115 value that explicitly means "no limit". */
117 #define MMAP_MAX_AREAS 100000000
119 /* A pointer to the memory allocated that copies that static data
120 inside glibc's malloc. */
121 static void *malloc_state_ptr;
123 /* Restore the dumped malloc state. Because malloc can be invoked
124 even before main (e.g. by the dynamic linker), the dumped malloc
125 state must be restored as early as possible using this special hook. */
126 static void
127 malloc_initialize_hook (void)
129 static bool malloc_using_checking;
131 if (! initialized)
133 #ifdef GNU_LINUX
134 my_heap_start ();
135 #endif
136 malloc_using_checking = getenv ("MALLOC_CHECK_") != NULL;
138 else
140 if (!malloc_using_checking)
142 /* Work around a bug in glibc's malloc. MALLOC_CHECK_ must be
143 ignored if the heap to be restored was constructed without
144 malloc checking. Can't use unsetenv, since that calls malloc. */
145 char **p = environ;
146 if (p)
147 for (; *p; p++)
148 if (strncmp (*p, "MALLOC_CHECK_=", 14) == 0)
151 *p = p[1];
152 while (*++p);
154 break;
158 if (malloc_set_state (malloc_state_ptr) != 0)
159 emacs_abort ();
160 # ifndef XMALLOC_OVERRUN_CHECK
161 alloc_unexec_post ();
162 # endif
166 /* Declare the malloc initialization hook, which runs before 'main' starts.
167 EXTERNALLY_VISIBLE works around Bug#22522. */
168 # ifndef __MALLOC_HOOK_VOLATILE
169 # define __MALLOC_HOOK_VOLATILE
170 # endif
171 voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook EXTERNALLY_VISIBLE
172 = malloc_initialize_hook;
174 #endif
176 #if defined DOUG_LEA_MALLOC || !defined CANNOT_DUMP
178 /* Allocator-related actions to do just before and after unexec. */
180 void
181 alloc_unexec_pre (void)
183 # ifdef DOUG_LEA_MALLOC
184 malloc_state_ptr = malloc_get_state ();
185 if (!malloc_state_ptr)
186 fatal ("malloc_get_state: %s", strerror (errno));
187 # endif
188 # ifdef HYBRID_MALLOC
189 bss_sbrk_did_unexec = true;
190 # endif
193 void
194 alloc_unexec_post (void)
196 # ifdef DOUG_LEA_MALLOC
197 free (malloc_state_ptr);
198 # endif
199 # ifdef HYBRID_MALLOC
200 bss_sbrk_did_unexec = false;
201 # endif
203 #endif
205 /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
206 to a struct Lisp_String. */
208 #define MARK_STRING(S) ((S)->size |= ARRAY_MARK_FLAG)
209 #define UNMARK_STRING(S) ((S)->size &= ~ARRAY_MARK_FLAG)
210 #define STRING_MARKED_P(S) (((S)->size & ARRAY_MARK_FLAG) != 0)
212 #define VECTOR_MARK(V) ((V)->header.size |= ARRAY_MARK_FLAG)
213 #define VECTOR_UNMARK(V) ((V)->header.size &= ~ARRAY_MARK_FLAG)
214 #define VECTOR_MARKED_P(V) (((V)->header.size & ARRAY_MARK_FLAG) != 0)
216 /* Default value of gc_cons_threshold (see below). */
218 #define GC_DEFAULT_THRESHOLD (100000 * word_size)
220 /* Global variables. */
221 struct emacs_globals globals;
223 /* Number of bytes of consing done since the last gc. */
225 EMACS_INT consing_since_gc;
227 /* Similar minimum, computed from Vgc_cons_percentage. */
229 EMACS_INT gc_relative_threshold;
231 /* Minimum number of bytes of consing since GC before next GC,
232 when memory is full. */
234 EMACS_INT memory_full_cons_threshold;
236 /* True during GC. */
238 bool gc_in_progress;
240 /* Number of live and free conses etc. */
242 static EMACS_INT total_conses, total_markers, total_symbols, total_buffers;
243 static EMACS_INT total_free_conses, total_free_markers, total_free_symbols;
244 static EMACS_INT total_free_floats, total_floats;
246 /* Points to memory space allocated as "spare", to be freed if we run
247 out of memory. We keep one large block, four cons-blocks, and
248 two string blocks. */
250 static char *spare_memory[7];
252 /* Amount of spare memory to keep in large reserve block, or to see
253 whether this much is available when malloc fails on a larger request. */
255 #define SPARE_MEMORY (1 << 14)
257 /* Initialize it to a nonzero value to force it into data space
258 (rather than bss space). That way unexec will remap it into text
259 space (pure), on some systems. We have not implemented the
260 remapping on more recent systems because this is less important
261 nowadays than in the days of small memories and timesharing. */
263 EMACS_INT pure[(PURESIZE + sizeof (EMACS_INT) - 1) / sizeof (EMACS_INT)] = {1,};
264 #define PUREBEG (char *) pure
266 /* Pointer to the pure area, and its size. */
268 static char *purebeg;
269 static ptrdiff_t pure_size;
271 /* Number of bytes of pure storage used before pure storage overflowed.
272 If this is non-zero, this implies that an overflow occurred. */
274 static ptrdiff_t pure_bytes_used_before_overflow;
276 /* Index in pure at which next pure Lisp object will be allocated.. */
278 static ptrdiff_t pure_bytes_used_lisp;
280 /* Number of bytes allocated for non-Lisp objects in pure storage. */
282 static ptrdiff_t pure_bytes_used_non_lisp;
284 /* If nonzero, this is a warning delivered by malloc and not yet
285 displayed. */
287 const char *pending_malloc_warning;
289 #if 0 /* Normally, pointer sanity only on request... */
290 #ifdef ENABLE_CHECKING
291 #define SUSPICIOUS_OBJECT_CHECKING 1
292 #endif
293 #endif
295 /* ... but unconditionally use SUSPICIOUS_OBJECT_CHECKING while the GC
296 bug is unresolved. */
297 #define SUSPICIOUS_OBJECT_CHECKING 1
299 #ifdef SUSPICIOUS_OBJECT_CHECKING
300 struct suspicious_free_record
302 void *suspicious_object;
303 void *backtrace[128];
305 static void *suspicious_objects[32];
306 static int suspicious_object_index;
307 struct suspicious_free_record suspicious_free_history[64] EXTERNALLY_VISIBLE;
308 static int suspicious_free_history_index;
309 /* Find the first currently-monitored suspicious pointer in range
310 [begin,end) or NULL if no such pointer exists. */
311 static void *find_suspicious_object_in_range (void *begin, void *end);
312 static void detect_suspicious_free (void *ptr);
313 #else
314 # define find_suspicious_object_in_range(begin, end) NULL
315 # define detect_suspicious_free(ptr) (void)
316 #endif
318 /* Maximum amount of C stack to save when a GC happens. */
320 #ifndef MAX_SAVE_STACK
321 #define MAX_SAVE_STACK 16000
322 #endif
324 /* Buffer in which we save a copy of the C stack at each GC. */
326 #if MAX_SAVE_STACK > 0
327 static char *stack_copy;
328 static ptrdiff_t stack_copy_size;
330 /* Copy to DEST a block of memory from SRC of size SIZE bytes,
331 avoiding any address sanitization. */
333 static void * ATTRIBUTE_NO_SANITIZE_ADDRESS
334 no_sanitize_memcpy (void *dest, void const *src, size_t size)
336 if (! ADDRESS_SANITIZER)
337 return memcpy (dest, src, size);
338 else
340 size_t i;
341 char *d = dest;
342 char const *s = src;
343 for (i = 0; i < size; i++)
344 d[i] = s[i];
345 return dest;
349 #endif /* MAX_SAVE_STACK > 0 */
351 static void mark_terminals (void);
352 static void gc_sweep (void);
353 static Lisp_Object make_pure_vector (ptrdiff_t);
354 static void mark_buffer (struct buffer *);
356 #if !defined REL_ALLOC || defined SYSTEM_MALLOC || defined HYBRID_MALLOC
357 static void refill_memory_reserve (void);
358 #endif
359 static void compact_small_strings (void);
360 static void free_large_strings (void);
361 extern Lisp_Object which_symbols (Lisp_Object, EMACS_INT) EXTERNALLY_VISIBLE;
363 /* When scanning the C stack for live Lisp objects, Emacs keeps track of
364 what memory allocated via lisp_malloc and lisp_align_malloc is intended
365 for what purpose. This enumeration specifies the type of memory. */
367 enum mem_type
369 MEM_TYPE_NON_LISP,
370 MEM_TYPE_BUFFER,
371 MEM_TYPE_CONS,
372 MEM_TYPE_STRING,
373 MEM_TYPE_MISC,
374 MEM_TYPE_SYMBOL,
375 MEM_TYPE_FLOAT,
376 /* Since all non-bool pseudovectors are small enough to be
377 allocated from vector blocks, this memory type denotes
378 large regular vectors and large bool pseudovectors. */
379 MEM_TYPE_VECTORLIKE,
380 /* Special type to denote vector blocks. */
381 MEM_TYPE_VECTOR_BLOCK,
382 /* Special type to denote reserved memory. */
383 MEM_TYPE_SPARE
386 /* A unique object in pure space used to make some Lisp objects
387 on free lists recognizable in O(1). */
389 static Lisp_Object Vdead;
390 #define DEADP(x) EQ (x, Vdead)
392 #ifdef GC_MALLOC_CHECK
394 enum mem_type allocated_mem_type;
396 #endif /* GC_MALLOC_CHECK */
398 /* A node in the red-black tree describing allocated memory containing
399 Lisp data. Each such block is recorded with its start and end
400 address when it is allocated, and removed from the tree when it
401 is freed.
403 A red-black tree is a balanced binary tree with the following
404 properties:
406 1. Every node is either red or black.
407 2. Every leaf is black.
408 3. If a node is red, then both of its children are black.
409 4. Every simple path from a node to a descendant leaf contains
410 the same number of black nodes.
411 5. The root is always black.
413 When nodes are inserted into the tree, or deleted from the tree,
414 the tree is "fixed" so that these properties are always true.
416 A red-black tree with N internal nodes has height at most 2
417 log(N+1). Searches, insertions and deletions are done in O(log N).
418 Please see a text book about data structures for a detailed
419 description of red-black trees. Any book worth its salt should
420 describe them. */
422 struct mem_node
424 /* Children of this node. These pointers are never NULL. When there
425 is no child, the value is MEM_NIL, which points to a dummy node. */
426 struct mem_node *left, *right;
428 /* The parent of this node. In the root node, this is NULL. */
429 struct mem_node *parent;
431 /* Start and end of allocated region. */
432 void *start, *end;
434 /* Node color. */
435 enum {MEM_BLACK, MEM_RED} color;
437 /* Memory type. */
438 enum mem_type type;
441 /* Base address of stack. Set in main. */
443 Lisp_Object *stack_base;
445 /* Root of the tree describing allocated Lisp memory. */
447 static struct mem_node *mem_root;
449 /* Lowest and highest known address in the heap. */
451 static void *min_heap_address, *max_heap_address;
453 /* Sentinel node of the tree. */
455 static struct mem_node mem_z;
456 #define MEM_NIL &mem_z
458 static struct mem_node *mem_insert (void *, void *, enum mem_type);
459 static void mem_insert_fixup (struct mem_node *);
460 static void mem_rotate_left (struct mem_node *);
461 static void mem_rotate_right (struct mem_node *);
462 static void mem_delete (struct mem_node *);
463 static void mem_delete_fixup (struct mem_node *);
464 static struct mem_node *mem_find (void *);
466 #ifndef DEADP
467 # define DEADP(x) 0
468 #endif
470 /* Addresses of staticpro'd variables. Initialize it to a nonzero
471 value; otherwise some compilers put it into BSS. */
473 enum { NSTATICS = 2048 };
474 static Lisp_Object *staticvec[NSTATICS] = {&Vpurify_flag};
476 /* Index of next unused slot in staticvec. */
478 static int staticidx;
480 static void *pure_alloc (size_t, int);
482 /* True if N is a power of 2. N should be positive. */
484 #define POWER_OF_2(n) (((n) & ((n) - 1)) == 0)
486 /* Return X rounded to the next multiple of Y. Y should be positive,
487 and Y - 1 + X should not overflow. Arguments should not have side
488 effects, as they are evaluated more than once. Tune for Y being a
489 power of 2. */
491 #define ROUNDUP(x, y) (POWER_OF_2 (y) \
492 ? ((y) - 1 + (x)) & ~ ((y) - 1) \
493 : ((y) - 1 + (x)) - ((y) - 1 + (x)) % (y))
495 /* Return PTR rounded up to the next multiple of ALIGNMENT. */
497 static void *
498 pointer_align (void *ptr, int alignment)
500 return (void *) ROUNDUP ((uintptr_t) ptr, alignment);
503 /* Extract the pointer hidden within A, if A is not a symbol.
504 If A is a symbol, extract the hidden pointer's offset from lispsym,
505 converted to void *. */
507 #define macro_XPNTR_OR_SYMBOL_OFFSET(a) \
508 ((void *) (intptr_t) (USE_LSB_TAG ? XLI (a) - XTYPE (a) : XLI (a) & VALMASK))
510 /* Extract the pointer hidden within A. */
512 #define macro_XPNTR(a) \
513 ((void *) ((intptr_t) XPNTR_OR_SYMBOL_OFFSET (a) \
514 + (SYMBOLP (a) ? (char *) lispsym : NULL)))
516 /* For pointer access, define XPNTR and XPNTR_OR_SYMBOL_OFFSET as
517 functions, as functions are cleaner and can be used in debuggers.
518 Also, define them as macros if being compiled with GCC without
519 optimization, for performance in that case. The macro_* names are
520 private to this section of code. */
522 static ATTRIBUTE_UNUSED void *
523 XPNTR_OR_SYMBOL_OFFSET (Lisp_Object a)
525 return macro_XPNTR_OR_SYMBOL_OFFSET (a);
527 static ATTRIBUTE_UNUSED void *
528 XPNTR (Lisp_Object a)
530 return macro_XPNTR (a);
533 #if DEFINE_KEY_OPS_AS_MACROS
534 # define XPNTR_OR_SYMBOL_OFFSET(a) macro_XPNTR_OR_SYMBOL_OFFSET (a)
535 # define XPNTR(a) macro_XPNTR (a)
536 #endif
538 static void
539 XFLOAT_INIT (Lisp_Object f, double n)
541 XFLOAT (f)->u.data = n;
544 #ifdef DOUG_LEA_MALLOC
545 static bool
546 pointers_fit_in_lispobj_p (void)
548 return (UINTPTR_MAX <= VAL_MAX) || USE_LSB_TAG;
551 static bool
552 mmap_lisp_allowed_p (void)
554 /* If we can't store all memory addresses in our lisp objects, it's
555 risky to let the heap use mmap and give us addresses from all
556 over our address space. We also can't use mmap for lisp objects
557 if we might dump: unexec doesn't preserve the contents of mmapped
558 regions. */
559 return pointers_fit_in_lispobj_p () && !might_dump;
561 #endif
563 /* Head of a circularly-linked list of extant finalizers. */
564 static struct Lisp_Finalizer finalizers;
566 /* Head of a circularly-linked list of finalizers that must be invoked
567 because we deemed them unreachable. This list must be global, and
568 not a local inside garbage_collect_1, in case we GC again while
569 running finalizers. */
570 static struct Lisp_Finalizer doomed_finalizers;
573 /************************************************************************
574 Malloc
575 ************************************************************************/
577 #if defined SIGDANGER || (!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC)
579 /* Function malloc calls this if it finds we are near exhausting storage. */
581 void
582 malloc_warning (const char *str)
584 pending_malloc_warning = str;
587 #endif
589 /* Display an already-pending malloc warning. */
591 void
592 display_malloc_warning (void)
594 call3 (intern ("display-warning"),
595 intern ("alloc"),
596 build_string (pending_malloc_warning),
597 intern ("emergency"));
598 pending_malloc_warning = 0;
601 /* Called if we can't allocate relocatable space for a buffer. */
603 void
604 buffer_memory_full (ptrdiff_t nbytes)
606 /* If buffers use the relocating allocator, no need to free
607 spare_memory, because we may have plenty of malloc space left
608 that we could get, and if we don't, the malloc that fails will
609 itself cause spare_memory to be freed. If buffers don't use the
610 relocating allocator, treat this like any other failing
611 malloc. */
613 #ifndef REL_ALLOC
614 memory_full (nbytes);
615 #else
616 /* This used to call error, but if we've run out of memory, we could
617 get infinite recursion trying to build the string. */
618 xsignal (Qnil, Vmemory_signal_data);
619 #endif
622 /* A common multiple of the positive integers A and B. Ideally this
623 would be the least common multiple, but there's no way to do that
624 as a constant expression in C, so do the best that we can easily do. */
625 #define COMMON_MULTIPLE(a, b) \
626 ((a) % (b) == 0 ? (a) : (b) % (a) == 0 ? (b) : (a) * (b))
628 #ifndef XMALLOC_OVERRUN_CHECK
629 #define XMALLOC_OVERRUN_CHECK_OVERHEAD 0
630 #else
632 /* Check for overrun in malloc'ed buffers by wrapping a header and trailer
633 around each block.
635 The header consists of XMALLOC_OVERRUN_CHECK_SIZE fixed bytes
636 followed by XMALLOC_OVERRUN_SIZE_SIZE bytes containing the original
637 block size in little-endian order. The trailer consists of
638 XMALLOC_OVERRUN_CHECK_SIZE fixed bytes.
640 The header is used to detect whether this block has been allocated
641 through these functions, as some low-level libc functions may
642 bypass the malloc hooks. */
644 #define XMALLOC_OVERRUN_CHECK_SIZE 16
645 #define XMALLOC_OVERRUN_CHECK_OVERHEAD \
646 (2 * XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE)
648 #define XMALLOC_BASE_ALIGNMENT alignof (max_align_t)
650 #define XMALLOC_HEADER_ALIGNMENT \
651 COMMON_MULTIPLE (GCALIGNMENT, XMALLOC_BASE_ALIGNMENT)
653 /* Define XMALLOC_OVERRUN_SIZE_SIZE so that (1) it's large enough to
654 hold a size_t value and (2) the header size is a multiple of the
655 alignment that Emacs needs for C types and for USE_LSB_TAG. */
656 #define XMALLOC_OVERRUN_SIZE_SIZE \
657 (((XMALLOC_OVERRUN_CHECK_SIZE + sizeof (size_t) \
658 + XMALLOC_HEADER_ALIGNMENT - 1) \
659 / XMALLOC_HEADER_ALIGNMENT * XMALLOC_HEADER_ALIGNMENT) \
660 - XMALLOC_OVERRUN_CHECK_SIZE)
662 static char const xmalloc_overrun_check_header[XMALLOC_OVERRUN_CHECK_SIZE] =
663 { '\x9a', '\x9b', '\xae', '\xaf',
664 '\xbf', '\xbe', '\xce', '\xcf',
665 '\xea', '\xeb', '\xec', '\xed',
666 '\xdf', '\xde', '\x9c', '\x9d' };
668 static char const xmalloc_overrun_check_trailer[XMALLOC_OVERRUN_CHECK_SIZE] =
669 { '\xaa', '\xab', '\xac', '\xad',
670 '\xba', '\xbb', '\xbc', '\xbd',
671 '\xca', '\xcb', '\xcc', '\xcd',
672 '\xda', '\xdb', '\xdc', '\xdd' };
674 /* Insert and extract the block size in the header. */
676 static void
677 xmalloc_put_size (unsigned char *ptr, size_t size)
679 int i;
680 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
682 *--ptr = size & ((1 << CHAR_BIT) - 1);
683 size >>= CHAR_BIT;
687 static size_t
688 xmalloc_get_size (unsigned char *ptr)
690 size_t size = 0;
691 int i;
692 ptr -= XMALLOC_OVERRUN_SIZE_SIZE;
693 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
695 size <<= CHAR_BIT;
696 size += *ptr++;
698 return size;
702 /* Like malloc, but wraps allocated block with header and trailer. */
704 static void *
705 overrun_check_malloc (size_t size)
707 register unsigned char *val;
708 if (SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD < size)
709 emacs_abort ();
711 val = malloc (size + XMALLOC_OVERRUN_CHECK_OVERHEAD);
712 if (val)
714 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
715 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
716 xmalloc_put_size (val, size);
717 memcpy (val + size, xmalloc_overrun_check_trailer,
718 XMALLOC_OVERRUN_CHECK_SIZE);
720 return val;
724 /* Like realloc, but checks old block for overrun, and wraps new block
725 with header and trailer. */
727 static void *
728 overrun_check_realloc (void *block, size_t size)
730 register unsigned char *val = (unsigned char *) block;
731 if (SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD < size)
732 emacs_abort ();
734 if (val
735 && memcmp (xmalloc_overrun_check_header,
736 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
737 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
739 size_t osize = xmalloc_get_size (val);
740 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
741 XMALLOC_OVERRUN_CHECK_SIZE))
742 emacs_abort ();
743 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
744 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
745 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
748 val = realloc (val, size + XMALLOC_OVERRUN_CHECK_OVERHEAD);
750 if (val)
752 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
753 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
754 xmalloc_put_size (val, size);
755 memcpy (val + size, xmalloc_overrun_check_trailer,
756 XMALLOC_OVERRUN_CHECK_SIZE);
758 return val;
761 /* Like free, but checks block for overrun. */
763 static void
764 overrun_check_free (void *block)
766 unsigned char *val = (unsigned char *) block;
768 if (val
769 && memcmp (xmalloc_overrun_check_header,
770 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
771 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
773 size_t osize = xmalloc_get_size (val);
774 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
775 XMALLOC_OVERRUN_CHECK_SIZE))
776 emacs_abort ();
777 #ifdef XMALLOC_CLEAR_FREE_MEMORY
778 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
779 memset (val, 0xff, osize + XMALLOC_OVERRUN_CHECK_OVERHEAD);
780 #else
781 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
782 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
783 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
784 #endif
787 free (val);
790 #undef malloc
791 #undef realloc
792 #undef free
793 #define malloc overrun_check_malloc
794 #define realloc overrun_check_realloc
795 #define free overrun_check_free
796 #endif
798 /* If compiled with XMALLOC_BLOCK_INPUT_CHECK, define a symbol
799 BLOCK_INPUT_IN_MEMORY_ALLOCATORS that is visible to the debugger.
800 If that variable is set, block input while in one of Emacs's memory
801 allocation functions. There should be no need for this debugging
802 option, since signal handlers do not allocate memory, but Emacs
803 formerly allocated memory in signal handlers and this compile-time
804 option remains as a way to help debug the issue should it rear its
805 ugly head again. */
806 #ifdef XMALLOC_BLOCK_INPUT_CHECK
807 bool block_input_in_memory_allocators EXTERNALLY_VISIBLE;
808 static void
809 malloc_block_input (void)
811 if (block_input_in_memory_allocators)
812 block_input ();
814 static void
815 malloc_unblock_input (void)
817 if (block_input_in_memory_allocators)
818 unblock_input ();
820 # define MALLOC_BLOCK_INPUT malloc_block_input ()
821 # define MALLOC_UNBLOCK_INPUT malloc_unblock_input ()
822 #else
823 # define MALLOC_BLOCK_INPUT ((void) 0)
824 # define MALLOC_UNBLOCK_INPUT ((void) 0)
825 #endif
827 #define MALLOC_PROBE(size) \
828 do { \
829 if (profiler_memory_running) \
830 malloc_probe (size); \
831 } while (0)
833 static void *lmalloc (size_t) ATTRIBUTE_MALLOC_SIZE ((1));
834 static void *lrealloc (void *, size_t);
836 /* Like malloc but check for no memory and block interrupt input. */
838 void *
839 xmalloc (size_t size)
841 void *val;
843 MALLOC_BLOCK_INPUT;
844 val = lmalloc (size);
845 MALLOC_UNBLOCK_INPUT;
847 if (!val && size)
848 memory_full (size);
849 MALLOC_PROBE (size);
850 return val;
853 /* Like the above, but zeroes out the memory just allocated. */
855 void *
856 xzalloc (size_t size)
858 void *val;
860 MALLOC_BLOCK_INPUT;
861 val = lmalloc (size);
862 MALLOC_UNBLOCK_INPUT;
864 if (!val && size)
865 memory_full (size);
866 memset (val, 0, size);
867 MALLOC_PROBE (size);
868 return val;
871 /* Like realloc but check for no memory and block interrupt input.. */
873 void *
874 xrealloc (void *block, size_t size)
876 void *val;
878 MALLOC_BLOCK_INPUT;
879 /* We must call malloc explicitly when BLOCK is 0, since some
880 reallocs don't do this. */
881 if (! block)
882 val = lmalloc (size);
883 else
884 val = lrealloc (block, size);
885 MALLOC_UNBLOCK_INPUT;
887 if (!val && size)
888 memory_full (size);
889 MALLOC_PROBE (size);
890 return val;
894 /* Like free but block interrupt input. */
896 void
897 xfree (void *block)
899 if (!block)
900 return;
901 MALLOC_BLOCK_INPUT;
902 free (block);
903 MALLOC_UNBLOCK_INPUT;
904 /* We don't call refill_memory_reserve here
905 because in practice the call in r_alloc_free seems to suffice. */
909 /* Other parts of Emacs pass large int values to allocator functions
910 expecting ptrdiff_t. This is portable in practice, but check it to
911 be safe. */
912 verify (INT_MAX <= PTRDIFF_MAX);
915 /* Allocate an array of NITEMS items, each of size ITEM_SIZE.
916 Signal an error on memory exhaustion, and block interrupt input. */
918 void *
919 xnmalloc (ptrdiff_t nitems, ptrdiff_t item_size)
921 eassert (0 <= nitems && 0 < item_size);
922 ptrdiff_t nbytes;
923 if (INT_MULTIPLY_WRAPV (nitems, item_size, &nbytes) || SIZE_MAX < nbytes)
924 memory_full (SIZE_MAX);
925 return xmalloc (nbytes);
929 /* Reallocate an array PA to make it of NITEMS items, each of size ITEM_SIZE.
930 Signal an error on memory exhaustion, and block interrupt input. */
932 void *
933 xnrealloc (void *pa, ptrdiff_t nitems, ptrdiff_t item_size)
935 eassert (0 <= nitems && 0 < item_size);
936 ptrdiff_t nbytes;
937 if (INT_MULTIPLY_WRAPV (nitems, item_size, &nbytes) || SIZE_MAX < nbytes)
938 memory_full (SIZE_MAX);
939 return xrealloc (pa, nbytes);
943 /* Grow PA, which points to an array of *NITEMS items, and return the
944 location of the reallocated array, updating *NITEMS to reflect its
945 new size. The new array will contain at least NITEMS_INCR_MIN more
946 items, but will not contain more than NITEMS_MAX items total.
947 ITEM_SIZE is the size of each item, in bytes.
949 ITEM_SIZE and NITEMS_INCR_MIN must be positive. *NITEMS must be
950 nonnegative. If NITEMS_MAX is -1, it is treated as if it were
951 infinity.
953 If PA is null, then allocate a new array instead of reallocating
954 the old one.
956 Block interrupt input as needed. If memory exhaustion occurs, set
957 *NITEMS to zero if PA is null, and signal an error (i.e., do not
958 return).
960 Thus, to grow an array A without saving its old contents, do
961 { xfree (A); A = NULL; A = xpalloc (NULL, &AITEMS, ...); }.
962 The A = NULL avoids a dangling pointer if xpalloc exhausts memory
963 and signals an error, and later this code is reexecuted and
964 attempts to free A. */
966 void *
967 xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
968 ptrdiff_t nitems_max, ptrdiff_t item_size)
970 ptrdiff_t n0 = *nitems;
971 eassume (0 < item_size && 0 < nitems_incr_min && 0 <= n0 && -1 <= nitems_max);
973 /* The approximate size to use for initial small allocation
974 requests. This is the largest "small" request for the GNU C
975 library malloc. */
976 enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
978 /* If the array is tiny, grow it to about (but no greater than)
979 DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%.
980 Adjust the growth according to three constraints: NITEMS_INCR_MIN,
981 NITEMS_MAX, and what the C language can represent safely. */
983 ptrdiff_t n, nbytes;
984 if (INT_ADD_WRAPV (n0, n0 >> 1, &n))
985 n = PTRDIFF_MAX;
986 if (0 <= nitems_max && nitems_max < n)
987 n = nitems_max;
989 ptrdiff_t adjusted_nbytes
990 = ((INT_MULTIPLY_WRAPV (n, item_size, &nbytes) || SIZE_MAX < nbytes)
991 ? min (PTRDIFF_MAX, SIZE_MAX)
992 : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0);
993 if (adjusted_nbytes)
995 n = adjusted_nbytes / item_size;
996 nbytes = adjusted_nbytes - adjusted_nbytes % item_size;
999 if (! pa)
1000 *nitems = 0;
1001 if (n - n0 < nitems_incr_min
1002 && (INT_ADD_WRAPV (n0, nitems_incr_min, &n)
1003 || (0 <= nitems_max && nitems_max < n)
1004 || INT_MULTIPLY_WRAPV (n, item_size, &nbytes)))
1005 memory_full (SIZE_MAX);
1006 pa = xrealloc (pa, nbytes);
1007 *nitems = n;
1008 return pa;
1012 /* Like strdup, but uses xmalloc. */
1014 char *
1015 xstrdup (const char *s)
1017 ptrdiff_t size;
1018 eassert (s);
1019 size = strlen (s) + 1;
1020 return memcpy (xmalloc (size), s, size);
1023 /* Like above, but duplicates Lisp string to C string. */
1025 char *
1026 xlispstrdup (Lisp_Object string)
1028 ptrdiff_t size = SBYTES (string) + 1;
1029 return memcpy (xmalloc (size), SSDATA (string), size);
1032 /* Assign to *PTR a copy of STRING, freeing any storage *PTR formerly
1033 pointed to. If STRING is null, assign it without copying anything.
1034 Allocate before freeing, to avoid a dangling pointer if allocation
1035 fails. */
1037 void
1038 dupstring (char **ptr, char const *string)
1040 char *old = *ptr;
1041 *ptr = string ? xstrdup (string) : 0;
1042 xfree (old);
1046 /* Like putenv, but (1) use the equivalent of xmalloc and (2) the
1047 argument is a const pointer. */
1049 void
1050 xputenv (char const *string)
1052 if (putenv ((char *) string) != 0)
1053 memory_full (0);
1056 /* Return a newly allocated memory block of SIZE bytes, remembering
1057 to free it when unwinding. */
1058 void *
1059 record_xmalloc (size_t size)
1061 void *p = xmalloc (size);
1062 record_unwind_protect_ptr (xfree, p);
1063 return p;
1067 /* Like malloc but used for allocating Lisp data. NBYTES is the
1068 number of bytes to allocate, TYPE describes the intended use of the
1069 allocated memory block (for strings, for conses, ...). */
1071 #if ! USE_LSB_TAG
1072 void *lisp_malloc_loser EXTERNALLY_VISIBLE;
1073 #endif
1075 static void *
1076 lisp_malloc (size_t nbytes, enum mem_type type)
1078 register void *val;
1080 MALLOC_BLOCK_INPUT;
1082 #ifdef GC_MALLOC_CHECK
1083 allocated_mem_type = type;
1084 #endif
1086 val = lmalloc (nbytes);
1088 #if ! USE_LSB_TAG
1089 /* If the memory just allocated cannot be addressed thru a Lisp
1090 object's pointer, and it needs to be,
1091 that's equivalent to running out of memory. */
1092 if (val && type != MEM_TYPE_NON_LISP)
1094 Lisp_Object tem;
1095 XSETCONS (tem, (char *) val + nbytes - 1);
1096 if ((char *) XCONS (tem) != (char *) val + nbytes - 1)
1098 lisp_malloc_loser = val;
1099 free (val);
1100 val = 0;
1103 #endif
1105 #ifndef GC_MALLOC_CHECK
1106 if (val && type != MEM_TYPE_NON_LISP)
1107 mem_insert (val, (char *) val + nbytes, type);
1108 #endif
1110 MALLOC_UNBLOCK_INPUT;
1111 if (!val && nbytes)
1112 memory_full (nbytes);
1113 MALLOC_PROBE (nbytes);
1114 return val;
1117 /* Free BLOCK. This must be called to free memory allocated with a
1118 call to lisp_malloc. */
1120 static void
1121 lisp_free (void *block)
1123 MALLOC_BLOCK_INPUT;
1124 free (block);
1125 #ifndef GC_MALLOC_CHECK
1126 mem_delete (mem_find (block));
1127 #endif
1128 MALLOC_UNBLOCK_INPUT;
1131 /***** Allocation of aligned blocks of memory to store Lisp data. *****/
1133 /* The entry point is lisp_align_malloc which returns blocks of at most
1134 BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */
1136 /* Byte alignment of storage blocks. */
1137 #define BLOCK_ALIGN (1 << 10)
1138 verify (POWER_OF_2 (BLOCK_ALIGN));
1140 /* Use aligned_alloc if it or a simple substitute is available.
1141 Address sanitization breaks aligned allocation, as of gcc 4.8.2 and
1142 clang 3.3 anyway. Aligned allocation is incompatible with
1143 unexmacosx.c, so don't use it on Darwin. */
1145 #if ! ADDRESS_SANITIZER && !defined DARWIN_OS
1146 # if (defined HAVE_ALIGNED_ALLOC \
1147 || (defined HYBRID_MALLOC \
1148 ? defined HAVE_POSIX_MEMALIGN \
1149 : !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC))
1150 # define USE_ALIGNED_ALLOC 1
1151 # elif !defined HYBRID_MALLOC && defined HAVE_POSIX_MEMALIGN
1152 # define USE_ALIGNED_ALLOC 1
1153 # define aligned_alloc my_aligned_alloc /* Avoid collision with lisp.h. */
1154 static void *
1155 aligned_alloc (size_t alignment, size_t size)
1157 /* POSIX says the alignment must be a power-of-2 multiple of sizeof (void *).
1158 Verify this for all arguments this function is given. */
1159 verify (BLOCK_ALIGN % sizeof (void *) == 0
1160 && POWER_OF_2 (BLOCK_ALIGN / sizeof (void *)));
1161 verify (GCALIGNMENT % sizeof (void *) == 0
1162 && POWER_OF_2 (GCALIGNMENT / sizeof (void *)));
1163 eassert (alignment == BLOCK_ALIGN || alignment == GCALIGNMENT);
1165 void *p;
1166 return posix_memalign (&p, alignment, size) == 0 ? p : 0;
1168 # endif
1169 #endif
1171 /* Padding to leave at the end of a malloc'd block. This is to give
1172 malloc a chance to minimize the amount of memory wasted to alignment.
1173 It should be tuned to the particular malloc library used.
1174 On glibc-2.3.2, malloc never tries to align, so a padding of 0 is best.
1175 aligned_alloc on the other hand would ideally prefer a value of 4
1176 because otherwise, there's 1020 bytes wasted between each ablocks.
1177 In Emacs, testing shows that those 1020 can most of the time be
1178 efficiently used by malloc to place other objects, so a value of 0 can
1179 still preferable unless you have a lot of aligned blocks and virtually
1180 nothing else. */
1181 #define BLOCK_PADDING 0
1182 #define BLOCK_BYTES \
1183 (BLOCK_ALIGN - sizeof (struct ablocks *) - BLOCK_PADDING)
1185 /* Internal data structures and constants. */
1187 #define ABLOCKS_SIZE 16
1189 /* An aligned block of memory. */
1190 struct ablock
1192 union
1194 char payload[BLOCK_BYTES];
1195 struct ablock *next_free;
1196 } x;
1198 /* ABASE is the aligned base of the ablocks. It is overloaded to
1199 hold a virtual "busy" field that counts twice the number of used
1200 ablock values in the parent ablocks, plus one if the real base of
1201 the parent ablocks is ABASE (if the "busy" field is even, the
1202 word before the first ablock holds a pointer to the real base).
1203 The first ablock has a "busy" ABASE, and the others have an
1204 ordinary pointer ABASE. To tell the difference, the code assumes
1205 that pointers, when cast to uintptr_t, are at least 2 *
1206 ABLOCKS_SIZE + 1. */
1207 struct ablocks *abase;
1209 /* The padding of all but the last ablock is unused. The padding of
1210 the last ablock in an ablocks is not allocated. */
1211 #if BLOCK_PADDING
1212 char padding[BLOCK_PADDING];
1213 #endif
1216 /* A bunch of consecutive aligned blocks. */
1217 struct ablocks
1219 struct ablock blocks[ABLOCKS_SIZE];
1222 /* Size of the block requested from malloc or aligned_alloc. */
1223 #define ABLOCKS_BYTES (sizeof (struct ablocks) - BLOCK_PADDING)
1225 #define ABLOCK_ABASE(block) \
1226 (((uintptr_t) (block)->abase) <= (1 + 2 * ABLOCKS_SIZE) \
1227 ? (struct ablocks *) (block) \
1228 : (block)->abase)
1230 /* Virtual `busy' field. */
1231 #define ABLOCKS_BUSY(a_base) ((a_base)->blocks[0].abase)
1233 /* Pointer to the (not necessarily aligned) malloc block. */
1234 #ifdef USE_ALIGNED_ALLOC
1235 #define ABLOCKS_BASE(abase) (abase)
1236 #else
1237 #define ABLOCKS_BASE(abase) \
1238 (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void **) (abase))[-1])
1239 #endif
1241 /* The list of free ablock. */
1242 static struct ablock *free_ablock;
1244 /* Allocate an aligned block of nbytes.
1245 Alignment is on a multiple of BLOCK_ALIGN and `nbytes' has to be
1246 smaller or equal to BLOCK_BYTES. */
1247 static void *
1248 lisp_align_malloc (size_t nbytes, enum mem_type type)
1250 void *base, *val;
1251 struct ablocks *abase;
1253 eassert (nbytes <= BLOCK_BYTES);
1255 MALLOC_BLOCK_INPUT;
1257 #ifdef GC_MALLOC_CHECK
1258 allocated_mem_type = type;
1259 #endif
1261 if (!free_ablock)
1263 int i;
1264 bool aligned;
1266 #ifdef DOUG_LEA_MALLOC
1267 if (!mmap_lisp_allowed_p ())
1268 mallopt (M_MMAP_MAX, 0);
1269 #endif
1271 #ifdef USE_ALIGNED_ALLOC
1272 verify (ABLOCKS_BYTES % BLOCK_ALIGN == 0);
1273 abase = base = aligned_alloc (BLOCK_ALIGN, ABLOCKS_BYTES);
1274 #else
1275 base = malloc (ABLOCKS_BYTES);
1276 abase = pointer_align (base, BLOCK_ALIGN);
1277 #endif
1279 if (base == 0)
1281 MALLOC_UNBLOCK_INPUT;
1282 memory_full (ABLOCKS_BYTES);
1285 aligned = (base == abase);
1286 if (!aligned)
1287 ((void **) abase)[-1] = base;
1289 #ifdef DOUG_LEA_MALLOC
1290 if (!mmap_lisp_allowed_p ())
1291 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1292 #endif
1294 #if ! USE_LSB_TAG
1295 /* If the memory just allocated cannot be addressed thru a Lisp
1296 object's pointer, and it needs to be, that's equivalent to
1297 running out of memory. */
1298 if (type != MEM_TYPE_NON_LISP)
1300 Lisp_Object tem;
1301 char *end = (char *) base + ABLOCKS_BYTES - 1;
1302 XSETCONS (tem, end);
1303 if ((char *) XCONS (tem) != end)
1305 lisp_malloc_loser = base;
1306 free (base);
1307 MALLOC_UNBLOCK_INPUT;
1308 memory_full (SIZE_MAX);
1311 #endif
1313 /* Initialize the blocks and put them on the free list.
1314 If `base' was not properly aligned, we can't use the last block. */
1315 for (i = 0; i < (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1); i++)
1317 abase->blocks[i].abase = abase;
1318 abase->blocks[i].x.next_free = free_ablock;
1319 free_ablock = &abase->blocks[i];
1321 intptr_t ialigned = aligned;
1322 ABLOCKS_BUSY (abase) = (struct ablocks *) ialigned;
1324 eassert ((uintptr_t) abase % BLOCK_ALIGN == 0);
1325 eassert (ABLOCK_ABASE (&abase->blocks[3]) == abase); /* 3 is arbitrary */
1326 eassert (ABLOCK_ABASE (&abase->blocks[0]) == abase);
1327 eassert (ABLOCKS_BASE (abase) == base);
1328 eassert ((intptr_t) ABLOCKS_BUSY (abase) == aligned);
1331 abase = ABLOCK_ABASE (free_ablock);
1332 ABLOCKS_BUSY (abase)
1333 = (struct ablocks *) (2 + (intptr_t) ABLOCKS_BUSY (abase));
1334 val = free_ablock;
1335 free_ablock = free_ablock->x.next_free;
1337 #ifndef GC_MALLOC_CHECK
1338 if (type != MEM_TYPE_NON_LISP)
1339 mem_insert (val, (char *) val + nbytes, type);
1340 #endif
1342 MALLOC_UNBLOCK_INPUT;
1344 MALLOC_PROBE (nbytes);
1346 eassert (0 == ((uintptr_t) val) % BLOCK_ALIGN);
1347 return val;
1350 static void
1351 lisp_align_free (void *block)
1353 struct ablock *ablock = block;
1354 struct ablocks *abase = ABLOCK_ABASE (ablock);
1356 MALLOC_BLOCK_INPUT;
1357 #ifndef GC_MALLOC_CHECK
1358 mem_delete (mem_find (block));
1359 #endif
1360 /* Put on free list. */
1361 ablock->x.next_free = free_ablock;
1362 free_ablock = ablock;
1363 /* Update busy count. */
1364 intptr_t busy = (intptr_t) ABLOCKS_BUSY (abase) - 2;
1365 eassume (0 <= busy && busy <= 2 * ABLOCKS_SIZE - 1);
1366 ABLOCKS_BUSY (abase) = (struct ablocks *) busy;
1368 if (busy < 2)
1369 { /* All the blocks are free. */
1370 int i = 0;
1371 bool aligned = busy;
1372 struct ablock **tem = &free_ablock;
1373 struct ablock *atop = &abase->blocks[aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1];
1375 while (*tem)
1377 if (*tem >= (struct ablock *) abase && *tem < atop)
1379 i++;
1380 *tem = (*tem)->x.next_free;
1382 else
1383 tem = &(*tem)->x.next_free;
1385 eassert ((aligned & 1) == aligned);
1386 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1387 #ifdef USE_POSIX_MEMALIGN
1388 eassert ((uintptr_t) ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1389 #endif
1390 free (ABLOCKS_BASE (abase));
1392 MALLOC_UNBLOCK_INPUT;
1395 #if !defined __GNUC__ && !defined __alignof__
1396 # define __alignof__(type) alignof (type)
1397 #endif
1399 /* True if malloc (N) is known to return a multiple of GCALIGNMENT
1400 whenever N is also a multiple. In practice this is true if
1401 __alignof__ (max_align_t) is a multiple as well, assuming
1402 GCALIGNMENT is 8; other values of GCALIGNMENT have not been looked
1403 into. Use __alignof__ if available, as otherwise
1404 MALLOC_IS_GC_ALIGNED would be false on GCC x86 even though the
1405 alignment is OK there.
1407 This is a macro, not an enum constant, for portability to HP-UX
1408 10.20 cc and AIX 3.2.5 xlc. */
1409 #define MALLOC_IS_GC_ALIGNED \
1410 (GCALIGNMENT == 8 && __alignof__ (max_align_t) % GCALIGNMENT == 0)
1412 /* True if a malloc-returned pointer P is suitably aligned for SIZE,
1413 where Lisp alignment may be needed if SIZE is Lisp-aligned. */
1415 static bool
1416 laligned (void *p, size_t size)
1418 return (MALLOC_IS_GC_ALIGNED || (intptr_t) p % GCALIGNMENT == 0
1419 || size % GCALIGNMENT != 0);
1422 /* Like malloc and realloc except that if SIZE is Lisp-aligned, make
1423 sure the result is too, if necessary by reallocating (typically
1424 with larger and larger sizes) until the allocator returns a
1425 Lisp-aligned pointer. Code that needs to allocate C heap memory
1426 for a Lisp object should use one of these functions to obtain a
1427 pointer P; that way, if T is an enum Lisp_Type value and L ==
1428 make_lisp_ptr (P, T), then XPNTR (L) == P and XTYPE (L) == T.
1430 On typical modern platforms these functions' loops do not iterate.
1431 On now-rare (and perhaps nonexistent) platforms, the loops in
1432 theory could repeat forever. If an infinite loop is possible on a
1433 platform, a build would surely loop and the builder can then send
1434 us a bug report. Adding a counter to try to detect any such loop
1435 would complicate the code (and possibly introduce bugs, in code
1436 that's never really exercised) for little benefit. */
1438 static void *
1439 lmalloc (size_t size)
1441 #if USE_ALIGNED_ALLOC
1442 if (! MALLOC_IS_GC_ALIGNED && size % GCALIGNMENT == 0)
1443 return aligned_alloc (GCALIGNMENT, size);
1444 #endif
1446 while (true)
1448 void *p = malloc (size);
1449 if (laligned (p, size))
1450 return p;
1451 free (p);
1452 size_t bigger = size + GCALIGNMENT;
1453 if (size < bigger)
1454 size = bigger;
1458 static void *
1459 lrealloc (void *p, size_t size)
1461 while (true)
1463 p = realloc (p, size);
1464 if (laligned (p, size))
1465 return p;
1466 size_t bigger = size + GCALIGNMENT;
1467 if (size < bigger)
1468 size = bigger;
1473 /***********************************************************************
1474 Interval Allocation
1475 ***********************************************************************/
1477 /* Number of intervals allocated in an interval_block structure.
1478 The 1020 is 1024 minus malloc overhead. */
1480 #define INTERVAL_BLOCK_SIZE \
1481 ((1020 - sizeof (struct interval_block *)) / sizeof (struct interval))
1483 /* Intervals are allocated in chunks in the form of an interval_block
1484 structure. */
1486 struct interval_block
1488 /* Place `intervals' first, to preserve alignment. */
1489 struct interval intervals[INTERVAL_BLOCK_SIZE];
1490 struct interval_block *next;
1493 /* Current interval block. Its `next' pointer points to older
1494 blocks. */
1496 static struct interval_block *interval_block;
1498 /* Index in interval_block above of the next unused interval
1499 structure. */
1501 static int interval_block_index = INTERVAL_BLOCK_SIZE;
1503 /* Number of free and live intervals. */
1505 static EMACS_INT total_free_intervals, total_intervals;
1507 /* List of free intervals. */
1509 static INTERVAL interval_free_list;
1511 /* Return a new interval. */
1513 INTERVAL
1514 make_interval (void)
1516 INTERVAL val;
1518 MALLOC_BLOCK_INPUT;
1520 if (interval_free_list)
1522 val = interval_free_list;
1523 interval_free_list = INTERVAL_PARENT (interval_free_list);
1525 else
1527 if (interval_block_index == INTERVAL_BLOCK_SIZE)
1529 struct interval_block *newi
1530 = lisp_malloc (sizeof *newi, MEM_TYPE_NON_LISP);
1532 newi->next = interval_block;
1533 interval_block = newi;
1534 interval_block_index = 0;
1535 total_free_intervals += INTERVAL_BLOCK_SIZE;
1537 val = &interval_block->intervals[interval_block_index++];
1540 MALLOC_UNBLOCK_INPUT;
1542 consing_since_gc += sizeof (struct interval);
1543 intervals_consed++;
1544 total_free_intervals--;
1545 RESET_INTERVAL (val);
1546 val->gcmarkbit = 0;
1547 return val;
1551 /* Mark Lisp objects in interval I. */
1553 static void
1554 mark_interval (register INTERVAL i, Lisp_Object dummy)
1556 /* Intervals should never be shared. So, if extra internal checking is
1557 enabled, GC aborts if it seems to have visited an interval twice. */
1558 eassert (!i->gcmarkbit);
1559 i->gcmarkbit = 1;
1560 mark_object (i->plist);
1563 /* Mark the interval tree rooted in I. */
1565 #define MARK_INTERVAL_TREE(i) \
1566 do { \
1567 if (i && !i->gcmarkbit) \
1568 traverse_intervals_noorder (i, mark_interval, Qnil); \
1569 } while (0)
1571 /***********************************************************************
1572 String Allocation
1573 ***********************************************************************/
1575 /* Lisp_Strings are allocated in string_block structures. When a new
1576 string_block is allocated, all the Lisp_Strings it contains are
1577 added to a free-list string_free_list. When a new Lisp_String is
1578 needed, it is taken from that list. During the sweep phase of GC,
1579 string_blocks that are entirely free are freed, except two which
1580 we keep.
1582 String data is allocated from sblock structures. Strings larger
1583 than LARGE_STRING_BYTES, get their own sblock, data for smaller
1584 strings is sub-allocated out of sblocks of size SBLOCK_SIZE.
1586 Sblocks consist internally of sdata structures, one for each
1587 Lisp_String. The sdata structure points to the Lisp_String it
1588 belongs to. The Lisp_String points back to the `u.data' member of
1589 its sdata structure.
1591 When a Lisp_String is freed during GC, it is put back on
1592 string_free_list, and its `data' member and its sdata's `string'
1593 pointer is set to null. The size of the string is recorded in the
1594 `n.nbytes' member of the sdata. So, sdata structures that are no
1595 longer used, can be easily recognized, and it's easy to compact the
1596 sblocks of small strings which we do in compact_small_strings. */
1598 /* Size in bytes of an sblock structure used for small strings. This
1599 is 8192 minus malloc overhead. */
1601 #define SBLOCK_SIZE 8188
1603 /* Strings larger than this are considered large strings. String data
1604 for large strings is allocated from individual sblocks. */
1606 #define LARGE_STRING_BYTES 1024
1608 /* The SDATA typedef is a struct or union describing string memory
1609 sub-allocated from an sblock. This is where the contents of Lisp
1610 strings are stored. */
1612 struct sdata
1614 /* Back-pointer to the string this sdata belongs to. If null, this
1615 structure is free, and NBYTES (in this structure or in the union below)
1616 contains the string's byte size (the same value that STRING_BYTES
1617 would return if STRING were non-null). If non-null, STRING_BYTES
1618 (STRING) is the size of the data, and DATA contains the string's
1619 contents. */
1620 struct Lisp_String *string;
1622 #ifdef GC_CHECK_STRING_BYTES
1623 ptrdiff_t nbytes;
1624 #endif
1626 unsigned char data[FLEXIBLE_ARRAY_MEMBER];
1629 #ifdef GC_CHECK_STRING_BYTES
1631 typedef struct sdata sdata;
1632 #define SDATA_NBYTES(S) (S)->nbytes
1633 #define SDATA_DATA(S) (S)->data
1635 #else
1637 typedef union
1639 struct Lisp_String *string;
1641 /* When STRING is nonnull, this union is actually of type 'struct sdata',
1642 which has a flexible array member. However, if implemented by
1643 giving this union a member of type 'struct sdata', the union
1644 could not be the last (flexible) member of 'struct sblock',
1645 because C99 prohibits a flexible array member from having a type
1646 that is itself a flexible array. So, comment this member out here,
1647 but remember that the option's there when using this union. */
1648 #if 0
1649 struct sdata u;
1650 #endif
1652 /* When STRING is null. */
1653 struct
1655 struct Lisp_String *string;
1656 ptrdiff_t nbytes;
1657 } n;
1658 } sdata;
1660 #define SDATA_NBYTES(S) (S)->n.nbytes
1661 #define SDATA_DATA(S) ((struct sdata *) (S))->data
1663 #endif /* not GC_CHECK_STRING_BYTES */
1665 enum { SDATA_DATA_OFFSET = offsetof (struct sdata, data) };
1667 /* Structure describing a block of memory which is sub-allocated to
1668 obtain string data memory for strings. Blocks for small strings
1669 are of fixed size SBLOCK_SIZE. Blocks for large strings are made
1670 as large as needed. */
1672 struct sblock
1674 /* Next in list. */
1675 struct sblock *next;
1677 /* Pointer to the next free sdata block. This points past the end
1678 of the sblock if there isn't any space left in this block. */
1679 sdata *next_free;
1681 /* String data. */
1682 sdata data[FLEXIBLE_ARRAY_MEMBER];
1685 /* Number of Lisp strings in a string_block structure. The 1020 is
1686 1024 minus malloc overhead. */
1688 #define STRING_BLOCK_SIZE \
1689 ((1020 - sizeof (struct string_block *)) / sizeof (struct Lisp_String))
1691 /* Structure describing a block from which Lisp_String structures
1692 are allocated. */
1694 struct string_block
1696 /* Place `strings' first, to preserve alignment. */
1697 struct Lisp_String strings[STRING_BLOCK_SIZE];
1698 struct string_block *next;
1701 /* Head and tail of the list of sblock structures holding Lisp string
1702 data. We always allocate from current_sblock. The NEXT pointers
1703 in the sblock structures go from oldest_sblock to current_sblock. */
1705 static struct sblock *oldest_sblock, *current_sblock;
1707 /* List of sblocks for large strings. */
1709 static struct sblock *large_sblocks;
1711 /* List of string_block structures. */
1713 static struct string_block *string_blocks;
1715 /* Free-list of Lisp_Strings. */
1717 static struct Lisp_String *string_free_list;
1719 /* Number of live and free Lisp_Strings. */
1721 static EMACS_INT total_strings, total_free_strings;
1723 /* Number of bytes used by live strings. */
1725 static EMACS_INT total_string_bytes;
1727 /* Given a pointer to a Lisp_String S which is on the free-list
1728 string_free_list, return a pointer to its successor in the
1729 free-list. */
1731 #define NEXT_FREE_LISP_STRING(S) (*(struct Lisp_String **) (S))
1733 /* Return a pointer to the sdata structure belonging to Lisp string S.
1734 S must be live, i.e. S->data must not be null. S->data is actually
1735 a pointer to the `u.data' member of its sdata structure; the
1736 structure starts at a constant offset in front of that. */
1738 #define SDATA_OF_STRING(S) ((sdata *) ((S)->data - SDATA_DATA_OFFSET))
1741 #ifdef GC_CHECK_STRING_OVERRUN
1743 /* We check for overrun in string data blocks by appending a small
1744 "cookie" after each allocated string data block, and check for the
1745 presence of this cookie during GC. */
1747 #define GC_STRING_OVERRUN_COOKIE_SIZE 4
1748 static char const string_overrun_cookie[GC_STRING_OVERRUN_COOKIE_SIZE] =
1749 { '\xde', '\xad', '\xbe', '\xef' };
1751 #else
1752 #define GC_STRING_OVERRUN_COOKIE_SIZE 0
1753 #endif
1755 /* Value is the size of an sdata structure large enough to hold NBYTES
1756 bytes of string data. The value returned includes a terminating
1757 NUL byte, the size of the sdata structure, and padding. */
1759 #ifdef GC_CHECK_STRING_BYTES
1761 #define SDATA_SIZE(NBYTES) FLEXSIZEOF (struct sdata, data, NBYTES)
1763 #else /* not GC_CHECK_STRING_BYTES */
1765 /* The 'max' reserves space for the nbytes union member even when NBYTES + 1 is
1766 less than the size of that member. The 'max' is not needed when
1767 SDATA_DATA_OFFSET is a multiple of FLEXALIGNOF (struct sdata),
1768 because then the alignment code reserves enough space. */
1770 #define SDATA_SIZE(NBYTES) \
1771 ((SDATA_DATA_OFFSET \
1772 + (SDATA_DATA_OFFSET % FLEXALIGNOF (struct sdata) == 0 \
1773 ? NBYTES \
1774 : max (NBYTES, FLEXALIGNOF (struct sdata) - 1)) \
1775 + 1 \
1776 + FLEXALIGNOF (struct sdata) - 1) \
1777 & ~(FLEXALIGNOF (struct sdata) - 1))
1779 #endif /* not GC_CHECK_STRING_BYTES */
1781 /* Extra bytes to allocate for each string. */
1783 #define GC_STRING_EXTRA (GC_STRING_OVERRUN_COOKIE_SIZE)
1785 /* Exact bound on the number of bytes in a string, not counting the
1786 terminating null. A string cannot contain more bytes than
1787 STRING_BYTES_BOUND, nor can it be so long that the size_t
1788 arithmetic in allocate_string_data would overflow while it is
1789 calculating a value to be passed to malloc. */
1790 static ptrdiff_t const STRING_BYTES_MAX =
1791 min (STRING_BYTES_BOUND,
1792 ((SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD
1793 - GC_STRING_EXTRA
1794 - offsetof (struct sblock, data)
1795 - SDATA_DATA_OFFSET)
1796 & ~(sizeof (EMACS_INT) - 1)));
1798 /* Initialize string allocation. Called from init_alloc_once. */
1800 static void
1801 init_strings (void)
1803 empty_unibyte_string = make_pure_string ("", 0, 0, 0);
1804 empty_multibyte_string = make_pure_string ("", 0, 0, 1);
1808 #ifdef GC_CHECK_STRING_BYTES
1810 static int check_string_bytes_count;
1812 /* Like STRING_BYTES, but with debugging check. Can be
1813 called during GC, so pay attention to the mark bit. */
1815 ptrdiff_t
1816 string_bytes (struct Lisp_String *s)
1818 ptrdiff_t nbytes =
1819 (s->size_byte < 0 ? s->size & ~ARRAY_MARK_FLAG : s->size_byte);
1821 if (!PURE_P (s) && s->data && nbytes != SDATA_NBYTES (SDATA_OF_STRING (s)))
1822 emacs_abort ();
1823 return nbytes;
1826 /* Check validity of Lisp strings' string_bytes member in B. */
1828 static void
1829 check_sblock (struct sblock *b)
1831 sdata *from, *end, *from_end;
1833 end = b->next_free;
1835 for (from = b->data; from < end; from = from_end)
1837 /* Compute the next FROM here because copying below may
1838 overwrite data we need to compute it. */
1839 ptrdiff_t nbytes;
1841 /* Check that the string size recorded in the string is the
1842 same as the one recorded in the sdata structure. */
1843 nbytes = SDATA_SIZE (from->string ? string_bytes (from->string)
1844 : SDATA_NBYTES (from));
1845 from_end = (sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
1850 /* Check validity of Lisp strings' string_bytes member. ALL_P
1851 means check all strings, otherwise check only most
1852 recently allocated strings. Used for hunting a bug. */
1854 static void
1855 check_string_bytes (bool all_p)
1857 if (all_p)
1859 struct sblock *b;
1861 for (b = large_sblocks; b; b = b->next)
1863 struct Lisp_String *s = b->data[0].string;
1864 if (s)
1865 string_bytes (s);
1868 for (b = oldest_sblock; b; b = b->next)
1869 check_sblock (b);
1871 else if (current_sblock)
1872 check_sblock (current_sblock);
1875 #else /* not GC_CHECK_STRING_BYTES */
1877 #define check_string_bytes(all) ((void) 0)
1879 #endif /* GC_CHECK_STRING_BYTES */
1881 #ifdef GC_CHECK_STRING_FREE_LIST
1883 /* Walk through the string free list looking for bogus next pointers.
1884 This may catch buffer overrun from a previous string. */
1886 static void
1887 check_string_free_list (void)
1889 struct Lisp_String *s;
1891 /* Pop a Lisp_String off the free-list. */
1892 s = string_free_list;
1893 while (s != NULL)
1895 if ((uintptr_t) s < 1024)
1896 emacs_abort ();
1897 s = NEXT_FREE_LISP_STRING (s);
1900 #else
1901 #define check_string_free_list()
1902 #endif
1904 /* Return a new Lisp_String. */
1906 static struct Lisp_String *
1907 allocate_string (void)
1909 struct Lisp_String *s;
1911 MALLOC_BLOCK_INPUT;
1913 /* If the free-list is empty, allocate a new string_block, and
1914 add all the Lisp_Strings in it to the free-list. */
1915 if (string_free_list == NULL)
1917 struct string_block *b = lisp_malloc (sizeof *b, MEM_TYPE_STRING);
1918 int i;
1920 b->next = string_blocks;
1921 string_blocks = b;
1923 for (i = STRING_BLOCK_SIZE - 1; i >= 0; --i)
1925 s = b->strings + i;
1926 /* Every string on a free list should have NULL data pointer. */
1927 s->data = NULL;
1928 NEXT_FREE_LISP_STRING (s) = string_free_list;
1929 string_free_list = s;
1932 total_free_strings += STRING_BLOCK_SIZE;
1935 check_string_free_list ();
1937 /* Pop a Lisp_String off the free-list. */
1938 s = string_free_list;
1939 string_free_list = NEXT_FREE_LISP_STRING (s);
1941 MALLOC_UNBLOCK_INPUT;
1943 --total_free_strings;
1944 ++total_strings;
1945 ++strings_consed;
1946 consing_since_gc += sizeof *s;
1948 #ifdef GC_CHECK_STRING_BYTES
1949 if (!noninteractive)
1951 if (++check_string_bytes_count == 200)
1953 check_string_bytes_count = 0;
1954 check_string_bytes (1);
1956 else
1957 check_string_bytes (0);
1959 #endif /* GC_CHECK_STRING_BYTES */
1961 return s;
1965 /* Set up Lisp_String S for holding NCHARS characters, NBYTES bytes,
1966 plus a NUL byte at the end. Allocate an sdata structure for S, and
1967 set S->data to its `u.data' member. Store a NUL byte at the end of
1968 S->data. Set S->size to NCHARS and S->size_byte to NBYTES. Free
1969 S->data if it was initially non-null. */
1971 void
1972 allocate_string_data (struct Lisp_String *s,
1973 EMACS_INT nchars, EMACS_INT nbytes)
1975 sdata *data, *old_data;
1976 struct sblock *b;
1977 ptrdiff_t needed, old_nbytes;
1979 if (STRING_BYTES_MAX < nbytes)
1980 string_overflow ();
1982 /* Determine the number of bytes needed to store NBYTES bytes
1983 of string data. */
1984 needed = SDATA_SIZE (nbytes);
1985 if (s->data)
1987 old_data = SDATA_OF_STRING (s);
1988 old_nbytes = STRING_BYTES (s);
1990 else
1991 old_data = NULL;
1993 MALLOC_BLOCK_INPUT;
1995 if (nbytes > LARGE_STRING_BYTES)
1997 size_t size = FLEXSIZEOF (struct sblock, data, needed);
1999 #ifdef DOUG_LEA_MALLOC
2000 if (!mmap_lisp_allowed_p ())
2001 mallopt (M_MMAP_MAX, 0);
2002 #endif
2004 b = lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
2006 #ifdef DOUG_LEA_MALLOC
2007 if (!mmap_lisp_allowed_p ())
2008 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
2009 #endif
2011 data = b->data;
2012 b->next = large_sblocks;
2013 b->next_free = data;
2014 large_sblocks = b;
2016 else if (current_sblock == NULL
2017 || (((char *) current_sblock + SBLOCK_SIZE
2018 - (char *) current_sblock->next_free)
2019 < (needed + GC_STRING_EXTRA)))
2021 /* Not enough room in the current sblock. */
2022 b = lisp_malloc (SBLOCK_SIZE, MEM_TYPE_NON_LISP);
2023 data = b->data;
2024 b->next = NULL;
2025 b->next_free = data;
2027 if (current_sblock)
2028 current_sblock->next = b;
2029 else
2030 oldest_sblock = b;
2031 current_sblock = b;
2033 else
2035 b = current_sblock;
2036 data = b->next_free;
2039 data->string = s;
2040 b->next_free = (sdata *) ((char *) data + needed + GC_STRING_EXTRA);
2042 MALLOC_UNBLOCK_INPUT;
2044 s->data = SDATA_DATA (data);
2045 #ifdef GC_CHECK_STRING_BYTES
2046 SDATA_NBYTES (data) = nbytes;
2047 #endif
2048 s->size = nchars;
2049 s->size_byte = nbytes;
2050 s->data[nbytes] = '\0';
2051 #ifdef GC_CHECK_STRING_OVERRUN
2052 memcpy ((char *) data + needed, string_overrun_cookie,
2053 GC_STRING_OVERRUN_COOKIE_SIZE);
2054 #endif
2056 /* Note that Faset may call to this function when S has already data
2057 assigned. In this case, mark data as free by setting it's string
2058 back-pointer to null, and record the size of the data in it. */
2059 if (old_data)
2061 SDATA_NBYTES (old_data) = old_nbytes;
2062 old_data->string = NULL;
2065 consing_since_gc += needed;
2069 /* Sweep and compact strings. */
2071 NO_INLINE /* For better stack traces */
2072 static void
2073 sweep_strings (void)
2075 struct string_block *b, *next;
2076 struct string_block *live_blocks = NULL;
2078 string_free_list = NULL;
2079 total_strings = total_free_strings = 0;
2080 total_string_bytes = 0;
2082 /* Scan strings_blocks, free Lisp_Strings that aren't marked. */
2083 for (b = string_blocks; b; b = next)
2085 int i, nfree = 0;
2086 struct Lisp_String *free_list_before = string_free_list;
2088 next = b->next;
2090 for (i = 0; i < STRING_BLOCK_SIZE; ++i)
2092 struct Lisp_String *s = b->strings + i;
2094 if (s->data)
2096 /* String was not on free-list before. */
2097 if (STRING_MARKED_P (s))
2099 /* String is live; unmark it and its intervals. */
2100 UNMARK_STRING (s);
2102 /* Do not use string_(set|get)_intervals here. */
2103 s->intervals = balance_intervals (s->intervals);
2105 ++total_strings;
2106 total_string_bytes += STRING_BYTES (s);
2108 else
2110 /* String is dead. Put it on the free-list. */
2111 sdata *data = SDATA_OF_STRING (s);
2113 /* Save the size of S in its sdata so that we know
2114 how large that is. Reset the sdata's string
2115 back-pointer so that we know it's free. */
2116 #ifdef GC_CHECK_STRING_BYTES
2117 if (string_bytes (s) != SDATA_NBYTES (data))
2118 emacs_abort ();
2119 #else
2120 data->n.nbytes = STRING_BYTES (s);
2121 #endif
2122 data->string = NULL;
2124 /* Reset the strings's `data' member so that we
2125 know it's free. */
2126 s->data = NULL;
2128 /* Put the string on the free-list. */
2129 NEXT_FREE_LISP_STRING (s) = string_free_list;
2130 string_free_list = s;
2131 ++nfree;
2134 else
2136 /* S was on the free-list before. Put it there again. */
2137 NEXT_FREE_LISP_STRING (s) = string_free_list;
2138 string_free_list = s;
2139 ++nfree;
2143 /* Free blocks that contain free Lisp_Strings only, except
2144 the first two of them. */
2145 if (nfree == STRING_BLOCK_SIZE
2146 && total_free_strings > STRING_BLOCK_SIZE)
2148 lisp_free (b);
2149 string_free_list = free_list_before;
2151 else
2153 total_free_strings += nfree;
2154 b->next = live_blocks;
2155 live_blocks = b;
2159 check_string_free_list ();
2161 string_blocks = live_blocks;
2162 free_large_strings ();
2163 compact_small_strings ();
2165 check_string_free_list ();
2169 /* Free dead large strings. */
2171 static void
2172 free_large_strings (void)
2174 struct sblock *b, *next;
2175 struct sblock *live_blocks = NULL;
2177 for (b = large_sblocks; b; b = next)
2179 next = b->next;
2181 if (b->data[0].string == NULL)
2182 lisp_free (b);
2183 else
2185 b->next = live_blocks;
2186 live_blocks = b;
2190 large_sblocks = live_blocks;
2194 /* Compact data of small strings. Free sblocks that don't contain
2195 data of live strings after compaction. */
2197 static void
2198 compact_small_strings (void)
2200 /* TB is the sblock we copy to, TO is the sdata within TB we copy
2201 to, and TB_END is the end of TB. */
2202 struct sblock *tb = oldest_sblock;
2203 if (tb)
2205 sdata *tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
2206 sdata *to = tb->data;
2208 /* Step through the blocks from the oldest to the youngest. We
2209 expect that old blocks will stabilize over time, so that less
2210 copying will happen this way. */
2211 struct sblock *b = tb;
2214 sdata *end = b->next_free;
2215 eassert ((char *) end <= (char *) b + SBLOCK_SIZE);
2217 for (sdata *from = b->data; from < end; )
2219 /* Compute the next FROM here because copying below may
2220 overwrite data we need to compute it. */
2221 ptrdiff_t nbytes;
2222 struct Lisp_String *s = from->string;
2224 #ifdef GC_CHECK_STRING_BYTES
2225 /* Check that the string size recorded in the string is the
2226 same as the one recorded in the sdata structure. */
2227 if (s && string_bytes (s) != SDATA_NBYTES (from))
2228 emacs_abort ();
2229 #endif /* GC_CHECK_STRING_BYTES */
2231 nbytes = s ? STRING_BYTES (s) : SDATA_NBYTES (from);
2232 eassert (nbytes <= LARGE_STRING_BYTES);
2234 nbytes = SDATA_SIZE (nbytes);
2235 sdata *from_end = (sdata *) ((char *) from
2236 + nbytes + GC_STRING_EXTRA);
2238 #ifdef GC_CHECK_STRING_OVERRUN
2239 if (memcmp (string_overrun_cookie,
2240 (char *) from_end - GC_STRING_OVERRUN_COOKIE_SIZE,
2241 GC_STRING_OVERRUN_COOKIE_SIZE))
2242 emacs_abort ();
2243 #endif
2245 /* Non-NULL S means it's alive. Copy its data. */
2246 if (s)
2248 /* If TB is full, proceed with the next sblock. */
2249 sdata *to_end = (sdata *) ((char *) to
2250 + nbytes + GC_STRING_EXTRA);
2251 if (to_end > tb_end)
2253 tb->next_free = to;
2254 tb = tb->next;
2255 tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
2256 to = tb->data;
2257 to_end = (sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2260 /* Copy, and update the string's `data' pointer. */
2261 if (from != to)
2263 eassert (tb != b || to < from);
2264 memmove (to, from, nbytes + GC_STRING_EXTRA);
2265 to->string->data = SDATA_DATA (to);
2268 /* Advance past the sdata we copied to. */
2269 to = to_end;
2271 from = from_end;
2273 b = b->next;
2275 while (b);
2277 /* The rest of the sblocks following TB don't contain live data, so
2278 we can free them. */
2279 for (b = tb->next; b; )
2281 struct sblock *next = b->next;
2282 lisp_free (b);
2283 b = next;
2286 tb->next_free = to;
2287 tb->next = NULL;
2290 current_sblock = tb;
2293 void
2294 string_overflow (void)
2296 error ("Maximum string size exceeded");
2299 DEFUN ("make-string", Fmake_string, Smake_string, 2, 2, 0,
2300 doc: /* Return a newly created string of length LENGTH, with INIT in each element.
2301 LENGTH must be an integer.
2302 INIT must be an integer that represents a character. */)
2303 (Lisp_Object length, Lisp_Object init)
2305 register Lisp_Object val;
2306 int c;
2307 EMACS_INT nbytes;
2309 CHECK_NATNUM (length);
2310 CHECK_CHARACTER (init);
2312 c = XFASTINT (init);
2313 if (ASCII_CHAR_P (c))
2315 nbytes = XINT (length);
2316 val = make_uninit_string (nbytes);
2317 if (nbytes)
2319 memset (SDATA (val), c, nbytes);
2320 SDATA (val)[nbytes] = 0;
2323 else
2325 unsigned char str[MAX_MULTIBYTE_LENGTH];
2326 ptrdiff_t len = CHAR_STRING (c, str);
2327 EMACS_INT string_len = XINT (length);
2328 unsigned char *p, *beg, *end;
2330 if (INT_MULTIPLY_WRAPV (len, string_len, &nbytes))
2331 string_overflow ();
2332 val = make_uninit_multibyte_string (string_len, nbytes);
2333 for (beg = SDATA (val), p = beg, end = beg + nbytes; p < end; p += len)
2335 /* First time we just copy `str' to the data of `val'. */
2336 if (p == beg)
2337 memcpy (p, str, len);
2338 else
2340 /* Next time we copy largest possible chunk from
2341 initialized to uninitialized part of `val'. */
2342 len = min (p - beg, end - p);
2343 memcpy (p, beg, len);
2346 if (nbytes)
2347 *p = 0;
2350 return val;
2353 /* Fill A with 1 bits if INIT is non-nil, and with 0 bits otherwise.
2354 Return A. */
2356 Lisp_Object
2357 bool_vector_fill (Lisp_Object a, Lisp_Object init)
2359 EMACS_INT nbits = bool_vector_size (a);
2360 if (0 < nbits)
2362 unsigned char *data = bool_vector_uchar_data (a);
2363 int pattern = NILP (init) ? 0 : (1 << BOOL_VECTOR_BITS_PER_CHAR) - 1;
2364 ptrdiff_t nbytes = bool_vector_bytes (nbits);
2365 int last_mask = ~ (~0u << ((nbits - 1) % BOOL_VECTOR_BITS_PER_CHAR + 1));
2366 memset (data, pattern, nbytes - 1);
2367 data[nbytes - 1] = pattern & last_mask;
2369 return a;
2372 /* Return a newly allocated, uninitialized bool vector of size NBITS. */
2374 Lisp_Object
2375 make_uninit_bool_vector (EMACS_INT nbits)
2377 Lisp_Object val;
2378 EMACS_INT words = bool_vector_words (nbits);
2379 EMACS_INT word_bytes = words * sizeof (bits_word);
2380 EMACS_INT needed_elements = ((bool_header_size - header_size + word_bytes
2381 + word_size - 1)
2382 / word_size);
2383 struct Lisp_Bool_Vector *p
2384 = (struct Lisp_Bool_Vector *) allocate_vector (needed_elements);
2385 XSETVECTOR (val, p);
2386 XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0);
2387 p->size = nbits;
2389 /* Clear padding at the end. */
2390 if (words)
2391 p->data[words - 1] = 0;
2393 return val;
2396 DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0,
2397 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element.
2398 LENGTH must be a number. INIT matters only in whether it is t or nil. */)
2399 (Lisp_Object length, Lisp_Object init)
2401 Lisp_Object val;
2403 CHECK_NATNUM (length);
2404 val = make_uninit_bool_vector (XFASTINT (length));
2405 return bool_vector_fill (val, init);
2408 DEFUN ("bool-vector", Fbool_vector, Sbool_vector, 0, MANY, 0,
2409 doc: /* Return a new bool-vector with specified arguments as elements.
2410 Any number of arguments, even zero arguments, are allowed.
2411 usage: (bool-vector &rest OBJECTS) */)
2412 (ptrdiff_t nargs, Lisp_Object *args)
2414 ptrdiff_t i;
2415 Lisp_Object vector;
2417 vector = make_uninit_bool_vector (nargs);
2418 for (i = 0; i < nargs; i++)
2419 bool_vector_set (vector, i, !NILP (args[i]));
2421 return vector;
2424 /* Make a string from NBYTES bytes at CONTENTS, and compute the number
2425 of characters from the contents. This string may be unibyte or
2426 multibyte, depending on the contents. */
2428 Lisp_Object
2429 make_string (const char *contents, ptrdiff_t nbytes)
2431 register Lisp_Object val;
2432 ptrdiff_t nchars, multibyte_nbytes;
2434 parse_str_as_multibyte ((const unsigned char *) contents, nbytes,
2435 &nchars, &multibyte_nbytes);
2436 if (nbytes == nchars || nbytes != multibyte_nbytes)
2437 /* CONTENTS contains no multibyte sequences or contains an invalid
2438 multibyte sequence. We must make unibyte string. */
2439 val = make_unibyte_string (contents, nbytes);
2440 else
2441 val = make_multibyte_string (contents, nchars, nbytes);
2442 return val;
2445 /* Make a unibyte string from LENGTH bytes at CONTENTS. */
2447 Lisp_Object
2448 make_unibyte_string (const char *contents, ptrdiff_t length)
2450 register Lisp_Object val;
2451 val = make_uninit_string (length);
2452 memcpy (SDATA (val), contents, length);
2453 return val;
2457 /* Make a multibyte string from NCHARS characters occupying NBYTES
2458 bytes at CONTENTS. */
2460 Lisp_Object
2461 make_multibyte_string (const char *contents,
2462 ptrdiff_t nchars, ptrdiff_t nbytes)
2464 register Lisp_Object val;
2465 val = make_uninit_multibyte_string (nchars, nbytes);
2466 memcpy (SDATA (val), contents, nbytes);
2467 return val;
2471 /* Make a string from NCHARS characters occupying NBYTES bytes at
2472 CONTENTS. It is a multibyte string if NBYTES != NCHARS. */
2474 Lisp_Object
2475 make_string_from_bytes (const char *contents,
2476 ptrdiff_t nchars, ptrdiff_t nbytes)
2478 register Lisp_Object val;
2479 val = make_uninit_multibyte_string (nchars, nbytes);
2480 memcpy (SDATA (val), contents, nbytes);
2481 if (SBYTES (val) == SCHARS (val))
2482 STRING_SET_UNIBYTE (val);
2483 return val;
2487 /* Make a string from NCHARS characters occupying NBYTES bytes at
2488 CONTENTS. The argument MULTIBYTE controls whether to label the
2489 string as multibyte. If NCHARS is negative, it counts the number of
2490 characters by itself. */
2492 Lisp_Object
2493 make_specified_string (const char *contents,
2494 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
2496 Lisp_Object val;
2498 if (nchars < 0)
2500 if (multibyte)
2501 nchars = multibyte_chars_in_text ((const unsigned char *) contents,
2502 nbytes);
2503 else
2504 nchars = nbytes;
2506 val = make_uninit_multibyte_string (nchars, nbytes);
2507 memcpy (SDATA (val), contents, nbytes);
2508 if (!multibyte)
2509 STRING_SET_UNIBYTE (val);
2510 return val;
2514 /* Return a unibyte Lisp_String set up to hold LENGTH characters
2515 occupying LENGTH bytes. */
2517 Lisp_Object
2518 make_uninit_string (EMACS_INT length)
2520 Lisp_Object val;
2522 if (!length)
2523 return empty_unibyte_string;
2524 val = make_uninit_multibyte_string (length, length);
2525 STRING_SET_UNIBYTE (val);
2526 return val;
2530 /* Return a multibyte Lisp_String set up to hold NCHARS characters
2531 which occupy NBYTES bytes. */
2533 Lisp_Object
2534 make_uninit_multibyte_string (EMACS_INT nchars, EMACS_INT nbytes)
2536 Lisp_Object string;
2537 struct Lisp_String *s;
2539 if (nchars < 0)
2540 emacs_abort ();
2541 if (!nbytes)
2542 return empty_multibyte_string;
2544 s = allocate_string ();
2545 s->intervals = NULL;
2546 allocate_string_data (s, nchars, nbytes);
2547 XSETSTRING (string, s);
2548 string_chars_consed += nbytes;
2549 return string;
2552 /* Print arguments to BUF according to a FORMAT, then return
2553 a Lisp_String initialized with the data from BUF. */
2555 Lisp_Object
2556 make_formatted_string (char *buf, const char *format, ...)
2558 va_list ap;
2559 int length;
2561 va_start (ap, format);
2562 length = vsprintf (buf, format, ap);
2563 va_end (ap);
2564 return make_string (buf, length);
2568 /***********************************************************************
2569 Float Allocation
2570 ***********************************************************************/
2572 /* We store float cells inside of float_blocks, allocating a new
2573 float_block with malloc whenever necessary. Float cells reclaimed
2574 by GC are put on a free list to be reallocated before allocating
2575 any new float cells from the latest float_block. */
2577 #define FLOAT_BLOCK_SIZE \
2578 (((BLOCK_BYTES - sizeof (struct float_block *) \
2579 /* The compiler might add padding at the end. */ \
2580 - (sizeof (struct Lisp_Float) - sizeof (bits_word))) * CHAR_BIT) \
2581 / (sizeof (struct Lisp_Float) * CHAR_BIT + 1))
2583 #define GETMARKBIT(block,n) \
2584 (((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2585 >> ((n) % BITS_PER_BITS_WORD)) \
2586 & 1)
2588 #define SETMARKBIT(block,n) \
2589 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2590 |= (bits_word) 1 << ((n) % BITS_PER_BITS_WORD))
2592 #define UNSETMARKBIT(block,n) \
2593 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2594 &= ~((bits_word) 1 << ((n) % BITS_PER_BITS_WORD)))
2596 #define FLOAT_BLOCK(fptr) \
2597 ((struct float_block *) (((uintptr_t) (fptr)) & ~(BLOCK_ALIGN - 1)))
2599 #define FLOAT_INDEX(fptr) \
2600 ((((uintptr_t) (fptr)) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Float))
2602 struct float_block
2604 /* Place `floats' at the beginning, to ease up FLOAT_INDEX's job. */
2605 struct Lisp_Float floats[FLOAT_BLOCK_SIZE];
2606 bits_word gcmarkbits[1 + FLOAT_BLOCK_SIZE / BITS_PER_BITS_WORD];
2607 struct float_block *next;
2610 #define FLOAT_MARKED_P(fptr) \
2611 GETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2613 #define FLOAT_MARK(fptr) \
2614 SETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2616 #define FLOAT_UNMARK(fptr) \
2617 UNSETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2619 /* Current float_block. */
2621 static struct float_block *float_block;
2623 /* Index of first unused Lisp_Float in the current float_block. */
2625 static int float_block_index = FLOAT_BLOCK_SIZE;
2627 /* Free-list of Lisp_Floats. */
2629 static struct Lisp_Float *float_free_list;
2631 /* Return a new float object with value FLOAT_VALUE. */
2633 Lisp_Object
2634 make_float (double float_value)
2636 register Lisp_Object val;
2638 MALLOC_BLOCK_INPUT;
2640 if (float_free_list)
2642 /* We use the data field for chaining the free list
2643 so that we won't use the same field that has the mark bit. */
2644 XSETFLOAT (val, float_free_list);
2645 float_free_list = float_free_list->u.chain;
2647 else
2649 if (float_block_index == FLOAT_BLOCK_SIZE)
2651 struct float_block *new
2652 = lisp_align_malloc (sizeof *new, MEM_TYPE_FLOAT);
2653 new->next = float_block;
2654 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2655 float_block = new;
2656 float_block_index = 0;
2657 total_free_floats += FLOAT_BLOCK_SIZE;
2659 XSETFLOAT (val, &float_block->floats[float_block_index]);
2660 float_block_index++;
2663 MALLOC_UNBLOCK_INPUT;
2665 XFLOAT_INIT (val, float_value);
2666 eassert (!FLOAT_MARKED_P (XFLOAT (val)));
2667 consing_since_gc += sizeof (struct Lisp_Float);
2668 floats_consed++;
2669 total_free_floats--;
2670 return val;
2675 /***********************************************************************
2676 Cons Allocation
2677 ***********************************************************************/
2679 /* We store cons cells inside of cons_blocks, allocating a new
2680 cons_block with malloc whenever necessary. Cons cells reclaimed by
2681 GC are put on a free list to be reallocated before allocating
2682 any new cons cells from the latest cons_block. */
2684 #define CONS_BLOCK_SIZE \
2685 (((BLOCK_BYTES - sizeof (struct cons_block *) \
2686 /* The compiler might add padding at the end. */ \
2687 - (sizeof (struct Lisp_Cons) - sizeof (bits_word))) * CHAR_BIT) \
2688 / (sizeof (struct Lisp_Cons) * CHAR_BIT + 1))
2690 #define CONS_BLOCK(fptr) \
2691 ((struct cons_block *) ((uintptr_t) (fptr) & ~(BLOCK_ALIGN - 1)))
2693 #define CONS_INDEX(fptr) \
2694 (((uintptr_t) (fptr) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Cons))
2696 struct cons_block
2698 /* Place `conses' at the beginning, to ease up CONS_INDEX's job. */
2699 struct Lisp_Cons conses[CONS_BLOCK_SIZE];
2700 bits_word gcmarkbits[1 + CONS_BLOCK_SIZE / BITS_PER_BITS_WORD];
2701 struct cons_block *next;
2704 #define CONS_MARKED_P(fptr) \
2705 GETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2707 #define CONS_MARK(fptr) \
2708 SETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2710 #define CONS_UNMARK(fptr) \
2711 UNSETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2713 /* Current cons_block. */
2715 static struct cons_block *cons_block;
2717 /* Index of first unused Lisp_Cons in the current block. */
2719 static int cons_block_index = CONS_BLOCK_SIZE;
2721 /* Free-list of Lisp_Cons structures. */
2723 static struct Lisp_Cons *cons_free_list;
2725 /* Explicitly free a cons cell by putting it on the free-list. */
2727 void
2728 free_cons (struct Lisp_Cons *ptr)
2730 ptr->u.chain = cons_free_list;
2731 ptr->car = Vdead;
2732 cons_free_list = ptr;
2733 consing_since_gc -= sizeof *ptr;
2734 total_free_conses++;
2737 DEFUN ("cons", Fcons, Scons, 2, 2, 0,
2738 doc: /* Create a new cons, give it CAR and CDR as components, and return it. */)
2739 (Lisp_Object car, Lisp_Object cdr)
2741 register Lisp_Object val;
2743 MALLOC_BLOCK_INPUT;
2745 if (cons_free_list)
2747 /* We use the cdr for chaining the free list
2748 so that we won't use the same field that has the mark bit. */
2749 XSETCONS (val, cons_free_list);
2750 cons_free_list = cons_free_list->u.chain;
2752 else
2754 if (cons_block_index == CONS_BLOCK_SIZE)
2756 struct cons_block *new
2757 = lisp_align_malloc (sizeof *new, MEM_TYPE_CONS);
2758 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2759 new->next = cons_block;
2760 cons_block = new;
2761 cons_block_index = 0;
2762 total_free_conses += CONS_BLOCK_SIZE;
2764 XSETCONS (val, &cons_block->conses[cons_block_index]);
2765 cons_block_index++;
2768 MALLOC_UNBLOCK_INPUT;
2770 XSETCAR (val, car);
2771 XSETCDR (val, cdr);
2772 eassert (!CONS_MARKED_P (XCONS (val)));
2773 consing_since_gc += sizeof (struct Lisp_Cons);
2774 total_free_conses--;
2775 cons_cells_consed++;
2776 return val;
2779 #ifdef GC_CHECK_CONS_LIST
2780 /* Get an error now if there's any junk in the cons free list. */
2781 void
2782 check_cons_list (void)
2784 struct Lisp_Cons *tail = cons_free_list;
2786 while (tail)
2787 tail = tail->u.chain;
2789 #endif
2791 /* Make a list of 1, 2, 3, 4 or 5 specified objects. */
2793 Lisp_Object
2794 list1 (Lisp_Object arg1)
2796 return Fcons (arg1, Qnil);
2799 Lisp_Object
2800 list2 (Lisp_Object arg1, Lisp_Object arg2)
2802 return Fcons (arg1, Fcons (arg2, Qnil));
2806 Lisp_Object
2807 list3 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3)
2809 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Qnil)));
2813 Lisp_Object
2814 list4 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4)
2816 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4, Qnil))));
2820 Lisp_Object
2821 list5 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5)
2823 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4,
2824 Fcons (arg5, Qnil)))));
2827 /* Make a list of COUNT Lisp_Objects, where ARG is the
2828 first one. Allocate conses from pure space if TYPE
2829 is CONSTYPE_PURE, or allocate as usual if type is CONSTYPE_HEAP. */
2831 Lisp_Object
2832 listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...)
2834 Lisp_Object (*cons) (Lisp_Object, Lisp_Object);
2835 switch (type)
2837 case CONSTYPE_PURE: cons = pure_cons; break;
2838 case CONSTYPE_HEAP: cons = Fcons; break;
2839 default: emacs_abort ();
2842 eassume (0 < count);
2843 Lisp_Object val = cons (arg, Qnil);
2844 Lisp_Object tail = val;
2846 va_list ap;
2847 va_start (ap, arg);
2848 for (ptrdiff_t i = 1; i < count; i++)
2850 Lisp_Object elem = cons (va_arg (ap, Lisp_Object), Qnil);
2851 XSETCDR (tail, elem);
2852 tail = elem;
2854 va_end (ap);
2856 return val;
2859 DEFUN ("list", Flist, Slist, 0, MANY, 0,
2860 doc: /* Return a newly created list with specified arguments as elements.
2861 Any number of arguments, even zero arguments, are allowed.
2862 usage: (list &rest OBJECTS) */)
2863 (ptrdiff_t nargs, Lisp_Object *args)
2865 register Lisp_Object val;
2866 val = Qnil;
2868 while (nargs > 0)
2870 nargs--;
2871 val = Fcons (args[nargs], val);
2873 return val;
2877 DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
2878 doc: /* Return a newly created list of length LENGTH, with each element being INIT. */)
2879 (register Lisp_Object length, Lisp_Object init)
2881 register Lisp_Object val;
2882 register EMACS_INT size;
2884 CHECK_NATNUM (length);
2885 size = XFASTINT (length);
2887 val = Qnil;
2888 while (size > 0)
2890 val = Fcons (init, val);
2891 --size;
2893 if (size > 0)
2895 val = Fcons (init, val);
2896 --size;
2898 if (size > 0)
2900 val = Fcons (init, val);
2901 --size;
2903 if (size > 0)
2905 val = Fcons (init, val);
2906 --size;
2908 if (size > 0)
2910 val = Fcons (init, val);
2911 --size;
2917 QUIT;
2920 return val;
2925 /***********************************************************************
2926 Vector Allocation
2927 ***********************************************************************/
2929 /* Sometimes a vector's contents are merely a pointer internally used
2930 in vector allocation code. On the rare platforms where a null
2931 pointer cannot be tagged, represent it with a Lisp 0.
2932 Usually you don't want to touch this. */
2934 static struct Lisp_Vector *
2935 next_vector (struct Lisp_Vector *v)
2937 return XUNTAG (v->contents[0], Lisp_Int0);
2940 static void
2941 set_next_vector (struct Lisp_Vector *v, struct Lisp_Vector *p)
2943 v->contents[0] = make_lisp_ptr (p, Lisp_Int0);
2946 /* This value is balanced well enough to avoid too much internal overhead
2947 for the most common cases; it's not required to be a power of two, but
2948 it's expected to be a mult-of-ROUNDUP_SIZE (see below). */
2950 #define VECTOR_BLOCK_SIZE 4096
2952 enum
2954 /* Alignment of struct Lisp_Vector objects. */
2955 vector_alignment = COMMON_MULTIPLE (FLEXALIGNOF (struct Lisp_Vector),
2956 GCALIGNMENT),
2958 /* Vector size requests are a multiple of this. */
2959 roundup_size = COMMON_MULTIPLE (vector_alignment, word_size)
2962 /* Verify assumptions described above. */
2963 verify (VECTOR_BLOCK_SIZE % roundup_size == 0);
2964 verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS));
2966 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */
2967 #define vroundup_ct(x) ROUNDUP (x, roundup_size)
2968 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */
2969 #define vroundup(x) (eassume ((x) >= 0), vroundup_ct (x))
2971 /* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */
2973 #define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup_ct (sizeof (void *)))
2975 /* Size of the minimal vector allocated from block. */
2977 #define VBLOCK_BYTES_MIN vroundup_ct (header_size + sizeof (Lisp_Object))
2979 /* Size of the largest vector allocated from block. */
2981 #define VBLOCK_BYTES_MAX \
2982 vroundup ((VECTOR_BLOCK_BYTES / 2) - word_size)
2984 /* We maintain one free list for each possible block-allocated
2985 vector size, and this is the number of free lists we have. */
2987 #define VECTOR_MAX_FREE_LIST_INDEX \
2988 ((VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN) / roundup_size + 1)
2990 /* Common shortcut to advance vector pointer over a block data. */
2992 #define ADVANCE(v, nbytes) ((struct Lisp_Vector *) ((char *) (v) + (nbytes)))
2994 /* Common shortcut to calculate NBYTES-vector index in VECTOR_FREE_LISTS. */
2996 #define VINDEX(nbytes) (((nbytes) - VBLOCK_BYTES_MIN) / roundup_size)
2998 /* Common shortcut to setup vector on a free list. */
3000 #define SETUP_ON_FREE_LIST(v, nbytes, tmp) \
3001 do { \
3002 (tmp) = ((nbytes - header_size) / word_size); \
3003 XSETPVECTYPESIZE (v, PVEC_FREE, 0, (tmp)); \
3004 eassert ((nbytes) % roundup_size == 0); \
3005 (tmp) = VINDEX (nbytes); \
3006 eassert ((tmp) < VECTOR_MAX_FREE_LIST_INDEX); \
3007 set_next_vector (v, vector_free_lists[tmp]); \
3008 vector_free_lists[tmp] = (v); \
3009 total_free_vector_slots += (nbytes) / word_size; \
3010 } while (0)
3012 /* This internal type is used to maintain the list of large vectors
3013 which are allocated at their own, e.g. outside of vector blocks.
3015 struct large_vector itself cannot contain a struct Lisp_Vector, as
3016 the latter contains a flexible array member and C99 does not allow
3017 such structs to be nested. Instead, each struct large_vector
3018 object LV is followed by a struct Lisp_Vector, which is at offset
3019 large_vector_offset from LV, and whose address is therefore
3020 large_vector_vec (&LV). */
3022 struct large_vector
3024 struct large_vector *next;
3027 enum
3029 large_vector_offset = ROUNDUP (sizeof (struct large_vector), vector_alignment)
3032 static struct Lisp_Vector *
3033 large_vector_vec (struct large_vector *p)
3035 return (struct Lisp_Vector *) ((char *) p + large_vector_offset);
3038 /* This internal type is used to maintain an underlying storage
3039 for small vectors. */
3041 struct vector_block
3043 char data[VECTOR_BLOCK_BYTES];
3044 struct vector_block *next;
3047 /* Chain of vector blocks. */
3049 static struct vector_block *vector_blocks;
3051 /* Vector free lists, where NTH item points to a chain of free
3052 vectors of the same NBYTES size, so NTH == VINDEX (NBYTES). */
3054 static struct Lisp_Vector *vector_free_lists[VECTOR_MAX_FREE_LIST_INDEX];
3056 /* Singly-linked list of large vectors. */
3058 static struct large_vector *large_vectors;
3060 /* The only vector with 0 slots, allocated from pure space. */
3062 Lisp_Object zero_vector;
3064 /* Number of live vectors. */
3066 static EMACS_INT total_vectors;
3068 /* Total size of live and free vectors, in Lisp_Object units. */
3070 static EMACS_INT total_vector_slots, total_free_vector_slots;
3072 /* Get a new vector block. */
3074 static struct vector_block *
3075 allocate_vector_block (void)
3077 struct vector_block *block = xmalloc (sizeof *block);
3079 #ifndef GC_MALLOC_CHECK
3080 mem_insert (block->data, block->data + VECTOR_BLOCK_BYTES,
3081 MEM_TYPE_VECTOR_BLOCK);
3082 #endif
3084 block->next = vector_blocks;
3085 vector_blocks = block;
3086 return block;
3089 /* Called once to initialize vector allocation. */
3091 static void
3092 init_vectors (void)
3094 zero_vector = make_pure_vector (0);
3097 /* Allocate vector from a vector block. */
3099 static struct Lisp_Vector *
3100 allocate_vector_from_block (size_t nbytes)
3102 struct Lisp_Vector *vector;
3103 struct vector_block *block;
3104 size_t index, restbytes;
3106 eassert (VBLOCK_BYTES_MIN <= nbytes && nbytes <= VBLOCK_BYTES_MAX);
3107 eassert (nbytes % roundup_size == 0);
3109 /* First, try to allocate from a free list
3110 containing vectors of the requested size. */
3111 index = VINDEX (nbytes);
3112 if (vector_free_lists[index])
3114 vector = vector_free_lists[index];
3115 vector_free_lists[index] = next_vector (vector);
3116 total_free_vector_slots -= nbytes / word_size;
3117 return vector;
3120 /* Next, check free lists containing larger vectors. Since
3121 we will split the result, we should have remaining space
3122 large enough to use for one-slot vector at least. */
3123 for (index = VINDEX (nbytes + VBLOCK_BYTES_MIN);
3124 index < VECTOR_MAX_FREE_LIST_INDEX; index++)
3125 if (vector_free_lists[index])
3127 /* This vector is larger than requested. */
3128 vector = vector_free_lists[index];
3129 vector_free_lists[index] = next_vector (vector);
3130 total_free_vector_slots -= nbytes / word_size;
3132 /* Excess bytes are used for the smaller vector,
3133 which should be set on an appropriate free list. */
3134 restbytes = index * roundup_size + VBLOCK_BYTES_MIN - nbytes;
3135 eassert (restbytes % roundup_size == 0);
3136 SETUP_ON_FREE_LIST (ADVANCE (vector, nbytes), restbytes, index);
3137 return vector;
3140 /* Finally, need a new vector block. */
3141 block = allocate_vector_block ();
3143 /* New vector will be at the beginning of this block. */
3144 vector = (struct Lisp_Vector *) block->data;
3146 /* If the rest of space from this block is large enough
3147 for one-slot vector at least, set up it on a free list. */
3148 restbytes = VECTOR_BLOCK_BYTES - nbytes;
3149 if (restbytes >= VBLOCK_BYTES_MIN)
3151 eassert (restbytes % roundup_size == 0);
3152 SETUP_ON_FREE_LIST (ADVANCE (vector, nbytes), restbytes, index);
3154 return vector;
3157 /* Nonzero if VECTOR pointer is valid pointer inside BLOCK. */
3159 #define VECTOR_IN_BLOCK(vector, block) \
3160 ((char *) (vector) <= (block)->data \
3161 + VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN)
3163 /* Return the memory footprint of V in bytes. */
3165 static ptrdiff_t
3166 vector_nbytes (struct Lisp_Vector *v)
3168 ptrdiff_t size = v->header.size & ~ARRAY_MARK_FLAG;
3169 ptrdiff_t nwords;
3171 if (size & PSEUDOVECTOR_FLAG)
3173 if (PSEUDOVECTOR_TYPEP (&v->header, PVEC_BOOL_VECTOR))
3175 struct Lisp_Bool_Vector *bv = (struct Lisp_Bool_Vector *) v;
3176 ptrdiff_t word_bytes = (bool_vector_words (bv->size)
3177 * sizeof (bits_word));
3178 ptrdiff_t boolvec_bytes = bool_header_size + word_bytes;
3179 verify (header_size <= bool_header_size);
3180 nwords = (boolvec_bytes - header_size + word_size - 1) / word_size;
3182 else
3183 nwords = ((size & PSEUDOVECTOR_SIZE_MASK)
3184 + ((size & PSEUDOVECTOR_REST_MASK)
3185 >> PSEUDOVECTOR_SIZE_BITS));
3187 else
3188 nwords = size;
3189 return vroundup (header_size + word_size * nwords);
3192 /* Release extra resources still in use by VECTOR, which may be any
3193 vector-like object. For now, this is used just to free data in
3194 font objects. */
3196 static void
3197 cleanup_vector (struct Lisp_Vector *vector)
3199 detect_suspicious_free (vector);
3200 if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT)
3201 && ((vector->header.size & PSEUDOVECTOR_SIZE_MASK)
3202 == FONT_OBJECT_MAX))
3204 struct font_driver const *drv = ((struct font *) vector)->driver;
3206 /* The font driver might sometimes be NULL, e.g. if Emacs was
3207 interrupted before it had time to set it up. */
3208 if (drv)
3210 /* Attempt to catch subtle bugs like Bug#16140. */
3211 eassert (valid_font_driver (drv));
3212 drv->close ((struct font *) vector);
3217 /* Reclaim space used by unmarked vectors. */
3219 NO_INLINE /* For better stack traces */
3220 static void
3221 sweep_vectors (void)
3223 struct vector_block *block, **bprev = &vector_blocks;
3224 struct large_vector *lv, **lvprev = &large_vectors;
3225 struct Lisp_Vector *vector, *next;
3227 total_vectors = total_vector_slots = total_free_vector_slots = 0;
3228 memset (vector_free_lists, 0, sizeof (vector_free_lists));
3230 /* Looking through vector blocks. */
3232 for (block = vector_blocks; block; block = *bprev)
3234 bool free_this_block = 0;
3235 ptrdiff_t nbytes;
3237 for (vector = (struct Lisp_Vector *) block->data;
3238 VECTOR_IN_BLOCK (vector, block); vector = next)
3240 if (VECTOR_MARKED_P (vector))
3242 VECTOR_UNMARK (vector);
3243 total_vectors++;
3244 nbytes = vector_nbytes (vector);
3245 total_vector_slots += nbytes / word_size;
3246 next = ADVANCE (vector, nbytes);
3248 else
3250 ptrdiff_t total_bytes;
3252 cleanup_vector (vector);
3253 nbytes = vector_nbytes (vector);
3254 total_bytes = nbytes;
3255 next = ADVANCE (vector, nbytes);
3257 /* While NEXT is not marked, try to coalesce with VECTOR,
3258 thus making VECTOR of the largest possible size. */
3260 while (VECTOR_IN_BLOCK (next, block))
3262 if (VECTOR_MARKED_P (next))
3263 break;
3264 cleanup_vector (next);
3265 nbytes = vector_nbytes (next);
3266 total_bytes += nbytes;
3267 next = ADVANCE (next, nbytes);
3270 eassert (total_bytes % roundup_size == 0);
3272 if (vector == (struct Lisp_Vector *) block->data
3273 && !VECTOR_IN_BLOCK (next, block))
3274 /* This block should be freed because all of its
3275 space was coalesced into the only free vector. */
3276 free_this_block = 1;
3277 else
3279 size_t tmp;
3280 SETUP_ON_FREE_LIST (vector, total_bytes, tmp);
3285 if (free_this_block)
3287 *bprev = block->next;
3288 #ifndef GC_MALLOC_CHECK
3289 mem_delete (mem_find (block->data));
3290 #endif
3291 xfree (block);
3293 else
3294 bprev = &block->next;
3297 /* Sweep large vectors. */
3299 for (lv = large_vectors; lv; lv = *lvprev)
3301 vector = large_vector_vec (lv);
3302 if (VECTOR_MARKED_P (vector))
3304 VECTOR_UNMARK (vector);
3305 total_vectors++;
3306 if (vector->header.size & PSEUDOVECTOR_FLAG)
3308 /* All non-bool pseudovectors are small enough to be allocated
3309 from vector blocks. This code should be redesigned if some
3310 pseudovector type grows beyond VBLOCK_BYTES_MAX. */
3311 eassert (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR));
3312 total_vector_slots += vector_nbytes (vector) / word_size;
3314 else
3315 total_vector_slots
3316 += header_size / word_size + vector->header.size;
3317 lvprev = &lv->next;
3319 else
3321 *lvprev = lv->next;
3322 lisp_free (lv);
3327 /* Value is a pointer to a newly allocated Lisp_Vector structure
3328 with room for LEN Lisp_Objects. */
3330 static struct Lisp_Vector *
3331 allocate_vectorlike (ptrdiff_t len)
3333 struct Lisp_Vector *p;
3335 MALLOC_BLOCK_INPUT;
3337 if (len == 0)
3338 p = XVECTOR (zero_vector);
3339 else
3341 size_t nbytes = header_size + len * word_size;
3343 #ifdef DOUG_LEA_MALLOC
3344 if (!mmap_lisp_allowed_p ())
3345 mallopt (M_MMAP_MAX, 0);
3346 #endif
3348 if (nbytes <= VBLOCK_BYTES_MAX)
3349 p = allocate_vector_from_block (vroundup (nbytes));
3350 else
3352 struct large_vector *lv
3353 = lisp_malloc ((large_vector_offset + header_size
3354 + len * word_size),
3355 MEM_TYPE_VECTORLIKE);
3356 lv->next = large_vectors;
3357 large_vectors = lv;
3358 p = large_vector_vec (lv);
3361 #ifdef DOUG_LEA_MALLOC
3362 if (!mmap_lisp_allowed_p ())
3363 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
3364 #endif
3366 if (find_suspicious_object_in_range (p, (char *) p + nbytes))
3367 emacs_abort ();
3369 consing_since_gc += nbytes;
3370 vector_cells_consed += len;
3373 MALLOC_UNBLOCK_INPUT;
3375 return p;
3379 /* Allocate a vector with LEN slots. */
3381 struct Lisp_Vector *
3382 allocate_vector (EMACS_INT len)
3384 struct Lisp_Vector *v;
3385 ptrdiff_t nbytes_max = min (PTRDIFF_MAX, SIZE_MAX);
3387 if (min ((nbytes_max - header_size) / word_size, MOST_POSITIVE_FIXNUM) < len)
3388 memory_full (SIZE_MAX);
3389 v = allocate_vectorlike (len);
3390 if (len)
3391 v->header.size = len;
3392 return v;
3396 /* Allocate other vector-like structures. */
3398 struct Lisp_Vector *
3399 allocate_pseudovector (int memlen, int lisplen,
3400 int zerolen, enum pvec_type tag)
3402 struct Lisp_Vector *v = allocate_vectorlike (memlen);
3404 /* Catch bogus values. */
3405 eassert (0 <= tag && tag <= PVEC_FONT);
3406 eassert (0 <= lisplen && lisplen <= zerolen && zerolen <= memlen);
3407 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
3408 eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
3410 /* Only the first LISPLEN slots will be traced normally by the GC. */
3411 memclear (v->contents, zerolen * word_size);
3412 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
3413 return v;
3416 struct buffer *
3417 allocate_buffer (void)
3419 struct buffer *b = lisp_malloc (sizeof *b, MEM_TYPE_BUFFER);
3421 BUFFER_PVEC_INIT (b);
3422 /* Put B on the chain of all buffers including killed ones. */
3423 b->next = all_buffers;
3424 all_buffers = b;
3425 /* Note that the rest fields of B are not initialized. */
3426 return b;
3429 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
3430 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
3431 See also the function `vector'. */)
3432 (Lisp_Object length, Lisp_Object init)
3434 CHECK_NATNUM (length);
3435 struct Lisp_Vector *p = allocate_vector (XFASTINT (length));
3436 for (ptrdiff_t i = 0; i < XFASTINT (length); i++)
3437 p->contents[i] = init;
3438 return make_lisp_ptr (p, Lisp_Vectorlike);
3441 DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
3442 doc: /* Return a newly created vector with specified arguments as elements.
3443 Any number of arguments, even zero arguments, are allowed.
3444 usage: (vector &rest OBJECTS) */)
3445 (ptrdiff_t nargs, Lisp_Object *args)
3447 Lisp_Object val = make_uninit_vector (nargs);
3448 struct Lisp_Vector *p = XVECTOR (val);
3449 memcpy (p->contents, args, nargs * sizeof *args);
3450 return val;
3453 void
3454 make_byte_code (struct Lisp_Vector *v)
3456 /* Don't allow the global zero_vector to become a byte code object. */
3457 eassert (0 < v->header.size);
3459 if (v->header.size > 1 && STRINGP (v->contents[1])
3460 && STRING_MULTIBYTE (v->contents[1]))
3461 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the
3462 earlier because they produced a raw 8-bit string for byte-code
3463 and now such a byte-code string is loaded as multibyte while
3464 raw 8-bit characters converted to multibyte form. Thus, now we
3465 must convert them back to the original unibyte form. */
3466 v->contents[1] = Fstring_as_unibyte (v->contents[1]);
3467 XSETPVECTYPE (v, PVEC_COMPILED);
3470 DEFUN ("make-byte-code", Fmake_byte_code, Smake_byte_code, 4, MANY, 0,
3471 doc: /* Create a byte-code object with specified arguments as elements.
3472 The arguments should be the ARGLIST, bytecode-string BYTE-CODE, constant
3473 vector CONSTANTS, maximum stack size DEPTH, (optional) DOCSTRING,
3474 and (optional) INTERACTIVE-SPEC.
3475 The first four arguments are required; at most six have any
3476 significance.
3477 The ARGLIST can be either like the one of `lambda', in which case the arguments
3478 will be dynamically bound before executing the byte code, or it can be an
3479 integer of the form NNNNNNNRMMMMMMM where the 7bit MMMMMMM specifies the
3480 minimum number of arguments, the 7-bit NNNNNNN specifies the maximum number
3481 of arguments (ignoring &rest) and the R bit specifies whether there is a &rest
3482 argument to catch the left-over arguments. If such an integer is used, the
3483 arguments will not be dynamically bound but will be instead pushed on the
3484 stack before executing the byte-code.
3485 usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS) */)
3486 (ptrdiff_t nargs, Lisp_Object *args)
3488 Lisp_Object val = make_uninit_vector (nargs);
3489 struct Lisp_Vector *p = XVECTOR (val);
3491 /* We used to purecopy everything here, if purify-flag was set. This worked
3492 OK for Emacs-23, but with Emacs-24's lexical binding code, it can be
3493 dangerous, since make-byte-code is used during execution to build
3494 closures, so any closure built during the preload phase would end up
3495 copied into pure space, including its free variables, which is sometimes
3496 just wasteful and other times plainly wrong (e.g. those free vars may want
3497 to be setcar'd). */
3499 memcpy (p->contents, args, nargs * sizeof *args);
3500 make_byte_code (p);
3501 XSETCOMPILED (val, p);
3502 return val;
3507 /***********************************************************************
3508 Symbol Allocation
3509 ***********************************************************************/
3511 /* Like struct Lisp_Symbol, but padded so that the size is a multiple
3512 of the required alignment. */
3514 union aligned_Lisp_Symbol
3516 struct Lisp_Symbol s;
3517 unsigned char c[(sizeof (struct Lisp_Symbol) + GCALIGNMENT - 1)
3518 & -GCALIGNMENT];
3521 /* Each symbol_block is just under 1020 bytes long, since malloc
3522 really allocates in units of powers of two and uses 4 bytes for its
3523 own overhead. */
3525 #define SYMBOL_BLOCK_SIZE \
3526 ((1020 - sizeof (struct symbol_block *)) / sizeof (union aligned_Lisp_Symbol))
3528 struct symbol_block
3530 /* Place `symbols' first, to preserve alignment. */
3531 union aligned_Lisp_Symbol symbols[SYMBOL_BLOCK_SIZE];
3532 struct symbol_block *next;
3535 /* Current symbol block and index of first unused Lisp_Symbol
3536 structure in it. */
3538 static struct symbol_block *symbol_block;
3539 static int symbol_block_index = SYMBOL_BLOCK_SIZE;
3540 /* Pointer to the first symbol_block that contains pinned symbols.
3541 Tests for 24.4 showed that at dump-time, Emacs contains about 15K symbols,
3542 10K of which are pinned (and all but 250 of them are interned in obarray),
3543 whereas a "typical session" has in the order of 30K symbols.
3544 `symbol_block_pinned' lets mark_pinned_symbols scan only 15K symbols rather
3545 than 30K to find the 10K symbols we need to mark. */
3546 static struct symbol_block *symbol_block_pinned;
3548 /* List of free symbols. */
3550 static struct Lisp_Symbol *symbol_free_list;
3552 static void
3553 set_symbol_name (Lisp_Object sym, Lisp_Object name)
3555 XSYMBOL (sym)->name = name;
3558 void
3559 init_symbol (Lisp_Object val, Lisp_Object name)
3561 struct Lisp_Symbol *p = XSYMBOL (val);
3562 set_symbol_name (val, name);
3563 set_symbol_plist (val, Qnil);
3564 p->redirect = SYMBOL_PLAINVAL;
3565 SET_SYMBOL_VAL (p, Qunbound);
3566 set_symbol_function (val, Qnil);
3567 set_symbol_next (val, NULL);
3568 p->gcmarkbit = false;
3569 p->interned = SYMBOL_UNINTERNED;
3570 p->trapped_write = SYMBOL_UNTRAPPED_WRITE;
3571 p->declared_special = false;
3572 p->pinned = false;
3575 DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0,
3576 doc: /* Return a newly allocated uninterned symbol whose name is NAME.
3577 Its value is void, and its function definition and property list are nil. */)
3578 (Lisp_Object name)
3580 Lisp_Object val;
3582 CHECK_STRING (name);
3584 MALLOC_BLOCK_INPUT;
3586 if (symbol_free_list)
3588 XSETSYMBOL (val, symbol_free_list);
3589 symbol_free_list = symbol_free_list->next;
3591 else
3593 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
3595 struct symbol_block *new
3596 = lisp_malloc (sizeof *new, MEM_TYPE_SYMBOL);
3597 new->next = symbol_block;
3598 symbol_block = new;
3599 symbol_block_index = 0;
3600 total_free_symbols += SYMBOL_BLOCK_SIZE;
3602 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index].s);
3603 symbol_block_index++;
3606 MALLOC_UNBLOCK_INPUT;
3608 init_symbol (val, name);
3609 consing_since_gc += sizeof (struct Lisp_Symbol);
3610 symbols_consed++;
3611 total_free_symbols--;
3612 return val;
3617 /***********************************************************************
3618 Marker (Misc) Allocation
3619 ***********************************************************************/
3621 /* Like union Lisp_Misc, but padded so that its size is a multiple of
3622 the required alignment. */
3624 union aligned_Lisp_Misc
3626 union Lisp_Misc m;
3627 unsigned char c[(sizeof (union Lisp_Misc) + GCALIGNMENT - 1)
3628 & -GCALIGNMENT];
3631 /* Allocation of markers and other objects that share that structure.
3632 Works like allocation of conses. */
3634 #define MARKER_BLOCK_SIZE \
3635 ((1020 - sizeof (struct marker_block *)) / sizeof (union aligned_Lisp_Misc))
3637 struct marker_block
3639 /* Place `markers' first, to preserve alignment. */
3640 union aligned_Lisp_Misc markers[MARKER_BLOCK_SIZE];
3641 struct marker_block *next;
3644 static struct marker_block *marker_block;
3645 static int marker_block_index = MARKER_BLOCK_SIZE;
3647 static union Lisp_Misc *marker_free_list;
3649 /* Return a newly allocated Lisp_Misc object of specified TYPE. */
3651 static Lisp_Object
3652 allocate_misc (enum Lisp_Misc_Type type)
3654 Lisp_Object val;
3656 MALLOC_BLOCK_INPUT;
3658 if (marker_free_list)
3660 XSETMISC (val, marker_free_list);
3661 marker_free_list = marker_free_list->u_free.chain;
3663 else
3665 if (marker_block_index == MARKER_BLOCK_SIZE)
3667 struct marker_block *new = lisp_malloc (sizeof *new, MEM_TYPE_MISC);
3668 new->next = marker_block;
3669 marker_block = new;
3670 marker_block_index = 0;
3671 total_free_markers += MARKER_BLOCK_SIZE;
3673 XSETMISC (val, &marker_block->markers[marker_block_index].m);
3674 marker_block_index++;
3677 MALLOC_UNBLOCK_INPUT;
3679 --total_free_markers;
3680 consing_since_gc += sizeof (union Lisp_Misc);
3681 misc_objects_consed++;
3682 XMISCANY (val)->type = type;
3683 XMISCANY (val)->gcmarkbit = 0;
3684 return val;
3687 /* Free a Lisp_Misc object. */
3689 void
3690 free_misc (Lisp_Object misc)
3692 XMISCANY (misc)->type = Lisp_Misc_Free;
3693 XMISC (misc)->u_free.chain = marker_free_list;
3694 marker_free_list = XMISC (misc);
3695 consing_since_gc -= sizeof (union Lisp_Misc);
3696 total_free_markers++;
3699 /* Verify properties of Lisp_Save_Value's representation
3700 that are assumed here and elsewhere. */
3702 verify (SAVE_UNUSED == 0);
3703 verify (((SAVE_INTEGER | SAVE_POINTER | SAVE_FUNCPOINTER | SAVE_OBJECT)
3704 >> SAVE_SLOT_BITS)
3705 == 0);
3707 /* Return Lisp_Save_Value objects for the various combinations
3708 that callers need. */
3710 Lisp_Object
3711 make_save_int_int_int (ptrdiff_t a, ptrdiff_t b, ptrdiff_t c)
3713 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3714 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3715 p->save_type = SAVE_TYPE_INT_INT_INT;
3716 p->data[0].integer = a;
3717 p->data[1].integer = b;
3718 p->data[2].integer = c;
3719 return val;
3722 Lisp_Object
3723 make_save_obj_obj_obj_obj (Lisp_Object a, Lisp_Object b, Lisp_Object c,
3724 Lisp_Object d)
3726 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3727 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3728 p->save_type = SAVE_TYPE_OBJ_OBJ_OBJ_OBJ;
3729 p->data[0].object = a;
3730 p->data[1].object = b;
3731 p->data[2].object = c;
3732 p->data[3].object = d;
3733 return val;
3736 Lisp_Object
3737 make_save_ptr (void *a)
3739 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3740 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3741 p->save_type = SAVE_POINTER;
3742 p->data[0].pointer = a;
3743 return val;
3746 Lisp_Object
3747 make_save_ptr_int (void *a, ptrdiff_t b)
3749 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3750 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3751 p->save_type = SAVE_TYPE_PTR_INT;
3752 p->data[0].pointer = a;
3753 p->data[1].integer = b;
3754 return val;
3757 Lisp_Object
3758 make_save_ptr_ptr (void *a, void *b)
3760 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3761 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3762 p->save_type = SAVE_TYPE_PTR_PTR;
3763 p->data[0].pointer = a;
3764 p->data[1].pointer = b;
3765 return val;
3768 Lisp_Object
3769 make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c)
3771 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3772 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3773 p->save_type = SAVE_TYPE_FUNCPTR_PTR_OBJ;
3774 p->data[0].funcpointer = a;
3775 p->data[1].pointer = b;
3776 p->data[2].object = c;
3777 return val;
3780 /* Return a Lisp_Save_Value object that represents an array A
3781 of N Lisp objects. */
3783 Lisp_Object
3784 make_save_memory (Lisp_Object *a, ptrdiff_t n)
3786 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3787 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3788 p->save_type = SAVE_TYPE_MEMORY;
3789 p->data[0].pointer = a;
3790 p->data[1].integer = n;
3791 return val;
3794 /* Free a Lisp_Save_Value object. Do not use this function
3795 if SAVE contains pointer other than returned by xmalloc. */
3797 void
3798 free_save_value (Lisp_Object save)
3800 xfree (XSAVE_POINTER (save, 0));
3801 free_misc (save);
3804 /* Return a Lisp_Misc_Overlay object with specified START, END and PLIST. */
3806 Lisp_Object
3807 build_overlay (Lisp_Object start, Lisp_Object end, Lisp_Object plist)
3809 register Lisp_Object overlay;
3811 overlay = allocate_misc (Lisp_Misc_Overlay);
3812 OVERLAY_START (overlay) = start;
3813 OVERLAY_END (overlay) = end;
3814 set_overlay_plist (overlay, plist);
3815 XOVERLAY (overlay)->next = NULL;
3816 return overlay;
3819 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3820 doc: /* Return a newly allocated marker which does not point at any place. */)
3821 (void)
3823 register Lisp_Object val;
3824 register struct Lisp_Marker *p;
3826 val = allocate_misc (Lisp_Misc_Marker);
3827 p = XMARKER (val);
3828 p->buffer = 0;
3829 p->bytepos = 0;
3830 p->charpos = 0;
3831 p->next = NULL;
3832 p->insertion_type = 0;
3833 p->need_adjustment = 0;
3834 return val;
3837 /* Return a newly allocated marker which points into BUF
3838 at character position CHARPOS and byte position BYTEPOS. */
3840 Lisp_Object
3841 build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos)
3843 Lisp_Object obj;
3844 struct Lisp_Marker *m;
3846 /* No dead buffers here. */
3847 eassert (BUFFER_LIVE_P (buf));
3849 /* Every character is at least one byte. */
3850 eassert (charpos <= bytepos);
3852 obj = allocate_misc (Lisp_Misc_Marker);
3853 m = XMARKER (obj);
3854 m->buffer = buf;
3855 m->charpos = charpos;
3856 m->bytepos = bytepos;
3857 m->insertion_type = 0;
3858 m->need_adjustment = 0;
3859 m->next = BUF_MARKERS (buf);
3860 BUF_MARKERS (buf) = m;
3861 return obj;
3864 /* Put MARKER back on the free list after using it temporarily. */
3866 void
3867 free_marker (Lisp_Object marker)
3869 unchain_marker (XMARKER (marker));
3870 free_misc (marker);
3874 /* Return a newly created vector or string with specified arguments as
3875 elements. If all the arguments are characters that can fit
3876 in a string of events, make a string; otherwise, make a vector.
3878 Any number of arguments, even zero arguments, are allowed. */
3880 Lisp_Object
3881 make_event_array (ptrdiff_t nargs, Lisp_Object *args)
3883 ptrdiff_t i;
3885 for (i = 0; i < nargs; i++)
3886 /* The things that fit in a string
3887 are characters that are in 0...127,
3888 after discarding the meta bit and all the bits above it. */
3889 if (!INTEGERP (args[i])
3890 || (XINT (args[i]) & ~(-CHAR_META)) >= 0200)
3891 return Fvector (nargs, args);
3893 /* Since the loop exited, we know that all the things in it are
3894 characters, so we can make a string. */
3896 Lisp_Object result;
3898 result = Fmake_string (make_number (nargs), make_number (0));
3899 for (i = 0; i < nargs; i++)
3901 SSET (result, i, XINT (args[i]));
3902 /* Move the meta bit to the right place for a string char. */
3903 if (XINT (args[i]) & CHAR_META)
3904 SSET (result, i, SREF (result, i) | 0x80);
3907 return result;
3911 #ifdef HAVE_MODULES
3912 /* Create a new module user ptr object. */
3913 Lisp_Object
3914 make_user_ptr (void (*finalizer) (void *), void *p)
3916 Lisp_Object obj;
3917 struct Lisp_User_Ptr *uptr;
3919 obj = allocate_misc (Lisp_Misc_User_Ptr);
3920 uptr = XUSER_PTR (obj);
3921 uptr->finalizer = finalizer;
3922 uptr->p = p;
3923 return obj;
3926 #endif
3928 static void
3929 init_finalizer_list (struct Lisp_Finalizer *head)
3931 head->prev = head->next = head;
3934 /* Insert FINALIZER before ELEMENT. */
3936 static void
3937 finalizer_insert (struct Lisp_Finalizer *element,
3938 struct Lisp_Finalizer *finalizer)
3940 eassert (finalizer->prev == NULL);
3941 eassert (finalizer->next == NULL);
3942 finalizer->next = element;
3943 finalizer->prev = element->prev;
3944 finalizer->prev->next = finalizer;
3945 element->prev = finalizer;
3948 static void
3949 unchain_finalizer (struct Lisp_Finalizer *finalizer)
3951 if (finalizer->prev != NULL)
3953 eassert (finalizer->next != NULL);
3954 finalizer->prev->next = finalizer->next;
3955 finalizer->next->prev = finalizer->prev;
3956 finalizer->prev = finalizer->next = NULL;
3960 static void
3961 mark_finalizer_list (struct Lisp_Finalizer *head)
3963 for (struct Lisp_Finalizer *finalizer = head->next;
3964 finalizer != head;
3965 finalizer = finalizer->next)
3967 finalizer->base.gcmarkbit = true;
3968 mark_object (finalizer->function);
3972 /* Move doomed finalizers to list DEST from list SRC. A doomed
3973 finalizer is one that is not GC-reachable and whose
3974 finalizer->function is non-nil. */
3976 static void
3977 queue_doomed_finalizers (struct Lisp_Finalizer *dest,
3978 struct Lisp_Finalizer *src)
3980 struct Lisp_Finalizer *finalizer = src->next;
3981 while (finalizer != src)
3983 struct Lisp_Finalizer *next = finalizer->next;
3984 if (!finalizer->base.gcmarkbit && !NILP (finalizer->function))
3986 unchain_finalizer (finalizer);
3987 finalizer_insert (dest, finalizer);
3990 finalizer = next;
3994 static Lisp_Object
3995 run_finalizer_handler (Lisp_Object args)
3997 add_to_log ("finalizer failed: %S", args);
3998 return Qnil;
4001 static void
4002 run_finalizer_function (Lisp_Object function)
4004 ptrdiff_t count = SPECPDL_INDEX ();
4006 specbind (Qinhibit_quit, Qt);
4007 internal_condition_case_1 (call0, function, Qt, run_finalizer_handler);
4008 unbind_to (count, Qnil);
4011 static void
4012 run_finalizers (struct Lisp_Finalizer *finalizers)
4014 struct Lisp_Finalizer *finalizer;
4015 Lisp_Object function;
4017 while (finalizers->next != finalizers)
4019 finalizer = finalizers->next;
4020 eassert (finalizer->base.type == Lisp_Misc_Finalizer);
4021 unchain_finalizer (finalizer);
4022 function = finalizer->function;
4023 if (!NILP (function))
4025 finalizer->function = Qnil;
4026 run_finalizer_function (function);
4031 DEFUN ("make-finalizer", Fmake_finalizer, Smake_finalizer, 1, 1, 0,
4032 doc: /* Make a finalizer that will run FUNCTION.
4033 FUNCTION will be called after garbage collection when the returned
4034 finalizer object becomes unreachable. If the finalizer object is
4035 reachable only through references from finalizer objects, it does not
4036 count as reachable for the purpose of deciding whether to run
4037 FUNCTION. FUNCTION will be run once per finalizer object. */)
4038 (Lisp_Object function)
4040 Lisp_Object val = allocate_misc (Lisp_Misc_Finalizer);
4041 struct Lisp_Finalizer *finalizer = XFINALIZER (val);
4042 finalizer->function = function;
4043 finalizer->prev = finalizer->next = NULL;
4044 finalizer_insert (&finalizers, finalizer);
4045 return val;
4049 /************************************************************************
4050 Memory Full Handling
4051 ************************************************************************/
4054 /* Called if malloc (NBYTES) returns zero. If NBYTES == SIZE_MAX,
4055 there may have been size_t overflow so that malloc was never
4056 called, or perhaps malloc was invoked successfully but the
4057 resulting pointer had problems fitting into a tagged EMACS_INT. In
4058 either case this counts as memory being full even though malloc did
4059 not fail. */
4061 void
4062 memory_full (size_t nbytes)
4064 /* Do not go into hysterics merely because a large request failed. */
4065 bool enough_free_memory = 0;
4066 if (SPARE_MEMORY < nbytes)
4068 void *p;
4070 MALLOC_BLOCK_INPUT;
4071 p = malloc (SPARE_MEMORY);
4072 if (p)
4074 free (p);
4075 enough_free_memory = 1;
4077 MALLOC_UNBLOCK_INPUT;
4080 if (! enough_free_memory)
4082 int i;
4084 Vmemory_full = Qt;
4086 memory_full_cons_threshold = sizeof (struct cons_block);
4088 /* The first time we get here, free the spare memory. */
4089 for (i = 0; i < ARRAYELTS (spare_memory); i++)
4090 if (spare_memory[i])
4092 if (i == 0)
4093 free (spare_memory[i]);
4094 else if (i >= 1 && i <= 4)
4095 lisp_align_free (spare_memory[i]);
4096 else
4097 lisp_free (spare_memory[i]);
4098 spare_memory[i] = 0;
4102 /* This used to call error, but if we've run out of memory, we could
4103 get infinite recursion trying to build the string. */
4104 xsignal (Qnil, Vmemory_signal_data);
4107 /* If we released our reserve (due to running out of memory),
4108 and we have a fair amount free once again,
4109 try to set aside another reserve in case we run out once more.
4111 This is called when a relocatable block is freed in ralloc.c,
4112 and also directly from this file, in case we're not using ralloc.c. */
4114 void
4115 refill_memory_reserve (void)
4117 #if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
4118 if (spare_memory[0] == 0)
4119 spare_memory[0] = malloc (SPARE_MEMORY);
4120 if (spare_memory[1] == 0)
4121 spare_memory[1] = lisp_align_malloc (sizeof (struct cons_block),
4122 MEM_TYPE_SPARE);
4123 if (spare_memory[2] == 0)
4124 spare_memory[2] = lisp_align_malloc (sizeof (struct cons_block),
4125 MEM_TYPE_SPARE);
4126 if (spare_memory[3] == 0)
4127 spare_memory[3] = lisp_align_malloc (sizeof (struct cons_block),
4128 MEM_TYPE_SPARE);
4129 if (spare_memory[4] == 0)
4130 spare_memory[4] = lisp_align_malloc (sizeof (struct cons_block),
4131 MEM_TYPE_SPARE);
4132 if (spare_memory[5] == 0)
4133 spare_memory[5] = lisp_malloc (sizeof (struct string_block),
4134 MEM_TYPE_SPARE);
4135 if (spare_memory[6] == 0)
4136 spare_memory[6] = lisp_malloc (sizeof (struct string_block),
4137 MEM_TYPE_SPARE);
4138 if (spare_memory[0] && spare_memory[1] && spare_memory[5])
4139 Vmemory_full = Qnil;
4140 #endif
4143 /************************************************************************
4144 C Stack Marking
4145 ************************************************************************/
4147 /* Conservative C stack marking requires a method to identify possibly
4148 live Lisp objects given a pointer value. We do this by keeping
4149 track of blocks of Lisp data that are allocated in a red-black tree
4150 (see also the comment of mem_node which is the type of nodes in
4151 that tree). Function lisp_malloc adds information for an allocated
4152 block to the red-black tree with calls to mem_insert, and function
4153 lisp_free removes it with mem_delete. Functions live_string_p etc
4154 call mem_find to lookup information about a given pointer in the
4155 tree, and use that to determine if the pointer points to a Lisp
4156 object or not. */
4158 /* Initialize this part of alloc.c. */
4160 static void
4161 mem_init (void)
4163 mem_z.left = mem_z.right = MEM_NIL;
4164 mem_z.parent = NULL;
4165 mem_z.color = MEM_BLACK;
4166 mem_z.start = mem_z.end = NULL;
4167 mem_root = MEM_NIL;
4171 /* Value is a pointer to the mem_node containing START. Value is
4172 MEM_NIL if there is no node in the tree containing START. */
4174 static struct mem_node *
4175 mem_find (void *start)
4177 struct mem_node *p;
4179 if (start < min_heap_address || start > max_heap_address)
4180 return MEM_NIL;
4182 /* Make the search always successful to speed up the loop below. */
4183 mem_z.start = start;
4184 mem_z.end = (char *) start + 1;
4186 p = mem_root;
4187 while (start < p->start || start >= p->end)
4188 p = start < p->start ? p->left : p->right;
4189 return p;
4193 /* Insert a new node into the tree for a block of memory with start
4194 address START, end address END, and type TYPE. Value is a
4195 pointer to the node that was inserted. */
4197 static struct mem_node *
4198 mem_insert (void *start, void *end, enum mem_type type)
4200 struct mem_node *c, *parent, *x;
4202 if (min_heap_address == NULL || start < min_heap_address)
4203 min_heap_address = start;
4204 if (max_heap_address == NULL || end > max_heap_address)
4205 max_heap_address = end;
4207 /* See where in the tree a node for START belongs. In this
4208 particular application, it shouldn't happen that a node is already
4209 present. For debugging purposes, let's check that. */
4210 c = mem_root;
4211 parent = NULL;
4213 while (c != MEM_NIL)
4215 parent = c;
4216 c = start < c->start ? c->left : c->right;
4219 /* Create a new node. */
4220 #ifdef GC_MALLOC_CHECK
4221 x = malloc (sizeof *x);
4222 if (x == NULL)
4223 emacs_abort ();
4224 #else
4225 x = xmalloc (sizeof *x);
4226 #endif
4227 x->start = start;
4228 x->end = end;
4229 x->type = type;
4230 x->parent = parent;
4231 x->left = x->right = MEM_NIL;
4232 x->color = MEM_RED;
4234 /* Insert it as child of PARENT or install it as root. */
4235 if (parent)
4237 if (start < parent->start)
4238 parent->left = x;
4239 else
4240 parent->right = x;
4242 else
4243 mem_root = x;
4245 /* Re-establish red-black tree properties. */
4246 mem_insert_fixup (x);
4248 return x;
4252 /* Re-establish the red-black properties of the tree, and thereby
4253 balance the tree, after node X has been inserted; X is always red. */
4255 static void
4256 mem_insert_fixup (struct mem_node *x)
4258 while (x != mem_root && x->parent->color == MEM_RED)
4260 /* X is red and its parent is red. This is a violation of
4261 red-black tree property #3. */
4263 if (x->parent == x->parent->parent->left)
4265 /* We're on the left side of our grandparent, and Y is our
4266 "uncle". */
4267 struct mem_node *y = x->parent->parent->right;
4269 if (y->color == MEM_RED)
4271 /* Uncle and parent are red but should be black because
4272 X is red. Change the colors accordingly and proceed
4273 with the grandparent. */
4274 x->parent->color = MEM_BLACK;
4275 y->color = MEM_BLACK;
4276 x->parent->parent->color = MEM_RED;
4277 x = x->parent->parent;
4279 else
4281 /* Parent and uncle have different colors; parent is
4282 red, uncle is black. */
4283 if (x == x->parent->right)
4285 x = x->parent;
4286 mem_rotate_left (x);
4289 x->parent->color = MEM_BLACK;
4290 x->parent->parent->color = MEM_RED;
4291 mem_rotate_right (x->parent->parent);
4294 else
4296 /* This is the symmetrical case of above. */
4297 struct mem_node *y = x->parent->parent->left;
4299 if (y->color == MEM_RED)
4301 x->parent->color = MEM_BLACK;
4302 y->color = MEM_BLACK;
4303 x->parent->parent->color = MEM_RED;
4304 x = x->parent->parent;
4306 else
4308 if (x == x->parent->left)
4310 x = x->parent;
4311 mem_rotate_right (x);
4314 x->parent->color = MEM_BLACK;
4315 x->parent->parent->color = MEM_RED;
4316 mem_rotate_left (x->parent->parent);
4321 /* The root may have been changed to red due to the algorithm. Set
4322 it to black so that property #5 is satisfied. */
4323 mem_root->color = MEM_BLACK;
4327 /* (x) (y)
4328 / \ / \
4329 a (y) ===> (x) c
4330 / \ / \
4331 b c a b */
4333 static void
4334 mem_rotate_left (struct mem_node *x)
4336 struct mem_node *y;
4338 /* Turn y's left sub-tree into x's right sub-tree. */
4339 y = x->right;
4340 x->right = y->left;
4341 if (y->left != MEM_NIL)
4342 y->left->parent = x;
4344 /* Y's parent was x's parent. */
4345 if (y != MEM_NIL)
4346 y->parent = x->parent;
4348 /* Get the parent to point to y instead of x. */
4349 if (x->parent)
4351 if (x == x->parent->left)
4352 x->parent->left = y;
4353 else
4354 x->parent->right = y;
4356 else
4357 mem_root = y;
4359 /* Put x on y's left. */
4360 y->left = x;
4361 if (x != MEM_NIL)
4362 x->parent = y;
4366 /* (x) (Y)
4367 / \ / \
4368 (y) c ===> a (x)
4369 / \ / \
4370 a b b c */
4372 static void
4373 mem_rotate_right (struct mem_node *x)
4375 struct mem_node *y = x->left;
4377 x->left = y->right;
4378 if (y->right != MEM_NIL)
4379 y->right->parent = x;
4381 if (y != MEM_NIL)
4382 y->parent = x->parent;
4383 if (x->parent)
4385 if (x == x->parent->right)
4386 x->parent->right = y;
4387 else
4388 x->parent->left = y;
4390 else
4391 mem_root = y;
4393 y->right = x;
4394 if (x != MEM_NIL)
4395 x->parent = y;
4399 /* Delete node Z from the tree. If Z is null or MEM_NIL, do nothing. */
4401 static void
4402 mem_delete (struct mem_node *z)
4404 struct mem_node *x, *y;
4406 if (!z || z == MEM_NIL)
4407 return;
4409 if (z->left == MEM_NIL || z->right == MEM_NIL)
4410 y = z;
4411 else
4413 y = z->right;
4414 while (y->left != MEM_NIL)
4415 y = y->left;
4418 if (y->left != MEM_NIL)
4419 x = y->left;
4420 else
4421 x = y->right;
4423 x->parent = y->parent;
4424 if (y->parent)
4426 if (y == y->parent->left)
4427 y->parent->left = x;
4428 else
4429 y->parent->right = x;
4431 else
4432 mem_root = x;
4434 if (y != z)
4436 z->start = y->start;
4437 z->end = y->end;
4438 z->type = y->type;
4441 if (y->color == MEM_BLACK)
4442 mem_delete_fixup (x);
4444 #ifdef GC_MALLOC_CHECK
4445 free (y);
4446 #else
4447 xfree (y);
4448 #endif
4452 /* Re-establish the red-black properties of the tree, after a
4453 deletion. */
4455 static void
4456 mem_delete_fixup (struct mem_node *x)
4458 while (x != mem_root && x->color == MEM_BLACK)
4460 if (x == x->parent->left)
4462 struct mem_node *w = x->parent->right;
4464 if (w->color == MEM_RED)
4466 w->color = MEM_BLACK;
4467 x->parent->color = MEM_RED;
4468 mem_rotate_left (x->parent);
4469 w = x->parent->right;
4472 if (w->left->color == MEM_BLACK && w->right->color == MEM_BLACK)
4474 w->color = MEM_RED;
4475 x = x->parent;
4477 else
4479 if (w->right->color == MEM_BLACK)
4481 w->left->color = MEM_BLACK;
4482 w->color = MEM_RED;
4483 mem_rotate_right (w);
4484 w = x->parent->right;
4486 w->color = x->parent->color;
4487 x->parent->color = MEM_BLACK;
4488 w->right->color = MEM_BLACK;
4489 mem_rotate_left (x->parent);
4490 x = mem_root;
4493 else
4495 struct mem_node *w = x->parent->left;
4497 if (w->color == MEM_RED)
4499 w->color = MEM_BLACK;
4500 x->parent->color = MEM_RED;
4501 mem_rotate_right (x->parent);
4502 w = x->parent->left;
4505 if (w->right->color == MEM_BLACK && w->left->color == MEM_BLACK)
4507 w->color = MEM_RED;
4508 x = x->parent;
4510 else
4512 if (w->left->color == MEM_BLACK)
4514 w->right->color = MEM_BLACK;
4515 w->color = MEM_RED;
4516 mem_rotate_left (w);
4517 w = x->parent->left;
4520 w->color = x->parent->color;
4521 x->parent->color = MEM_BLACK;
4522 w->left->color = MEM_BLACK;
4523 mem_rotate_right (x->parent);
4524 x = mem_root;
4529 x->color = MEM_BLACK;
4533 /* Value is non-zero if P is a pointer to a live Lisp string on
4534 the heap. M is a pointer to the mem_block for P. */
4536 static bool
4537 live_string_p (struct mem_node *m, void *p)
4539 if (m->type == MEM_TYPE_STRING)
4541 struct string_block *b = m->start;
4542 ptrdiff_t offset = (char *) p - (char *) &b->strings[0];
4544 /* P must point to the start of a Lisp_String structure, and it
4545 must not be on the free-list. */
4546 return (offset >= 0
4547 && offset % sizeof b->strings[0] == 0
4548 && offset < (STRING_BLOCK_SIZE * sizeof b->strings[0])
4549 && ((struct Lisp_String *) p)->data != NULL);
4551 else
4552 return 0;
4556 /* Value is non-zero if P is a pointer to a live Lisp cons on
4557 the heap. M is a pointer to the mem_block for P. */
4559 static bool
4560 live_cons_p (struct mem_node *m, void *p)
4562 if (m->type == MEM_TYPE_CONS)
4564 struct cons_block *b = m->start;
4565 ptrdiff_t offset = (char *) p - (char *) &b->conses[0];
4567 /* P must point to the start of a Lisp_Cons, not be
4568 one of the unused cells in the current cons block,
4569 and not be on the free-list. */
4570 return (offset >= 0
4571 && offset % sizeof b->conses[0] == 0
4572 && offset < (CONS_BLOCK_SIZE * sizeof b->conses[0])
4573 && (b != cons_block
4574 || offset / sizeof b->conses[0] < cons_block_index)
4575 && !EQ (((struct Lisp_Cons *) p)->car, Vdead));
4577 else
4578 return 0;
4582 /* Value is non-zero if P is a pointer to a live Lisp symbol on
4583 the heap. M is a pointer to the mem_block for P. */
4585 static bool
4586 live_symbol_p (struct mem_node *m, void *p)
4588 if (m->type == MEM_TYPE_SYMBOL)
4590 struct symbol_block *b = m->start;
4591 ptrdiff_t offset = (char *) p - (char *) &b->symbols[0];
4593 /* P must point to the start of a Lisp_Symbol, not be
4594 one of the unused cells in the current symbol block,
4595 and not be on the free-list. */
4596 return (offset >= 0
4597 && offset % sizeof b->symbols[0] == 0
4598 && offset < (SYMBOL_BLOCK_SIZE * sizeof b->symbols[0])
4599 && (b != symbol_block
4600 || offset / sizeof b->symbols[0] < symbol_block_index)
4601 && !EQ (((struct Lisp_Symbol *)p)->function, Vdead));
4603 else
4604 return 0;
4608 /* Value is non-zero if P is a pointer to a live Lisp float on
4609 the heap. M is a pointer to the mem_block for P. */
4611 static bool
4612 live_float_p (struct mem_node *m, void *p)
4614 if (m->type == MEM_TYPE_FLOAT)
4616 struct float_block *b = m->start;
4617 ptrdiff_t offset = (char *) p - (char *) &b->floats[0];
4619 /* P must point to the start of a Lisp_Float and not be
4620 one of the unused cells in the current float block. */
4621 return (offset >= 0
4622 && offset % sizeof b->floats[0] == 0
4623 && offset < (FLOAT_BLOCK_SIZE * sizeof b->floats[0])
4624 && (b != float_block
4625 || offset / sizeof b->floats[0] < float_block_index));
4627 else
4628 return 0;
4632 /* Value is non-zero if P is a pointer to a live Lisp Misc on
4633 the heap. M is a pointer to the mem_block for P. */
4635 static bool
4636 live_misc_p (struct mem_node *m, void *p)
4638 if (m->type == MEM_TYPE_MISC)
4640 struct marker_block *b = m->start;
4641 ptrdiff_t offset = (char *) p - (char *) &b->markers[0];
4643 /* P must point to the start of a Lisp_Misc, not be
4644 one of the unused cells in the current misc block,
4645 and not be on the free-list. */
4646 return (offset >= 0
4647 && offset % sizeof b->markers[0] == 0
4648 && offset < (MARKER_BLOCK_SIZE * sizeof b->markers[0])
4649 && (b != marker_block
4650 || offset / sizeof b->markers[0] < marker_block_index)
4651 && ((union Lisp_Misc *) p)->u_any.type != Lisp_Misc_Free);
4653 else
4654 return 0;
4658 /* Value is non-zero if P is a pointer to a live vector-like object.
4659 M is a pointer to the mem_block for P. */
4661 static bool
4662 live_vector_p (struct mem_node *m, void *p)
4664 if (m->type == MEM_TYPE_VECTOR_BLOCK)
4666 /* This memory node corresponds to a vector block. */
4667 struct vector_block *block = m->start;
4668 struct Lisp_Vector *vector = (struct Lisp_Vector *) block->data;
4670 /* P is in the block's allocation range. Scan the block
4671 up to P and see whether P points to the start of some
4672 vector which is not on a free list. FIXME: check whether
4673 some allocation patterns (probably a lot of short vectors)
4674 may cause a substantial overhead of this loop. */
4675 while (VECTOR_IN_BLOCK (vector, block)
4676 && vector <= (struct Lisp_Vector *) p)
4678 if (!PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE) && vector == p)
4679 return 1;
4680 else
4681 vector = ADVANCE (vector, vector_nbytes (vector));
4684 else if (m->type == MEM_TYPE_VECTORLIKE && p == large_vector_vec (m->start))
4685 /* This memory node corresponds to a large vector. */
4686 return 1;
4687 return 0;
4691 /* Value is non-zero if P is a pointer to a live buffer. M is a
4692 pointer to the mem_block for P. */
4694 static bool
4695 live_buffer_p (struct mem_node *m, void *p)
4697 /* P must point to the start of the block, and the buffer
4698 must not have been killed. */
4699 return (m->type == MEM_TYPE_BUFFER
4700 && p == m->start
4701 && !NILP (((struct buffer *) p)->name_));
4704 /* Mark OBJ if we can prove it's a Lisp_Object. */
4706 static void
4707 mark_maybe_object (Lisp_Object obj)
4709 #if USE_VALGRIND
4710 if (valgrind_p)
4711 VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
4712 #endif
4714 if (INTEGERP (obj))
4715 return;
4717 void *po = XPNTR (obj);
4718 struct mem_node *m = mem_find (po);
4720 if (m != MEM_NIL)
4722 bool mark_p = false;
4724 switch (XTYPE (obj))
4726 case Lisp_String:
4727 mark_p = (live_string_p (m, po)
4728 && !STRING_MARKED_P ((struct Lisp_String *) po));
4729 break;
4731 case Lisp_Cons:
4732 mark_p = (live_cons_p (m, po) && !CONS_MARKED_P (XCONS (obj)));
4733 break;
4735 case Lisp_Symbol:
4736 mark_p = (live_symbol_p (m, po) && !XSYMBOL (obj)->gcmarkbit);
4737 break;
4739 case Lisp_Float:
4740 mark_p = (live_float_p (m, po) && !FLOAT_MARKED_P (XFLOAT (obj)));
4741 break;
4743 case Lisp_Vectorlike:
4744 /* Note: can't check BUFFERP before we know it's a
4745 buffer because checking that dereferences the pointer
4746 PO which might point anywhere. */
4747 if (live_vector_p (m, po))
4748 mark_p = !SUBRP (obj) && !VECTOR_MARKED_P (XVECTOR (obj));
4749 else if (live_buffer_p (m, po))
4750 mark_p = BUFFERP (obj) && !VECTOR_MARKED_P (XBUFFER (obj));
4751 break;
4753 case Lisp_Misc:
4754 mark_p = (live_misc_p (m, po) && !XMISCANY (obj)->gcmarkbit);
4755 break;
4757 default:
4758 break;
4761 if (mark_p)
4762 mark_object (obj);
4766 /* Return true if P can point to Lisp data, and false otherwise.
4767 Symbols are implemented via offsets not pointers, but the offsets
4768 are also multiples of GCALIGNMENT. */
4770 static bool
4771 maybe_lisp_pointer (void *p)
4773 return (uintptr_t) p % GCALIGNMENT == 0;
4776 #ifndef HAVE_MODULES
4777 enum { HAVE_MODULES = false };
4778 #endif
4780 /* If P points to Lisp data, mark that as live if it isn't already
4781 marked. */
4783 static void
4784 mark_maybe_pointer (void *p)
4786 struct mem_node *m;
4788 #if USE_VALGRIND
4789 if (valgrind_p)
4790 VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
4791 #endif
4793 if (sizeof (Lisp_Object) == sizeof (void *) || !HAVE_MODULES)
4795 if (!maybe_lisp_pointer (p))
4796 return;
4798 else
4800 /* For the wide-int case, also mark emacs_value tagged pointers,
4801 which can be generated by emacs-module.c's value_to_lisp. */
4802 p = (void *) ((uintptr_t) p & ~(GCALIGNMENT - 1));
4805 m = mem_find (p);
4806 if (m != MEM_NIL)
4808 Lisp_Object obj = Qnil;
4810 switch (m->type)
4812 case MEM_TYPE_NON_LISP:
4813 case MEM_TYPE_SPARE:
4814 /* Nothing to do; not a pointer to Lisp memory. */
4815 break;
4817 case MEM_TYPE_BUFFER:
4818 if (live_buffer_p (m, p) && !VECTOR_MARKED_P ((struct buffer *)p))
4819 XSETVECTOR (obj, p);
4820 break;
4822 case MEM_TYPE_CONS:
4823 if (live_cons_p (m, p) && !CONS_MARKED_P ((struct Lisp_Cons *) p))
4824 XSETCONS (obj, p);
4825 break;
4827 case MEM_TYPE_STRING:
4828 if (live_string_p (m, p)
4829 && !STRING_MARKED_P ((struct Lisp_String *) p))
4830 XSETSTRING (obj, p);
4831 break;
4833 case MEM_TYPE_MISC:
4834 if (live_misc_p (m, p) && !((struct Lisp_Free *) p)->gcmarkbit)
4835 XSETMISC (obj, p);
4836 break;
4838 case MEM_TYPE_SYMBOL:
4839 if (live_symbol_p (m, p) && !((struct Lisp_Symbol *) p)->gcmarkbit)
4840 XSETSYMBOL (obj, p);
4841 break;
4843 case MEM_TYPE_FLOAT:
4844 if (live_float_p (m, p) && !FLOAT_MARKED_P (p))
4845 XSETFLOAT (obj, p);
4846 break;
4848 case MEM_TYPE_VECTORLIKE:
4849 case MEM_TYPE_VECTOR_BLOCK:
4850 if (live_vector_p (m, p))
4852 Lisp_Object tem;
4853 XSETVECTOR (tem, p);
4854 if (!SUBRP (tem) && !VECTOR_MARKED_P (XVECTOR (tem)))
4855 obj = tem;
4857 break;
4859 default:
4860 emacs_abort ();
4863 if (!NILP (obj))
4864 mark_object (obj);
4869 /* Alignment of pointer values. Use alignof, as it sometimes returns
4870 a smaller alignment than GCC's __alignof__ and mark_memory might
4871 miss objects if __alignof__ were used. */
4872 #define GC_POINTER_ALIGNMENT alignof (void *)
4874 /* Mark Lisp objects referenced from the address range START+OFFSET..END
4875 or END+OFFSET..START. */
4877 static void ATTRIBUTE_NO_SANITIZE_ADDRESS
4878 mark_memory (void *start, void *end)
4880 char *pp;
4882 /* Make START the pointer to the start of the memory region,
4883 if it isn't already. */
4884 if (end < start)
4886 void *tem = start;
4887 start = end;
4888 end = tem;
4891 eassert (((uintptr_t) start) % GC_POINTER_ALIGNMENT == 0);
4893 /* Mark Lisp data pointed to. This is necessary because, in some
4894 situations, the C compiler optimizes Lisp objects away, so that
4895 only a pointer to them remains. Example:
4897 DEFUN ("testme", Ftestme, Stestme, 0, 0, 0, "")
4900 Lisp_Object obj = build_string ("test");
4901 struct Lisp_String *s = XSTRING (obj);
4902 Fgarbage_collect ();
4903 fprintf (stderr, "test '%s'\n", s->data);
4904 return Qnil;
4907 Here, `obj' isn't really used, and the compiler optimizes it
4908 away. The only reference to the life string is through the
4909 pointer `s'. */
4911 for (pp = start; (void *) pp < end; pp += GC_POINTER_ALIGNMENT)
4913 mark_maybe_pointer (*(void **) pp);
4914 mark_maybe_object (*(Lisp_Object *) pp);
4918 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
4920 static bool setjmp_tested_p;
4921 static int longjmps_done;
4923 #define SETJMP_WILL_LIKELY_WORK "\
4925 Emacs garbage collector has been changed to use conservative stack\n\
4926 marking. Emacs has determined that the method it uses to do the\n\
4927 marking will likely work on your system, but this isn't sure.\n\
4929 If you are a system-programmer, or can get the help of a local wizard\n\
4930 who is, please take a look at the function mark_stack in alloc.c, and\n\
4931 verify that the methods used are appropriate for your system.\n\
4933 Please mail the result to <emacs-devel@gnu.org>.\n\
4936 #define SETJMP_WILL_NOT_WORK "\
4938 Emacs garbage collector has been changed to use conservative stack\n\
4939 marking. Emacs has determined that the default method it uses to do the\n\
4940 marking will not work on your system. We will need a system-dependent\n\
4941 solution for your system.\n\
4943 Please take a look at the function mark_stack in alloc.c, and\n\
4944 try to find a way to make it work on your system.\n\
4946 Note that you may get false negatives, depending on the compiler.\n\
4947 In particular, you need to use -O with GCC for this test.\n\
4949 Please mail the result to <emacs-devel@gnu.org>.\n\
4953 /* Perform a quick check if it looks like setjmp saves registers in a
4954 jmp_buf. Print a message to stderr saying so. When this test
4955 succeeds, this is _not_ a proof that setjmp is sufficient for
4956 conservative stack marking. Only the sources or a disassembly
4957 can prove that. */
4959 static void
4960 test_setjmp (void)
4962 char buf[10];
4963 register int x;
4964 sys_jmp_buf jbuf;
4966 /* Arrange for X to be put in a register. */
4967 sprintf (buf, "1");
4968 x = strlen (buf);
4969 x = 2 * x - 1;
4971 sys_setjmp (jbuf);
4972 if (longjmps_done == 1)
4974 /* Came here after the longjmp at the end of the function.
4976 If x == 1, the longjmp has restored the register to its
4977 value before the setjmp, and we can hope that setjmp
4978 saves all such registers in the jmp_buf, although that
4979 isn't sure.
4981 For other values of X, either something really strange is
4982 taking place, or the setjmp just didn't save the register. */
4984 if (x == 1)
4985 fprintf (stderr, SETJMP_WILL_LIKELY_WORK);
4986 else
4988 fprintf (stderr, SETJMP_WILL_NOT_WORK);
4989 exit (1);
4993 ++longjmps_done;
4994 x = 2;
4995 if (longjmps_done == 1)
4996 sys_longjmp (jbuf, 1);
4999 #endif /* not GC_SAVE_REGISTERS_ON_STACK && not GC_SETJMP_WORKS */
5002 /* Mark live Lisp objects on the C stack.
5004 There are several system-dependent problems to consider when
5005 porting this to new architectures:
5007 Processor Registers
5009 We have to mark Lisp objects in CPU registers that can hold local
5010 variables or are used to pass parameters.
5012 If GC_SAVE_REGISTERS_ON_STACK is defined, it should expand to
5013 something that either saves relevant registers on the stack, or
5014 calls mark_maybe_object passing it each register's contents.
5016 If GC_SAVE_REGISTERS_ON_STACK is not defined, the current
5017 implementation assumes that calling setjmp saves registers we need
5018 to see in a jmp_buf which itself lies on the stack. This doesn't
5019 have to be true! It must be verified for each system, possibly
5020 by taking a look at the source code of setjmp.
5022 If __builtin_unwind_init is available (defined by GCC >= 2.8) we
5023 can use it as a machine independent method to store all registers
5024 to the stack. In this case the macros described in the previous
5025 two paragraphs are not used.
5027 Stack Layout
5029 Architectures differ in the way their processor stack is organized.
5030 For example, the stack might look like this
5032 +----------------+
5033 | Lisp_Object | size = 4
5034 +----------------+
5035 | something else | size = 2
5036 +----------------+
5037 | Lisp_Object | size = 4
5038 +----------------+
5039 | ... |
5041 In such a case, not every Lisp_Object will be aligned equally. To
5042 find all Lisp_Object on the stack it won't be sufficient to walk
5043 the stack in steps of 4 bytes. Instead, two passes will be
5044 necessary, one starting at the start of the stack, and a second
5045 pass starting at the start of the stack + 2. Likewise, if the
5046 minimal alignment of Lisp_Objects on the stack is 1, four passes
5047 would be necessary, each one starting with one byte more offset
5048 from the stack start. */
5050 static void
5051 mark_stack (void *end)
5054 /* This assumes that the stack is a contiguous region in memory. If
5055 that's not the case, something has to be done here to iterate
5056 over the stack segments. */
5057 mark_memory (stack_base, end);
5059 /* Allow for marking a secondary stack, like the register stack on the
5060 ia64. */
5061 #ifdef GC_MARK_SECONDARY_STACK
5062 GC_MARK_SECONDARY_STACK ();
5063 #endif
5066 static bool
5067 c_symbol_p (struct Lisp_Symbol *sym)
5069 char *lispsym_ptr = (char *) lispsym;
5070 char *sym_ptr = (char *) sym;
5071 ptrdiff_t lispsym_offset = sym_ptr - lispsym_ptr;
5072 return 0 <= lispsym_offset && lispsym_offset < sizeof lispsym;
5075 /* Determine whether it is safe to access memory at address P. */
5076 static int
5077 valid_pointer_p (void *p)
5079 #ifdef WINDOWSNT
5080 return w32_valid_pointer_p (p, 16);
5081 #else
5083 if (ADDRESS_SANITIZER)
5084 return p ? -1 : 0;
5086 int fd[2];
5088 /* Obviously, we cannot just access it (we would SEGV trying), so we
5089 trick the o/s to tell us whether p is a valid pointer.
5090 Unfortunately, we cannot use NULL_DEVICE here, as emacs_write may
5091 not validate p in that case. */
5093 if (emacs_pipe (fd) == 0)
5095 bool valid = emacs_write (fd[1], p, 16) == 16;
5096 emacs_close (fd[1]);
5097 emacs_close (fd[0]);
5098 return valid;
5101 return -1;
5102 #endif
5105 /* Return 2 if OBJ is a killed or special buffer object, 1 if OBJ is a
5106 valid lisp object, 0 if OBJ is NOT a valid lisp object, or -1 if we
5107 cannot validate OBJ. This function can be quite slow, so its primary
5108 use is the manual debugging. The only exception is print_object, where
5109 we use it to check whether the memory referenced by the pointer of
5110 Lisp_Save_Value object contains valid objects. */
5113 valid_lisp_object_p (Lisp_Object obj)
5115 if (INTEGERP (obj))
5116 return 1;
5118 void *p = XPNTR (obj);
5119 if (PURE_P (p))
5120 return 1;
5122 if (SYMBOLP (obj) && c_symbol_p (p))
5123 return ((char *) p - (char *) lispsym) % sizeof lispsym[0] == 0;
5125 if (p == &buffer_defaults || p == &buffer_local_symbols)
5126 return 2;
5128 struct mem_node *m = mem_find (p);
5130 if (m == MEM_NIL)
5132 int valid = valid_pointer_p (p);
5133 if (valid <= 0)
5134 return valid;
5136 if (SUBRP (obj))
5137 return 1;
5139 return 0;
5142 switch (m->type)
5144 case MEM_TYPE_NON_LISP:
5145 case MEM_TYPE_SPARE:
5146 return 0;
5148 case MEM_TYPE_BUFFER:
5149 return live_buffer_p (m, p) ? 1 : 2;
5151 case MEM_TYPE_CONS:
5152 return live_cons_p (m, p);
5154 case MEM_TYPE_STRING:
5155 return live_string_p (m, p);
5157 case MEM_TYPE_MISC:
5158 return live_misc_p (m, p);
5160 case MEM_TYPE_SYMBOL:
5161 return live_symbol_p (m, p);
5163 case MEM_TYPE_FLOAT:
5164 return live_float_p (m, p);
5166 case MEM_TYPE_VECTORLIKE:
5167 case MEM_TYPE_VECTOR_BLOCK:
5168 return live_vector_p (m, p);
5170 default:
5171 break;
5174 return 0;
5177 /***********************************************************************
5178 Pure Storage Management
5179 ***********************************************************************/
5181 /* Allocate room for SIZE bytes from pure Lisp storage and return a
5182 pointer to it. TYPE is the Lisp type for which the memory is
5183 allocated. TYPE < 0 means it's not used for a Lisp object. */
5185 static void *
5186 pure_alloc (size_t size, int type)
5188 void *result;
5190 again:
5191 if (type >= 0)
5193 /* Allocate space for a Lisp object from the beginning of the free
5194 space with taking account of alignment. */
5195 result = pointer_align (purebeg + pure_bytes_used_lisp, GCALIGNMENT);
5196 pure_bytes_used_lisp = ((char *)result - (char *)purebeg) + size;
5198 else
5200 /* Allocate space for a non-Lisp object from the end of the free
5201 space. */
5202 pure_bytes_used_non_lisp += size;
5203 result = purebeg + pure_size - pure_bytes_used_non_lisp;
5205 pure_bytes_used = pure_bytes_used_lisp + pure_bytes_used_non_lisp;
5207 if (pure_bytes_used <= pure_size)
5208 return result;
5210 /* Don't allocate a large amount here,
5211 because it might get mmap'd and then its address
5212 might not be usable. */
5213 purebeg = xmalloc (10000);
5214 pure_size = 10000;
5215 pure_bytes_used_before_overflow += pure_bytes_used - size;
5216 pure_bytes_used = 0;
5217 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
5218 goto again;
5222 #ifndef CANNOT_DUMP
5224 /* Print a warning if PURESIZE is too small. */
5226 void
5227 check_pure_size (void)
5229 if (pure_bytes_used_before_overflow)
5230 message (("emacs:0:Pure Lisp storage overflow (approx. %"pI"d"
5231 " bytes needed)"),
5232 pure_bytes_used + pure_bytes_used_before_overflow);
5234 #endif
5237 /* Find the byte sequence {DATA[0], ..., DATA[NBYTES-1], '\0'} from
5238 the non-Lisp data pool of the pure storage, and return its start
5239 address. Return NULL if not found. */
5241 static char *
5242 find_string_data_in_pure (const char *data, ptrdiff_t nbytes)
5244 int i;
5245 ptrdiff_t skip, bm_skip[256], last_char_skip, infinity, start, start_max;
5246 const unsigned char *p;
5247 char *non_lisp_beg;
5249 if (pure_bytes_used_non_lisp <= nbytes)
5250 return NULL;
5252 /* Set up the Boyer-Moore table. */
5253 skip = nbytes + 1;
5254 for (i = 0; i < 256; i++)
5255 bm_skip[i] = skip;
5257 p = (const unsigned char *) data;
5258 while (--skip > 0)
5259 bm_skip[*p++] = skip;
5261 last_char_skip = bm_skip['\0'];
5263 non_lisp_beg = purebeg + pure_size - pure_bytes_used_non_lisp;
5264 start_max = pure_bytes_used_non_lisp - (nbytes + 1);
5266 /* See the comments in the function `boyer_moore' (search.c) for the
5267 use of `infinity'. */
5268 infinity = pure_bytes_used_non_lisp + 1;
5269 bm_skip['\0'] = infinity;
5271 p = (const unsigned char *) non_lisp_beg + nbytes;
5272 start = 0;
5275 /* Check the last character (== '\0'). */
5278 start += bm_skip[*(p + start)];
5280 while (start <= start_max);
5282 if (start < infinity)
5283 /* Couldn't find the last character. */
5284 return NULL;
5286 /* No less than `infinity' means we could find the last
5287 character at `p[start - infinity]'. */
5288 start -= infinity;
5290 /* Check the remaining characters. */
5291 if (memcmp (data, non_lisp_beg + start, nbytes) == 0)
5292 /* Found. */
5293 return non_lisp_beg + start;
5295 start += last_char_skip;
5297 while (start <= start_max);
5299 return NULL;
5303 /* Return a string allocated in pure space. DATA is a buffer holding
5304 NCHARS characters, and NBYTES bytes of string data. MULTIBYTE
5305 means make the result string multibyte.
5307 Must get an error if pure storage is full, since if it cannot hold
5308 a large string it may be able to hold conses that point to that
5309 string; then the string is not protected from gc. */
5311 Lisp_Object
5312 make_pure_string (const char *data,
5313 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
5315 Lisp_Object string;
5316 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5317 s->data = (unsigned char *) find_string_data_in_pure (data, nbytes);
5318 if (s->data == NULL)
5320 s->data = pure_alloc (nbytes + 1, -1);
5321 memcpy (s->data, data, nbytes);
5322 s->data[nbytes] = '\0';
5324 s->size = nchars;
5325 s->size_byte = multibyte ? nbytes : -1;
5326 s->intervals = NULL;
5327 XSETSTRING (string, s);
5328 return string;
5331 /* Return a string allocated in pure space. Do not
5332 allocate the string data, just point to DATA. */
5334 Lisp_Object
5335 make_pure_c_string (const char *data, ptrdiff_t nchars)
5337 Lisp_Object string;
5338 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5339 s->size = nchars;
5340 s->size_byte = -1;
5341 s->data = (unsigned char *) data;
5342 s->intervals = NULL;
5343 XSETSTRING (string, s);
5344 return string;
5347 static Lisp_Object purecopy (Lisp_Object obj);
5349 /* Return a cons allocated from pure space. Give it pure copies
5350 of CAR as car and CDR as cdr. */
5352 Lisp_Object
5353 pure_cons (Lisp_Object car, Lisp_Object cdr)
5355 Lisp_Object new;
5356 struct Lisp_Cons *p = pure_alloc (sizeof *p, Lisp_Cons);
5357 XSETCONS (new, p);
5358 XSETCAR (new, purecopy (car));
5359 XSETCDR (new, purecopy (cdr));
5360 return new;
5364 /* Value is a float object with value NUM allocated from pure space. */
5366 static Lisp_Object
5367 make_pure_float (double num)
5369 Lisp_Object new;
5370 struct Lisp_Float *p = pure_alloc (sizeof *p, Lisp_Float);
5371 XSETFLOAT (new, p);
5372 XFLOAT_INIT (new, num);
5373 return new;
5377 /* Return a vector with room for LEN Lisp_Objects allocated from
5378 pure space. */
5380 static Lisp_Object
5381 make_pure_vector (ptrdiff_t len)
5383 Lisp_Object new;
5384 size_t size = header_size + len * word_size;
5385 struct Lisp_Vector *p = pure_alloc (size, Lisp_Vectorlike);
5386 XSETVECTOR (new, p);
5387 XVECTOR (new)->header.size = len;
5388 return new;
5391 DEFUN ("purecopy", Fpurecopy, Spurecopy, 1, 1, 0,
5392 doc: /* Make a copy of object OBJ in pure storage.
5393 Recursively copies contents of vectors and cons cells.
5394 Does not copy symbols. Copies strings without text properties. */)
5395 (register Lisp_Object obj)
5397 if (NILP (Vpurify_flag))
5398 return obj;
5399 else if (MARKERP (obj) || OVERLAYP (obj)
5400 || HASH_TABLE_P (obj) || SYMBOLP (obj))
5401 /* Can't purify those. */
5402 return obj;
5403 else
5404 return purecopy (obj);
5407 static Lisp_Object
5408 purecopy (Lisp_Object obj)
5410 if (INTEGERP (obj)
5411 || (! SYMBOLP (obj) && PURE_P (XPNTR_OR_SYMBOL_OFFSET (obj)))
5412 || SUBRP (obj))
5413 return obj; /* Already pure. */
5415 if (STRINGP (obj) && XSTRING (obj)->intervals)
5416 message_with_string ("Dropping text-properties while making string `%s' pure",
5417 obj, true);
5419 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5421 Lisp_Object tmp = Fgethash (obj, Vpurify_flag, Qnil);
5422 if (!NILP (tmp))
5423 return tmp;
5426 if (CONSP (obj))
5427 obj = pure_cons (XCAR (obj), XCDR (obj));
5428 else if (FLOATP (obj))
5429 obj = make_pure_float (XFLOAT_DATA (obj));
5430 else if (STRINGP (obj))
5431 obj = make_pure_string (SSDATA (obj), SCHARS (obj),
5432 SBYTES (obj),
5433 STRING_MULTIBYTE (obj));
5434 else if (COMPILEDP (obj) || VECTORP (obj) || HASH_TABLE_P (obj))
5436 struct Lisp_Vector *objp = XVECTOR (obj);
5437 ptrdiff_t nbytes = vector_nbytes (objp);
5438 struct Lisp_Vector *vec = pure_alloc (nbytes, Lisp_Vectorlike);
5439 register ptrdiff_t i;
5440 ptrdiff_t size = ASIZE (obj);
5441 if (size & PSEUDOVECTOR_FLAG)
5442 size &= PSEUDOVECTOR_SIZE_MASK;
5443 memcpy (vec, objp, nbytes);
5444 for (i = 0; i < size; i++)
5445 vec->contents[i] = purecopy (vec->contents[i]);
5446 XSETVECTOR (obj, vec);
5448 else if (SYMBOLP (obj))
5450 if (!XSYMBOL (obj)->pinned && !c_symbol_p (XSYMBOL (obj)))
5451 { /* We can't purify them, but they appear in many pure objects.
5452 Mark them as `pinned' so we know to mark them at every GC cycle. */
5453 XSYMBOL (obj)->pinned = true;
5454 symbol_block_pinned = symbol_block;
5456 /* Don't hash-cons it. */
5457 return obj;
5459 else
5461 AUTO_STRING (fmt, "Don't know how to purify: %S");
5462 Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj)));
5465 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5466 Fputhash (obj, obj, Vpurify_flag);
5468 return obj;
5473 /***********************************************************************
5474 Protection from GC
5475 ***********************************************************************/
5477 /* Put an entry in staticvec, pointing at the variable with address
5478 VARADDRESS. */
5480 void
5481 staticpro (Lisp_Object *varaddress)
5483 if (staticidx >= NSTATICS)
5484 fatal ("NSTATICS too small; try increasing and recompiling Emacs.");
5485 staticvec[staticidx++] = varaddress;
5489 /***********************************************************************
5490 Protection from GC
5491 ***********************************************************************/
5493 /* Temporarily prevent garbage collection. */
5495 ptrdiff_t
5496 inhibit_garbage_collection (void)
5498 ptrdiff_t count = SPECPDL_INDEX ();
5500 specbind (Qgc_cons_threshold, make_number (MOST_POSITIVE_FIXNUM));
5501 return count;
5504 /* Used to avoid possible overflows when
5505 converting from C to Lisp integers. */
5507 static Lisp_Object
5508 bounded_number (EMACS_INT number)
5510 return make_number (min (MOST_POSITIVE_FIXNUM, number));
5513 /* Calculate total bytes of live objects. */
5515 static size_t
5516 total_bytes_of_live_objects (void)
5518 size_t tot = 0;
5519 tot += total_conses * sizeof (struct Lisp_Cons);
5520 tot += total_symbols * sizeof (struct Lisp_Symbol);
5521 tot += total_markers * sizeof (union Lisp_Misc);
5522 tot += total_string_bytes;
5523 tot += total_vector_slots * word_size;
5524 tot += total_floats * sizeof (struct Lisp_Float);
5525 tot += total_intervals * sizeof (struct interval);
5526 tot += total_strings * sizeof (struct Lisp_String);
5527 return tot;
5530 #ifdef HAVE_WINDOW_SYSTEM
5532 /* Remove unmarked font-spec and font-entity objects from ENTRY, which is
5533 (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...), and return changed entry. */
5535 static Lisp_Object
5536 compact_font_cache_entry (Lisp_Object entry)
5538 Lisp_Object tail, *prev = &entry;
5540 for (tail = entry; CONSP (tail); tail = XCDR (tail))
5542 bool drop = 0;
5543 Lisp_Object obj = XCAR (tail);
5545 /* Consider OBJ if it is (font-spec . [font-entity font-entity ...]). */
5546 if (CONSP (obj) && GC_FONT_SPEC_P (XCAR (obj))
5547 && !VECTOR_MARKED_P (GC_XFONT_SPEC (XCAR (obj)))
5548 /* Don't use VECTORP here, as that calls ASIZE, which could
5549 hit assertion violation during GC. */
5550 && (VECTORLIKEP (XCDR (obj))
5551 && ! (gc_asize (XCDR (obj)) & PSEUDOVECTOR_FLAG)))
5553 ptrdiff_t i, size = gc_asize (XCDR (obj));
5554 Lisp_Object obj_cdr = XCDR (obj);
5556 /* If font-spec is not marked, most likely all font-entities
5557 are not marked too. But we must be sure that nothing is
5558 marked within OBJ before we really drop it. */
5559 for (i = 0; i < size; i++)
5561 Lisp_Object objlist;
5563 if (VECTOR_MARKED_P (GC_XFONT_ENTITY (AREF (obj_cdr, i))))
5564 break;
5566 objlist = AREF (AREF (obj_cdr, i), FONT_OBJLIST_INDEX);
5567 for (; CONSP (objlist); objlist = XCDR (objlist))
5569 Lisp_Object val = XCAR (objlist);
5570 struct font *font = GC_XFONT_OBJECT (val);
5572 if (!NILP (AREF (val, FONT_TYPE_INDEX))
5573 && VECTOR_MARKED_P(font))
5574 break;
5576 if (CONSP (objlist))
5578 /* Found a marked font, bail out. */
5579 break;
5583 if (i == size)
5585 /* No marked fonts were found, so this entire font
5586 entity can be dropped. */
5587 drop = 1;
5590 if (drop)
5591 *prev = XCDR (tail);
5592 else
5593 prev = xcdr_addr (tail);
5595 return entry;
5598 /* Compact font caches on all terminals and mark
5599 everything which is still here after compaction. */
5601 static void
5602 compact_font_caches (void)
5604 struct terminal *t;
5606 for (t = terminal_list; t; t = t->next_terminal)
5608 Lisp_Object cache = TERMINAL_FONT_CACHE (t);
5609 /* Inhibit compacting the caches if the user so wishes. Some of
5610 the users don't mind a larger memory footprint, but do mind
5611 slower redisplay. */
5612 if (!inhibit_compacting_font_caches
5613 && CONSP (cache))
5615 Lisp_Object entry;
5617 for (entry = XCDR (cache); CONSP (entry); entry = XCDR (entry))
5618 XSETCAR (entry, compact_font_cache_entry (XCAR (entry)));
5620 mark_object (cache);
5624 #else /* not HAVE_WINDOW_SYSTEM */
5626 #define compact_font_caches() (void)(0)
5628 #endif /* HAVE_WINDOW_SYSTEM */
5630 /* Remove (MARKER . DATA) entries with unmarked MARKER
5631 from buffer undo LIST and return changed list. */
5633 static Lisp_Object
5634 compact_undo_list (Lisp_Object list)
5636 Lisp_Object tail, *prev = &list;
5638 for (tail = list; CONSP (tail); tail = XCDR (tail))
5640 if (CONSP (XCAR (tail))
5641 && MARKERP (XCAR (XCAR (tail)))
5642 && !XMARKER (XCAR (XCAR (tail)))->gcmarkbit)
5643 *prev = XCDR (tail);
5644 else
5645 prev = xcdr_addr (tail);
5647 return list;
5650 static void
5651 mark_pinned_symbols (void)
5653 struct symbol_block *sblk;
5654 int lim = (symbol_block_pinned == symbol_block
5655 ? symbol_block_index : SYMBOL_BLOCK_SIZE);
5657 for (sblk = symbol_block_pinned; sblk; sblk = sblk->next)
5659 union aligned_Lisp_Symbol *sym = sblk->symbols, *end = sym + lim;
5660 for (; sym < end; ++sym)
5661 if (sym->s.pinned)
5662 mark_object (make_lisp_symbol (&sym->s));
5664 lim = SYMBOL_BLOCK_SIZE;
5668 /* Subroutine of Fgarbage_collect that does most of the work. It is a
5669 separate function so that we could limit mark_stack in searching
5670 the stack frames below this function, thus avoiding the rare cases
5671 where mark_stack finds values that look like live Lisp objects on
5672 portions of stack that couldn't possibly contain such live objects.
5673 For more details of this, see the discussion at
5674 http://lists.gnu.org/archive/html/emacs-devel/2014-05/msg00270.html. */
5675 static Lisp_Object
5676 garbage_collect_1 (void *end)
5678 struct buffer *nextb;
5679 char stack_top_variable;
5680 ptrdiff_t i;
5681 bool message_p;
5682 ptrdiff_t count = SPECPDL_INDEX ();
5683 struct timespec start;
5684 Lisp_Object retval = Qnil;
5685 size_t tot_before = 0;
5687 /* Can't GC if pure storage overflowed because we can't determine
5688 if something is a pure object or not. */
5689 if (pure_bytes_used_before_overflow)
5690 return Qnil;
5692 /* Record this function, so it appears on the profiler's backtraces. */
5693 record_in_backtrace (QAutomatic_GC, 0, 0);
5695 check_cons_list ();
5697 /* Don't keep undo information around forever.
5698 Do this early on, so it is no problem if the user quits. */
5699 FOR_EACH_BUFFER (nextb)
5700 compact_buffer (nextb);
5702 if (profiler_memory_running)
5703 tot_before = total_bytes_of_live_objects ();
5705 start = current_timespec ();
5707 /* In case user calls debug_print during GC,
5708 don't let that cause a recursive GC. */
5709 consing_since_gc = 0;
5711 /* Save what's currently displayed in the echo area. Don't do that
5712 if we are GC'ing because we've run out of memory, since
5713 push_message will cons, and we might have no memory for that. */
5714 if (NILP (Vmemory_full))
5716 message_p = push_message ();
5717 record_unwind_protect_void (pop_message_unwind);
5719 else
5720 message_p = false;
5722 /* Save a copy of the contents of the stack, for debugging. */
5723 #if MAX_SAVE_STACK > 0
5724 if (NILP (Vpurify_flag))
5726 char *stack;
5727 ptrdiff_t stack_size;
5728 if (&stack_top_variable < stack_bottom)
5730 stack = &stack_top_variable;
5731 stack_size = stack_bottom - &stack_top_variable;
5733 else
5735 stack = stack_bottom;
5736 stack_size = &stack_top_variable - stack_bottom;
5738 if (stack_size <= MAX_SAVE_STACK)
5740 if (stack_copy_size < stack_size)
5742 stack_copy = xrealloc (stack_copy, stack_size);
5743 stack_copy_size = stack_size;
5745 no_sanitize_memcpy (stack_copy, stack, stack_size);
5748 #endif /* MAX_SAVE_STACK > 0 */
5750 if (garbage_collection_messages)
5751 message1_nolog ("Garbage collecting...");
5753 block_input ();
5755 shrink_regexp_cache ();
5757 gc_in_progress = 1;
5759 /* Mark all the special slots that serve as the roots of accessibility. */
5761 mark_buffer (&buffer_defaults);
5762 mark_buffer (&buffer_local_symbols);
5764 for (i = 0; i < ARRAYELTS (lispsym); i++)
5765 mark_object (builtin_lisp_symbol (i));
5767 for (i = 0; i < staticidx; i++)
5768 mark_object (*staticvec[i]);
5770 mark_pinned_symbols ();
5771 mark_specpdl ();
5772 mark_terminals ();
5773 mark_kboards ();
5775 #ifdef USE_GTK
5776 xg_mark_data ();
5777 #endif
5779 mark_stack (end);
5782 struct handler *handler;
5783 for (handler = handlerlist; handler; handler = handler->next)
5785 mark_object (handler->tag_or_ch);
5786 mark_object (handler->val);
5789 #ifdef HAVE_WINDOW_SYSTEM
5790 mark_fringe_data ();
5791 #endif
5793 /* Everything is now marked, except for the data in font caches,
5794 undo lists, and finalizers. The first two are compacted by
5795 removing an items which aren't reachable otherwise. */
5797 compact_font_caches ();
5799 FOR_EACH_BUFFER (nextb)
5801 if (!EQ (BVAR (nextb, undo_list), Qt))
5802 bset_undo_list (nextb, compact_undo_list (BVAR (nextb, undo_list)));
5803 /* Now that we have stripped the elements that need not be
5804 in the undo_list any more, we can finally mark the list. */
5805 mark_object (BVAR (nextb, undo_list));
5808 /* Now pre-sweep finalizers. Here, we add any unmarked finalizers
5809 to doomed_finalizers so we can run their associated functions
5810 after GC. It's important to scan finalizers at this stage so
5811 that we can be sure that unmarked finalizers are really
5812 unreachable except for references from their associated functions
5813 and from other finalizers. */
5815 queue_doomed_finalizers (&doomed_finalizers, &finalizers);
5816 mark_finalizer_list (&doomed_finalizers);
5818 gc_sweep ();
5820 /* Clear the mark bits that we set in certain root slots. */
5821 VECTOR_UNMARK (&buffer_defaults);
5822 VECTOR_UNMARK (&buffer_local_symbols);
5824 check_cons_list ();
5826 gc_in_progress = 0;
5828 unblock_input ();
5830 consing_since_gc = 0;
5831 if (gc_cons_threshold < GC_DEFAULT_THRESHOLD / 10)
5832 gc_cons_threshold = GC_DEFAULT_THRESHOLD / 10;
5834 gc_relative_threshold = 0;
5835 if (FLOATP (Vgc_cons_percentage))
5836 { /* Set gc_cons_combined_threshold. */
5837 double tot = total_bytes_of_live_objects ();
5839 tot *= XFLOAT_DATA (Vgc_cons_percentage);
5840 if (0 < tot)
5842 if (tot < TYPE_MAXIMUM (EMACS_INT))
5843 gc_relative_threshold = tot;
5844 else
5845 gc_relative_threshold = TYPE_MAXIMUM (EMACS_INT);
5849 if (garbage_collection_messages && NILP (Vmemory_full))
5851 if (message_p || minibuf_level > 0)
5852 restore_message ();
5853 else
5854 message1_nolog ("Garbage collecting...done");
5857 unbind_to (count, Qnil);
5859 Lisp_Object total[] = {
5860 list4 (Qconses, make_number (sizeof (struct Lisp_Cons)),
5861 bounded_number (total_conses),
5862 bounded_number (total_free_conses)),
5863 list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)),
5864 bounded_number (total_symbols),
5865 bounded_number (total_free_symbols)),
5866 list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)),
5867 bounded_number (total_markers),
5868 bounded_number (total_free_markers)),
5869 list4 (Qstrings, make_number (sizeof (struct Lisp_String)),
5870 bounded_number (total_strings),
5871 bounded_number (total_free_strings)),
5872 list3 (Qstring_bytes, make_number (1),
5873 bounded_number (total_string_bytes)),
5874 list3 (Qvectors,
5875 make_number (header_size + sizeof (Lisp_Object)),
5876 bounded_number (total_vectors)),
5877 list4 (Qvector_slots, make_number (word_size),
5878 bounded_number (total_vector_slots),
5879 bounded_number (total_free_vector_slots)),
5880 list4 (Qfloats, make_number (sizeof (struct Lisp_Float)),
5881 bounded_number (total_floats),
5882 bounded_number (total_free_floats)),
5883 list4 (Qintervals, make_number (sizeof (struct interval)),
5884 bounded_number (total_intervals),
5885 bounded_number (total_free_intervals)),
5886 list3 (Qbuffers, make_number (sizeof (struct buffer)),
5887 bounded_number (total_buffers)),
5889 #ifdef DOUG_LEA_MALLOC
5890 list4 (Qheap, make_number (1024),
5891 bounded_number ((mallinfo ().uordblks + 1023) >> 10),
5892 bounded_number ((mallinfo ().fordblks + 1023) >> 10)),
5893 #endif
5895 retval = CALLMANY (Flist, total);
5897 /* GC is complete: now we can run our finalizer callbacks. */
5898 run_finalizers (&doomed_finalizers);
5900 if (!NILP (Vpost_gc_hook))
5902 ptrdiff_t gc_count = inhibit_garbage_collection ();
5903 safe_run_hooks (Qpost_gc_hook);
5904 unbind_to (gc_count, Qnil);
5907 /* Accumulate statistics. */
5908 if (FLOATP (Vgc_elapsed))
5910 struct timespec since_start = timespec_sub (current_timespec (), start);
5911 Vgc_elapsed = make_float (XFLOAT_DATA (Vgc_elapsed)
5912 + timespectod (since_start));
5915 gcs_done++;
5917 /* Collect profiling data. */
5918 if (profiler_memory_running)
5920 size_t swept = 0;
5921 size_t tot_after = total_bytes_of_live_objects ();
5922 if (tot_before > tot_after)
5923 swept = tot_before - tot_after;
5924 malloc_probe (swept);
5927 return retval;
5930 DEFUN ("garbage-collect", Fgarbage_collect, Sgarbage_collect, 0, 0, "",
5931 doc: /* Reclaim storage for Lisp objects no longer needed.
5932 Garbage collection happens automatically if you cons more than
5933 `gc-cons-threshold' bytes of Lisp data since previous garbage collection.
5934 `garbage-collect' normally returns a list with info on amount of space in use,
5935 where each entry has the form (NAME SIZE USED FREE), where:
5936 - NAME is a symbol describing the kind of objects this entry represents,
5937 - SIZE is the number of bytes used by each one,
5938 - USED is the number of those objects that were found live in the heap,
5939 - FREE is the number of those objects that are not live but that Emacs
5940 keeps around for future allocations (maybe because it does not know how
5941 to return them to the OS).
5942 However, if there was overflow in pure space, `garbage-collect'
5943 returns nil, because real GC can't be done.
5944 See Info node `(elisp)Garbage Collection'. */)
5945 (void)
5947 void *end;
5949 #ifdef HAVE___BUILTIN_UNWIND_INIT
5950 /* Force callee-saved registers and register windows onto the stack.
5951 This is the preferred method if available, obviating the need for
5952 machine dependent methods. */
5953 __builtin_unwind_init ();
5954 end = &end;
5955 #else /* not HAVE___BUILTIN_UNWIND_INIT */
5956 #ifndef GC_SAVE_REGISTERS_ON_STACK
5957 /* jmp_buf may not be aligned enough on darwin-ppc64 */
5958 union aligned_jmpbuf {
5959 Lisp_Object o;
5960 sys_jmp_buf j;
5961 } j;
5962 volatile bool stack_grows_down_p = (char *) &j > (char *) stack_base;
5963 #endif
5964 /* This trick flushes the register windows so that all the state of
5965 the process is contained in the stack. */
5966 /* Fixme: Code in the Boehm GC suggests flushing (with `flushrs') is
5967 needed on ia64 too. See mach_dep.c, where it also says inline
5968 assembler doesn't work with relevant proprietary compilers. */
5969 #ifdef __sparc__
5970 #if defined (__sparc64__) && defined (__FreeBSD__)
5971 /* FreeBSD does not have a ta 3 handler. */
5972 asm ("flushw");
5973 #else
5974 asm ("ta 3");
5975 #endif
5976 #endif
5978 /* Save registers that we need to see on the stack. We need to see
5979 registers used to hold register variables and registers used to
5980 pass parameters. */
5981 #ifdef GC_SAVE_REGISTERS_ON_STACK
5982 GC_SAVE_REGISTERS_ON_STACK (end);
5983 #else /* not GC_SAVE_REGISTERS_ON_STACK */
5985 #ifndef GC_SETJMP_WORKS /* If it hasn't been checked yet that
5986 setjmp will definitely work, test it
5987 and print a message with the result
5988 of the test. */
5989 if (!setjmp_tested_p)
5991 setjmp_tested_p = 1;
5992 test_setjmp ();
5994 #endif /* GC_SETJMP_WORKS */
5996 sys_setjmp (j.j);
5997 end = stack_grows_down_p ? (char *) &j + sizeof j : (char *) &j;
5998 #endif /* not GC_SAVE_REGISTERS_ON_STACK */
5999 #endif /* not HAVE___BUILTIN_UNWIND_INIT */
6000 return garbage_collect_1 (end);
6003 /* Mark Lisp objects in glyph matrix MATRIX. Currently the
6004 only interesting objects referenced from glyphs are strings. */
6006 static void
6007 mark_glyph_matrix (struct glyph_matrix *matrix)
6009 struct glyph_row *row = matrix->rows;
6010 struct glyph_row *end = row + matrix->nrows;
6012 for (; row < end; ++row)
6013 if (row->enabled_p)
6015 int area;
6016 for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
6018 struct glyph *glyph = row->glyphs[area];
6019 struct glyph *end_glyph = glyph + row->used[area];
6021 for (; glyph < end_glyph; ++glyph)
6022 if (STRINGP (glyph->object)
6023 && !STRING_MARKED_P (XSTRING (glyph->object)))
6024 mark_object (glyph->object);
6029 /* Mark reference to a Lisp_Object.
6030 If the object referred to has not been seen yet, recursively mark
6031 all the references contained in it. */
6033 #define LAST_MARKED_SIZE 500
6034 Lisp_Object last_marked[LAST_MARKED_SIZE] EXTERNALLY_VISIBLE;
6035 static int last_marked_index;
6037 /* For debugging--call abort when we cdr down this many
6038 links of a list, in mark_object. In debugging,
6039 the call to abort will hit a breakpoint.
6040 Normally this is zero and the check never goes off. */
6041 ptrdiff_t mark_object_loop_halt EXTERNALLY_VISIBLE;
6043 static void
6044 mark_vectorlike (struct Lisp_Vector *ptr)
6046 ptrdiff_t size = ptr->header.size;
6047 ptrdiff_t i;
6049 eassert (!VECTOR_MARKED_P (ptr));
6050 VECTOR_MARK (ptr); /* Else mark it. */
6051 if (size & PSEUDOVECTOR_FLAG)
6052 size &= PSEUDOVECTOR_SIZE_MASK;
6054 /* Note that this size is not the memory-footprint size, but only
6055 the number of Lisp_Object fields that we should trace.
6056 The distinction is used e.g. by Lisp_Process which places extra
6057 non-Lisp_Object fields at the end of the structure... */
6058 for (i = 0; i < size; i++) /* ...and then mark its elements. */
6059 mark_object (ptr->contents[i]);
6062 /* Like mark_vectorlike but optimized for char-tables (and
6063 sub-char-tables) assuming that the contents are mostly integers or
6064 symbols. */
6066 static void
6067 mark_char_table (struct Lisp_Vector *ptr, enum pvec_type pvectype)
6069 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6070 /* Consult the Lisp_Sub_Char_Table layout before changing this. */
6071 int i, idx = (pvectype == PVEC_SUB_CHAR_TABLE ? SUB_CHAR_TABLE_OFFSET : 0);
6073 eassert (!VECTOR_MARKED_P (ptr));
6074 VECTOR_MARK (ptr);
6075 for (i = idx; i < size; i++)
6077 Lisp_Object val = ptr->contents[i];
6079 if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->gcmarkbit))
6080 continue;
6081 if (SUB_CHAR_TABLE_P (val))
6083 if (! VECTOR_MARKED_P (XVECTOR (val)))
6084 mark_char_table (XVECTOR (val), PVEC_SUB_CHAR_TABLE);
6086 else
6087 mark_object (val);
6091 NO_INLINE /* To reduce stack depth in mark_object. */
6092 static Lisp_Object
6093 mark_compiled (struct Lisp_Vector *ptr)
6095 int i, size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6097 VECTOR_MARK (ptr);
6098 for (i = 0; i < size; i++)
6099 if (i != COMPILED_CONSTANTS)
6100 mark_object (ptr->contents[i]);
6101 return size > COMPILED_CONSTANTS ? ptr->contents[COMPILED_CONSTANTS] : Qnil;
6104 /* Mark the chain of overlays starting at PTR. */
6106 static void
6107 mark_overlay (struct Lisp_Overlay *ptr)
6109 for (; ptr && !ptr->gcmarkbit; ptr = ptr->next)
6111 ptr->gcmarkbit = 1;
6112 /* These two are always markers and can be marked fast. */
6113 XMARKER (ptr->start)->gcmarkbit = 1;
6114 XMARKER (ptr->end)->gcmarkbit = 1;
6115 mark_object (ptr->plist);
6119 /* Mark Lisp_Objects and special pointers in BUFFER. */
6121 static void
6122 mark_buffer (struct buffer *buffer)
6124 /* This is handled much like other pseudovectors... */
6125 mark_vectorlike ((struct Lisp_Vector *) buffer);
6127 /* ...but there are some buffer-specific things. */
6129 MARK_INTERVAL_TREE (buffer_intervals (buffer));
6131 /* For now, we just don't mark the undo_list. It's done later in
6132 a special way just before the sweep phase, and after stripping
6133 some of its elements that are not needed any more. */
6135 mark_overlay (buffer->overlays_before);
6136 mark_overlay (buffer->overlays_after);
6138 /* If this is an indirect buffer, mark its base buffer. */
6139 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
6140 mark_buffer (buffer->base_buffer);
6143 /* Mark Lisp faces in the face cache C. */
6145 NO_INLINE /* To reduce stack depth in mark_object. */
6146 static void
6147 mark_face_cache (struct face_cache *c)
6149 if (c)
6151 int i, j;
6152 for (i = 0; i < c->used; ++i)
6154 struct face *face = FACE_FROM_ID_OR_NULL (c->f, i);
6156 if (face)
6158 if (face->font && !VECTOR_MARKED_P (face->font))
6159 mark_vectorlike ((struct Lisp_Vector *) face->font);
6161 for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
6162 mark_object (face->lface[j]);
6168 NO_INLINE /* To reduce stack depth in mark_object. */
6169 static void
6170 mark_localized_symbol (struct Lisp_Symbol *ptr)
6172 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
6173 Lisp_Object where = blv->where;
6174 /* If the value is set up for a killed buffer or deleted
6175 frame, restore its global binding. If the value is
6176 forwarded to a C variable, either it's not a Lisp_Object
6177 var, or it's staticpro'd already. */
6178 if ((BUFFERP (where) && !BUFFER_LIVE_P (XBUFFER (where)))
6179 || (FRAMEP (where) && !FRAME_LIVE_P (XFRAME (where))))
6180 swap_in_global_binding (ptr);
6181 mark_object (blv->where);
6182 mark_object (blv->valcell);
6183 mark_object (blv->defcell);
6186 NO_INLINE /* To reduce stack depth in mark_object. */
6187 static void
6188 mark_save_value (struct Lisp_Save_Value *ptr)
6190 /* If `save_type' is zero, `data[0].pointer' is the address
6191 of a memory area containing `data[1].integer' potential
6192 Lisp_Objects. */
6193 if (ptr->save_type == SAVE_TYPE_MEMORY)
6195 Lisp_Object *p = ptr->data[0].pointer;
6196 ptrdiff_t nelt;
6197 for (nelt = ptr->data[1].integer; nelt > 0; nelt--, p++)
6198 mark_maybe_object (*p);
6200 else
6202 /* Find Lisp_Objects in `data[N]' slots and mark them. */
6203 int i;
6204 for (i = 0; i < SAVE_VALUE_SLOTS; i++)
6205 if (save_type (ptr, i) == SAVE_OBJECT)
6206 mark_object (ptr->data[i].object);
6210 /* Remove killed buffers or items whose car is a killed buffer from
6211 LIST, and mark other items. Return changed LIST, which is marked. */
6213 static Lisp_Object
6214 mark_discard_killed_buffers (Lisp_Object list)
6216 Lisp_Object tail, *prev = &list;
6218 for (tail = list; CONSP (tail) && !CONS_MARKED_P (XCONS (tail));
6219 tail = XCDR (tail))
6221 Lisp_Object tem = XCAR (tail);
6222 if (CONSP (tem))
6223 tem = XCAR (tem);
6224 if (BUFFERP (tem) && !BUFFER_LIVE_P (XBUFFER (tem)))
6225 *prev = XCDR (tail);
6226 else
6228 CONS_MARK (XCONS (tail));
6229 mark_object (XCAR (tail));
6230 prev = xcdr_addr (tail);
6233 mark_object (tail);
6234 return list;
6237 /* Determine type of generic Lisp_Object and mark it accordingly.
6239 This function implements a straightforward depth-first marking
6240 algorithm and so the recursion depth may be very high (a few
6241 tens of thousands is not uncommon). To minimize stack usage,
6242 a few cold paths are moved out to NO_INLINE functions above.
6243 In general, inlining them doesn't help you to gain more speed. */
6245 void
6246 mark_object (Lisp_Object arg)
6248 register Lisp_Object obj;
6249 void *po;
6250 #ifdef GC_CHECK_MARKED_OBJECTS
6251 struct mem_node *m;
6252 #endif
6253 ptrdiff_t cdr_count = 0;
6255 obj = arg;
6256 loop:
6258 po = XPNTR (obj);
6259 if (PURE_P (po))
6260 return;
6262 last_marked[last_marked_index++] = obj;
6263 if (last_marked_index == LAST_MARKED_SIZE)
6264 last_marked_index = 0;
6266 /* Perform some sanity checks on the objects marked here. Abort if
6267 we encounter an object we know is bogus. This increases GC time
6268 by ~80%. */
6269 #ifdef GC_CHECK_MARKED_OBJECTS
6271 /* Check that the object pointed to by PO is known to be a Lisp
6272 structure allocated from the heap. */
6273 #define CHECK_ALLOCATED() \
6274 do { \
6275 m = mem_find (po); \
6276 if (m == MEM_NIL) \
6277 emacs_abort (); \
6278 } while (0)
6280 /* Check that the object pointed to by PO is live, using predicate
6281 function LIVEP. */
6282 #define CHECK_LIVE(LIVEP) \
6283 do { \
6284 if (!LIVEP (m, po)) \
6285 emacs_abort (); \
6286 } while (0)
6288 /* Check both of the above conditions, for non-symbols. */
6289 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) \
6290 do { \
6291 CHECK_ALLOCATED (); \
6292 CHECK_LIVE (LIVEP); \
6293 } while (0) \
6295 /* Check both of the above conditions, for symbols. */
6296 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() \
6297 do { \
6298 if (!c_symbol_p (ptr)) \
6300 CHECK_ALLOCATED (); \
6301 CHECK_LIVE (live_symbol_p); \
6303 } while (0) \
6305 #else /* not GC_CHECK_MARKED_OBJECTS */
6307 #define CHECK_LIVE(LIVEP) ((void) 0)
6308 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) ((void) 0)
6309 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() ((void) 0)
6311 #endif /* not GC_CHECK_MARKED_OBJECTS */
6313 switch (XTYPE (obj))
6315 case Lisp_String:
6317 register struct Lisp_String *ptr = XSTRING (obj);
6318 if (STRING_MARKED_P (ptr))
6319 break;
6320 CHECK_ALLOCATED_AND_LIVE (live_string_p);
6321 MARK_STRING (ptr);
6322 MARK_INTERVAL_TREE (ptr->intervals);
6323 #ifdef GC_CHECK_STRING_BYTES
6324 /* Check that the string size recorded in the string is the
6325 same as the one recorded in the sdata structure. */
6326 string_bytes (ptr);
6327 #endif /* GC_CHECK_STRING_BYTES */
6329 break;
6331 case Lisp_Vectorlike:
6333 register struct Lisp_Vector *ptr = XVECTOR (obj);
6334 register ptrdiff_t pvectype;
6336 if (VECTOR_MARKED_P (ptr))
6337 break;
6339 #ifdef GC_CHECK_MARKED_OBJECTS
6340 m = mem_find (po);
6341 if (m == MEM_NIL && !SUBRP (obj))
6342 emacs_abort ();
6343 #endif /* GC_CHECK_MARKED_OBJECTS */
6345 if (ptr->header.size & PSEUDOVECTOR_FLAG)
6346 pvectype = ((ptr->header.size & PVEC_TYPE_MASK)
6347 >> PSEUDOVECTOR_AREA_BITS);
6348 else
6349 pvectype = PVEC_NORMAL_VECTOR;
6351 if (pvectype != PVEC_SUBR && pvectype != PVEC_BUFFER)
6352 CHECK_LIVE (live_vector_p);
6354 switch (pvectype)
6356 case PVEC_BUFFER:
6357 #ifdef GC_CHECK_MARKED_OBJECTS
6359 struct buffer *b;
6360 FOR_EACH_BUFFER (b)
6361 if (b == po)
6362 break;
6363 if (b == NULL)
6364 emacs_abort ();
6366 #endif /* GC_CHECK_MARKED_OBJECTS */
6367 mark_buffer ((struct buffer *) ptr);
6368 break;
6370 case PVEC_COMPILED:
6371 /* Although we could treat this just like a vector, mark_compiled
6372 returns the COMPILED_CONSTANTS element, which is marked at the
6373 next iteration of goto-loop here. This is done to avoid a few
6374 recursive calls to mark_object. */
6375 obj = mark_compiled (ptr);
6376 if (!NILP (obj))
6377 goto loop;
6378 break;
6380 case PVEC_FRAME:
6382 struct frame *f = (struct frame *) ptr;
6384 mark_vectorlike (ptr);
6385 mark_face_cache (f->face_cache);
6386 #ifdef HAVE_WINDOW_SYSTEM
6387 if (FRAME_WINDOW_P (f) && FRAME_X_OUTPUT (f))
6389 struct font *font = FRAME_FONT (f);
6391 if (font && !VECTOR_MARKED_P (font))
6392 mark_vectorlike ((struct Lisp_Vector *) font);
6394 #endif
6396 break;
6398 case PVEC_WINDOW:
6400 struct window *w = (struct window *) ptr;
6402 mark_vectorlike (ptr);
6404 /* Mark glyph matrices, if any. Marking window
6405 matrices is sufficient because frame matrices
6406 use the same glyph memory. */
6407 if (w->current_matrix)
6409 mark_glyph_matrix (w->current_matrix);
6410 mark_glyph_matrix (w->desired_matrix);
6413 /* Filter out killed buffers from both buffer lists
6414 in attempt to help GC to reclaim killed buffers faster.
6415 We can do it elsewhere for live windows, but this is the
6416 best place to do it for dead windows. */
6417 wset_prev_buffers
6418 (w, mark_discard_killed_buffers (w->prev_buffers));
6419 wset_next_buffers
6420 (w, mark_discard_killed_buffers (w->next_buffers));
6422 break;
6424 case PVEC_HASH_TABLE:
6426 struct Lisp_Hash_Table *h = (struct Lisp_Hash_Table *) ptr;
6428 mark_vectorlike (ptr);
6429 mark_object (h->test.name);
6430 mark_object (h->test.user_hash_function);
6431 mark_object (h->test.user_cmp_function);
6432 /* If hash table is not weak, mark all keys and values.
6433 For weak tables, mark only the vector. */
6434 if (NILP (h->weak))
6435 mark_object (h->key_and_value);
6436 else
6437 VECTOR_MARK (XVECTOR (h->key_and_value));
6439 break;
6441 case PVEC_CHAR_TABLE:
6442 case PVEC_SUB_CHAR_TABLE:
6443 mark_char_table (ptr, (enum pvec_type) pvectype);
6444 break;
6446 case PVEC_BOOL_VECTOR:
6447 /* No Lisp_Objects to mark in a bool vector. */
6448 VECTOR_MARK (ptr);
6449 break;
6451 case PVEC_SUBR:
6452 break;
6454 case PVEC_FREE:
6455 emacs_abort ();
6457 default:
6458 mark_vectorlike (ptr);
6461 break;
6463 case Lisp_Symbol:
6465 register struct Lisp_Symbol *ptr = XSYMBOL (obj);
6466 nextsym:
6467 if (ptr->gcmarkbit)
6468 break;
6469 CHECK_ALLOCATED_AND_LIVE_SYMBOL ();
6470 ptr->gcmarkbit = 1;
6471 /* Attempt to catch bogus objects. */
6472 eassert (valid_lisp_object_p (ptr->function));
6473 mark_object (ptr->function);
6474 mark_object (ptr->plist);
6475 switch (ptr->redirect)
6477 case SYMBOL_PLAINVAL: mark_object (SYMBOL_VAL (ptr)); break;
6478 case SYMBOL_VARALIAS:
6480 Lisp_Object tem;
6481 XSETSYMBOL (tem, SYMBOL_ALIAS (ptr));
6482 mark_object (tem);
6483 break;
6485 case SYMBOL_LOCALIZED:
6486 mark_localized_symbol (ptr);
6487 break;
6488 case SYMBOL_FORWARDED:
6489 /* If the value is forwarded to a buffer or keyboard field,
6490 these are marked when we see the corresponding object.
6491 And if it's forwarded to a C variable, either it's not
6492 a Lisp_Object var, or it's staticpro'd already. */
6493 break;
6494 default: emacs_abort ();
6496 if (!PURE_P (XSTRING (ptr->name)))
6497 MARK_STRING (XSTRING (ptr->name));
6498 MARK_INTERVAL_TREE (string_intervals (ptr->name));
6499 /* Inner loop to mark next symbol in this bucket, if any. */
6500 po = ptr = ptr->next;
6501 if (ptr)
6502 goto nextsym;
6504 break;
6506 case Lisp_Misc:
6507 CHECK_ALLOCATED_AND_LIVE (live_misc_p);
6509 if (XMISCANY (obj)->gcmarkbit)
6510 break;
6512 switch (XMISCTYPE (obj))
6514 case Lisp_Misc_Marker:
6515 /* DO NOT mark thru the marker's chain.
6516 The buffer's markers chain does not preserve markers from gc;
6517 instead, markers are removed from the chain when freed by gc. */
6518 XMISCANY (obj)->gcmarkbit = 1;
6519 break;
6521 case Lisp_Misc_Save_Value:
6522 XMISCANY (obj)->gcmarkbit = 1;
6523 mark_save_value (XSAVE_VALUE (obj));
6524 break;
6526 case Lisp_Misc_Overlay:
6527 mark_overlay (XOVERLAY (obj));
6528 break;
6530 case Lisp_Misc_Finalizer:
6531 XMISCANY (obj)->gcmarkbit = true;
6532 mark_object (XFINALIZER (obj)->function);
6533 break;
6535 #ifdef HAVE_MODULES
6536 case Lisp_Misc_User_Ptr:
6537 XMISCANY (obj)->gcmarkbit = true;
6538 break;
6539 #endif
6541 default:
6542 emacs_abort ();
6544 break;
6546 case Lisp_Cons:
6548 register struct Lisp_Cons *ptr = XCONS (obj);
6549 if (CONS_MARKED_P (ptr))
6550 break;
6551 CHECK_ALLOCATED_AND_LIVE (live_cons_p);
6552 CONS_MARK (ptr);
6553 /* If the cdr is nil, avoid recursion for the car. */
6554 if (EQ (ptr->u.cdr, Qnil))
6556 obj = ptr->car;
6557 cdr_count = 0;
6558 goto loop;
6560 mark_object (ptr->car);
6561 obj = ptr->u.cdr;
6562 cdr_count++;
6563 if (cdr_count == mark_object_loop_halt)
6564 emacs_abort ();
6565 goto loop;
6568 case Lisp_Float:
6569 CHECK_ALLOCATED_AND_LIVE (live_float_p);
6570 FLOAT_MARK (XFLOAT (obj));
6571 break;
6573 case_Lisp_Int:
6574 break;
6576 default:
6577 emacs_abort ();
6580 #undef CHECK_LIVE
6581 #undef CHECK_ALLOCATED
6582 #undef CHECK_ALLOCATED_AND_LIVE
6584 /* Mark the Lisp pointers in the terminal objects.
6585 Called by Fgarbage_collect. */
6587 static void
6588 mark_terminals (void)
6590 struct terminal *t;
6591 for (t = terminal_list; t; t = t->next_terminal)
6593 eassert (t->name != NULL);
6594 #ifdef HAVE_WINDOW_SYSTEM
6595 /* If a terminal object is reachable from a stacpro'ed object,
6596 it might have been marked already. Make sure the image cache
6597 gets marked. */
6598 mark_image_cache (t->image_cache);
6599 #endif /* HAVE_WINDOW_SYSTEM */
6600 if (!VECTOR_MARKED_P (t))
6601 mark_vectorlike ((struct Lisp_Vector *)t);
6607 /* Value is non-zero if OBJ will survive the current GC because it's
6608 either marked or does not need to be marked to survive. */
6610 bool
6611 survives_gc_p (Lisp_Object obj)
6613 bool survives_p;
6615 switch (XTYPE (obj))
6617 case_Lisp_Int:
6618 survives_p = 1;
6619 break;
6621 case Lisp_Symbol:
6622 survives_p = XSYMBOL (obj)->gcmarkbit;
6623 break;
6625 case Lisp_Misc:
6626 survives_p = XMISCANY (obj)->gcmarkbit;
6627 break;
6629 case Lisp_String:
6630 survives_p = STRING_MARKED_P (XSTRING (obj));
6631 break;
6633 case Lisp_Vectorlike:
6634 survives_p = SUBRP (obj) || VECTOR_MARKED_P (XVECTOR (obj));
6635 break;
6637 case Lisp_Cons:
6638 survives_p = CONS_MARKED_P (XCONS (obj));
6639 break;
6641 case Lisp_Float:
6642 survives_p = FLOAT_MARKED_P (XFLOAT (obj));
6643 break;
6645 default:
6646 emacs_abort ();
6649 return survives_p || PURE_P (XPNTR (obj));
6655 NO_INLINE /* For better stack traces */
6656 static void
6657 sweep_conses (void)
6659 struct cons_block *cblk;
6660 struct cons_block **cprev = &cons_block;
6661 int lim = cons_block_index;
6662 EMACS_INT num_free = 0, num_used = 0;
6664 cons_free_list = 0;
6666 for (cblk = cons_block; cblk; cblk = *cprev)
6668 int i = 0;
6669 int this_free = 0;
6670 int ilim = (lim + BITS_PER_BITS_WORD - 1) / BITS_PER_BITS_WORD;
6672 /* Scan the mark bits an int at a time. */
6673 for (i = 0; i < ilim; i++)
6675 if (cblk->gcmarkbits[i] == BITS_WORD_MAX)
6677 /* Fast path - all cons cells for this int are marked. */
6678 cblk->gcmarkbits[i] = 0;
6679 num_used += BITS_PER_BITS_WORD;
6681 else
6683 /* Some cons cells for this int are not marked.
6684 Find which ones, and free them. */
6685 int start, pos, stop;
6687 start = i * BITS_PER_BITS_WORD;
6688 stop = lim - start;
6689 if (stop > BITS_PER_BITS_WORD)
6690 stop = BITS_PER_BITS_WORD;
6691 stop += start;
6693 for (pos = start; pos < stop; pos++)
6695 if (!CONS_MARKED_P (&cblk->conses[pos]))
6697 this_free++;
6698 cblk->conses[pos].u.chain = cons_free_list;
6699 cons_free_list = &cblk->conses[pos];
6700 cons_free_list->car = Vdead;
6702 else
6704 num_used++;
6705 CONS_UNMARK (&cblk->conses[pos]);
6711 lim = CONS_BLOCK_SIZE;
6712 /* If this block contains only free conses and we have already
6713 seen more than two blocks worth of free conses then deallocate
6714 this block. */
6715 if (this_free == CONS_BLOCK_SIZE && num_free > CONS_BLOCK_SIZE)
6717 *cprev = cblk->next;
6718 /* Unhook from the free list. */
6719 cons_free_list = cblk->conses[0].u.chain;
6720 lisp_align_free (cblk);
6722 else
6724 num_free += this_free;
6725 cprev = &cblk->next;
6728 total_conses = num_used;
6729 total_free_conses = num_free;
6732 NO_INLINE /* For better stack traces */
6733 static void
6734 sweep_floats (void)
6736 register struct float_block *fblk;
6737 struct float_block **fprev = &float_block;
6738 register int lim = float_block_index;
6739 EMACS_INT num_free = 0, num_used = 0;
6741 float_free_list = 0;
6743 for (fblk = float_block; fblk; fblk = *fprev)
6745 register int i;
6746 int this_free = 0;
6747 for (i = 0; i < lim; i++)
6748 if (!FLOAT_MARKED_P (&fblk->floats[i]))
6750 this_free++;
6751 fblk->floats[i].u.chain = float_free_list;
6752 float_free_list = &fblk->floats[i];
6754 else
6756 num_used++;
6757 FLOAT_UNMARK (&fblk->floats[i]);
6759 lim = FLOAT_BLOCK_SIZE;
6760 /* If this block contains only free floats and we have already
6761 seen more than two blocks worth of free floats then deallocate
6762 this block. */
6763 if (this_free == FLOAT_BLOCK_SIZE && num_free > FLOAT_BLOCK_SIZE)
6765 *fprev = fblk->next;
6766 /* Unhook from the free list. */
6767 float_free_list = fblk->floats[0].u.chain;
6768 lisp_align_free (fblk);
6770 else
6772 num_free += this_free;
6773 fprev = &fblk->next;
6776 total_floats = num_used;
6777 total_free_floats = num_free;
6780 NO_INLINE /* For better stack traces */
6781 static void
6782 sweep_intervals (void)
6784 register struct interval_block *iblk;
6785 struct interval_block **iprev = &interval_block;
6786 register int lim = interval_block_index;
6787 EMACS_INT num_free = 0, num_used = 0;
6789 interval_free_list = 0;
6791 for (iblk = interval_block; iblk; iblk = *iprev)
6793 register int i;
6794 int this_free = 0;
6796 for (i = 0; i < lim; i++)
6798 if (!iblk->intervals[i].gcmarkbit)
6800 set_interval_parent (&iblk->intervals[i], interval_free_list);
6801 interval_free_list = &iblk->intervals[i];
6802 this_free++;
6804 else
6806 num_used++;
6807 iblk->intervals[i].gcmarkbit = 0;
6810 lim = INTERVAL_BLOCK_SIZE;
6811 /* If this block contains only free intervals and we have already
6812 seen more than two blocks worth of free intervals then
6813 deallocate this block. */
6814 if (this_free == INTERVAL_BLOCK_SIZE && num_free > INTERVAL_BLOCK_SIZE)
6816 *iprev = iblk->next;
6817 /* Unhook from the free list. */
6818 interval_free_list = INTERVAL_PARENT (&iblk->intervals[0]);
6819 lisp_free (iblk);
6821 else
6823 num_free += this_free;
6824 iprev = &iblk->next;
6827 total_intervals = num_used;
6828 total_free_intervals = num_free;
6831 NO_INLINE /* For better stack traces */
6832 static void
6833 sweep_symbols (void)
6835 struct symbol_block *sblk;
6836 struct symbol_block **sprev = &symbol_block;
6837 int lim = symbol_block_index;
6838 EMACS_INT num_free = 0, num_used = ARRAYELTS (lispsym);
6840 symbol_free_list = NULL;
6842 for (int i = 0; i < ARRAYELTS (lispsym); i++)
6843 lispsym[i].gcmarkbit = 0;
6845 for (sblk = symbol_block; sblk; sblk = *sprev)
6847 int this_free = 0;
6848 union aligned_Lisp_Symbol *sym = sblk->symbols;
6849 union aligned_Lisp_Symbol *end = sym + lim;
6851 for (; sym < end; ++sym)
6853 if (!sym->s.gcmarkbit)
6855 if (sym->s.redirect == SYMBOL_LOCALIZED)
6856 xfree (SYMBOL_BLV (&sym->s));
6857 sym->s.next = symbol_free_list;
6858 symbol_free_list = &sym->s;
6859 symbol_free_list->function = Vdead;
6860 ++this_free;
6862 else
6864 ++num_used;
6865 sym->s.gcmarkbit = 0;
6866 /* Attempt to catch bogus objects. */
6867 eassert (valid_lisp_object_p (sym->s.function));
6871 lim = SYMBOL_BLOCK_SIZE;
6872 /* If this block contains only free symbols and we have already
6873 seen more than two blocks worth of free symbols then deallocate
6874 this block. */
6875 if (this_free == SYMBOL_BLOCK_SIZE && num_free > SYMBOL_BLOCK_SIZE)
6877 *sprev = sblk->next;
6878 /* Unhook from the free list. */
6879 symbol_free_list = sblk->symbols[0].s.next;
6880 lisp_free (sblk);
6882 else
6884 num_free += this_free;
6885 sprev = &sblk->next;
6888 total_symbols = num_used;
6889 total_free_symbols = num_free;
6892 NO_INLINE /* For better stack traces. */
6893 static void
6894 sweep_misc (void)
6896 register struct marker_block *mblk;
6897 struct marker_block **mprev = &marker_block;
6898 register int lim = marker_block_index;
6899 EMACS_INT num_free = 0, num_used = 0;
6901 /* Put all unmarked misc's on free list. For a marker, first
6902 unchain it from the buffer it points into. */
6904 marker_free_list = 0;
6906 for (mblk = marker_block; mblk; mblk = *mprev)
6908 register int i;
6909 int this_free = 0;
6911 for (i = 0; i < lim; i++)
6913 if (!mblk->markers[i].m.u_any.gcmarkbit)
6915 if (mblk->markers[i].m.u_any.type == Lisp_Misc_Marker)
6916 unchain_marker (&mblk->markers[i].m.u_marker);
6917 else if (mblk->markers[i].m.u_any.type == Lisp_Misc_Finalizer)
6918 unchain_finalizer (&mblk->markers[i].m.u_finalizer);
6919 #ifdef HAVE_MODULES
6920 else if (mblk->markers[i].m.u_any.type == Lisp_Misc_User_Ptr)
6922 struct Lisp_User_Ptr *uptr = &mblk->markers[i].m.u_user_ptr;
6923 if (uptr->finalizer)
6924 uptr->finalizer (uptr->p);
6926 #endif
6927 /* Set the type of the freed object to Lisp_Misc_Free.
6928 We could leave the type alone, since nobody checks it,
6929 but this might catch bugs faster. */
6930 mblk->markers[i].m.u_marker.type = Lisp_Misc_Free;
6931 mblk->markers[i].m.u_free.chain = marker_free_list;
6932 marker_free_list = &mblk->markers[i].m;
6933 this_free++;
6935 else
6937 num_used++;
6938 mblk->markers[i].m.u_any.gcmarkbit = 0;
6941 lim = MARKER_BLOCK_SIZE;
6942 /* If this block contains only free markers and we have already
6943 seen more than two blocks worth of free markers then deallocate
6944 this block. */
6945 if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE)
6947 *mprev = mblk->next;
6948 /* Unhook from the free list. */
6949 marker_free_list = mblk->markers[0].m.u_free.chain;
6950 lisp_free (mblk);
6952 else
6954 num_free += this_free;
6955 mprev = &mblk->next;
6959 total_markers = num_used;
6960 total_free_markers = num_free;
6963 NO_INLINE /* For better stack traces */
6964 static void
6965 sweep_buffers (void)
6967 register struct buffer *buffer, **bprev = &all_buffers;
6969 total_buffers = 0;
6970 for (buffer = all_buffers; buffer; buffer = *bprev)
6971 if (!VECTOR_MARKED_P (buffer))
6973 *bprev = buffer->next;
6974 lisp_free (buffer);
6976 else
6978 VECTOR_UNMARK (buffer);
6979 /* Do not use buffer_(set|get)_intervals here. */
6980 buffer->text->intervals = balance_intervals (buffer->text->intervals);
6981 total_buffers++;
6982 bprev = &buffer->next;
6986 /* Sweep: find all structures not marked, and free them. */
6987 static void
6988 gc_sweep (void)
6990 /* Remove or mark entries in weak hash tables.
6991 This must be done before any object is unmarked. */
6992 sweep_weak_hash_tables ();
6994 sweep_strings ();
6995 check_string_bytes (!noninteractive);
6996 sweep_conses ();
6997 sweep_floats ();
6998 sweep_intervals ();
6999 sweep_symbols ();
7000 sweep_misc ();
7001 sweep_buffers ();
7002 sweep_vectors ();
7003 check_string_bytes (!noninteractive);
7006 DEFUN ("memory-info", Fmemory_info, Smemory_info, 0, 0, 0,
7007 doc: /* Return a list of (TOTAL-RAM FREE-RAM TOTAL-SWAP FREE-SWAP).
7008 All values are in Kbytes. If there is no swap space,
7009 last two values are zero. If the system is not supported
7010 or memory information can't be obtained, return nil. */)
7011 (void)
7013 #if defined HAVE_LINUX_SYSINFO
7014 struct sysinfo si;
7015 uintmax_t units;
7017 if (sysinfo (&si))
7018 return Qnil;
7019 #ifdef LINUX_SYSINFO_UNIT
7020 units = si.mem_unit;
7021 #else
7022 units = 1;
7023 #endif
7024 return list4i ((uintmax_t) si.totalram * units / 1024,
7025 (uintmax_t) si.freeram * units / 1024,
7026 (uintmax_t) si.totalswap * units / 1024,
7027 (uintmax_t) si.freeswap * units / 1024);
7028 #elif defined WINDOWSNT
7029 unsigned long long totalram, freeram, totalswap, freeswap;
7031 if (w32_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7032 return list4i ((uintmax_t) totalram / 1024,
7033 (uintmax_t) freeram / 1024,
7034 (uintmax_t) totalswap / 1024,
7035 (uintmax_t) freeswap / 1024);
7036 else
7037 return Qnil;
7038 #elif defined MSDOS
7039 unsigned long totalram, freeram, totalswap, freeswap;
7041 if (dos_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7042 return list4i ((uintmax_t) totalram / 1024,
7043 (uintmax_t) freeram / 1024,
7044 (uintmax_t) totalswap / 1024,
7045 (uintmax_t) freeswap / 1024);
7046 else
7047 return Qnil;
7048 #else /* not HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7049 /* FIXME: add more systems. */
7050 return Qnil;
7051 #endif /* HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7054 /* Debugging aids. */
7056 DEFUN ("memory-limit", Fmemory_limit, Smemory_limit, 0, 0, 0,
7057 doc: /* Return the address of the last byte Emacs has allocated, divided by 1024.
7058 This may be helpful in debugging Emacs's memory usage.
7059 We divide the value by 1024 to make sure it fits in a Lisp integer. */)
7060 (void)
7062 Lisp_Object end;
7064 #if defined HAVE_NS || !HAVE_SBRK
7065 /* Avoid warning. sbrk has no relation to memory allocated anyway. */
7066 XSETINT (end, 0);
7067 #else
7068 XSETINT (end, (intptr_t) (char *) sbrk (0) / 1024);
7069 #endif
7071 return end;
7074 DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0,
7075 doc: /* Return a list of counters that measure how much consing there has been.
7076 Each of these counters increments for a certain kind of object.
7077 The counters wrap around from the largest positive integer to zero.
7078 Garbage collection does not decrease them.
7079 The elements of the value are as follows:
7080 (CONSES FLOATS VECTOR-CELLS SYMBOLS STRING-CHARS MISCS INTERVALS STRINGS)
7081 All are in units of 1 = one object consed
7082 except for VECTOR-CELLS and STRING-CHARS, which count the total length of
7083 objects consed.
7084 MISCS include overlays, markers, and some internal types.
7085 Frames, windows, buffers, and subprocesses count as vectors
7086 (but the contents of a buffer's text do not count here). */)
7087 (void)
7089 return listn (CONSTYPE_HEAP, 8,
7090 bounded_number (cons_cells_consed),
7091 bounded_number (floats_consed),
7092 bounded_number (vector_cells_consed),
7093 bounded_number (symbols_consed),
7094 bounded_number (string_chars_consed),
7095 bounded_number (misc_objects_consed),
7096 bounded_number (intervals_consed),
7097 bounded_number (strings_consed));
7100 static bool
7101 symbol_uses_obj (Lisp_Object symbol, Lisp_Object obj)
7103 struct Lisp_Symbol *sym = XSYMBOL (symbol);
7104 Lisp_Object val = find_symbol_value (symbol);
7105 return (EQ (val, obj)
7106 || EQ (sym->function, obj)
7107 || (!NILP (sym->function)
7108 && COMPILEDP (sym->function)
7109 && EQ (AREF (sym->function, COMPILED_BYTECODE), obj))
7110 || (!NILP (val)
7111 && COMPILEDP (val)
7112 && EQ (AREF (val, COMPILED_BYTECODE), obj)));
7115 /* Find at most FIND_MAX symbols which have OBJ as their value or
7116 function. This is used in gdbinit's `xwhichsymbols' command. */
7118 Lisp_Object
7119 which_symbols (Lisp_Object obj, EMACS_INT find_max)
7121 struct symbol_block *sblk;
7122 ptrdiff_t gc_count = inhibit_garbage_collection ();
7123 Lisp_Object found = Qnil;
7125 if (! DEADP (obj))
7127 for (int i = 0; i < ARRAYELTS (lispsym); i++)
7129 Lisp_Object sym = builtin_lisp_symbol (i);
7130 if (symbol_uses_obj (sym, obj))
7132 found = Fcons (sym, found);
7133 if (--find_max == 0)
7134 goto out;
7138 for (sblk = symbol_block; sblk; sblk = sblk->next)
7140 union aligned_Lisp_Symbol *aligned_sym = sblk->symbols;
7141 int bn;
7143 for (bn = 0; bn < SYMBOL_BLOCK_SIZE; bn++, aligned_sym++)
7145 if (sblk == symbol_block && bn >= symbol_block_index)
7146 break;
7148 Lisp_Object sym = make_lisp_symbol (&aligned_sym->s);
7149 if (symbol_uses_obj (sym, obj))
7151 found = Fcons (sym, found);
7152 if (--find_max == 0)
7153 goto out;
7159 out:
7160 unbind_to (gc_count, Qnil);
7161 return found;
7164 #ifdef SUSPICIOUS_OBJECT_CHECKING
7166 static void *
7167 find_suspicious_object_in_range (void *begin, void *end)
7169 char *begin_a = begin;
7170 char *end_a = end;
7171 int i;
7173 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7175 char *suspicious_object = suspicious_objects[i];
7176 if (begin_a <= suspicious_object && suspicious_object < end_a)
7177 return suspicious_object;
7180 return NULL;
7183 static void
7184 note_suspicious_free (void* ptr)
7186 struct suspicious_free_record* rec;
7188 rec = &suspicious_free_history[suspicious_free_history_index++];
7189 if (suspicious_free_history_index ==
7190 ARRAYELTS (suspicious_free_history))
7192 suspicious_free_history_index = 0;
7195 memset (rec, 0, sizeof (*rec));
7196 rec->suspicious_object = ptr;
7197 backtrace (&rec->backtrace[0], ARRAYELTS (rec->backtrace));
7200 static void
7201 detect_suspicious_free (void* ptr)
7203 int i;
7205 eassert (ptr != NULL);
7207 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7208 if (suspicious_objects[i] == ptr)
7210 note_suspicious_free (ptr);
7211 suspicious_objects[i] = NULL;
7215 #endif /* SUSPICIOUS_OBJECT_CHECKING */
7217 DEFUN ("suspicious-object", Fsuspicious_object, Ssuspicious_object, 1, 1, 0,
7218 doc: /* Return OBJ, maybe marking it for extra scrutiny.
7219 If Emacs is compiled with suspicious object checking, capture
7220 a stack trace when OBJ is freed in order to help track down
7221 garbage collection bugs. Otherwise, do nothing and return OBJ. */)
7222 (Lisp_Object obj)
7224 #ifdef SUSPICIOUS_OBJECT_CHECKING
7225 /* Right now, we care only about vectors. */
7226 if (VECTORLIKEP (obj))
7228 suspicious_objects[suspicious_object_index++] = XVECTOR (obj);
7229 if (suspicious_object_index == ARRAYELTS (suspicious_objects))
7230 suspicious_object_index = 0;
7232 #endif
7233 return obj;
7236 #ifdef ENABLE_CHECKING
7238 bool suppress_checking;
7240 void
7241 die (const char *msg, const char *file, int line)
7243 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: assertion failed: %s\r\n",
7244 file, line, msg);
7245 terminate_due_to_signal (SIGABRT, INT_MAX);
7248 #endif /* ENABLE_CHECKING */
7250 #if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
7252 /* Stress alloca with inconveniently sized requests and check
7253 whether all allocated areas may be used for Lisp_Object. */
7255 NO_INLINE static void
7256 verify_alloca (void)
7258 int i;
7259 enum { ALLOCA_CHECK_MAX = 256 };
7260 /* Start from size of the smallest Lisp object. */
7261 for (i = sizeof (struct Lisp_Cons); i <= ALLOCA_CHECK_MAX; i++)
7263 void *ptr = alloca (i);
7264 make_lisp_ptr (ptr, Lisp_Cons);
7268 #else /* not ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7270 #define verify_alloca() ((void) 0)
7272 #endif /* ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7274 /* Initialization. */
7276 void
7277 init_alloc_once (void)
7279 /* Even though Qt's contents are not set up, its address is known. */
7280 Vpurify_flag = Qt;
7282 purebeg = PUREBEG;
7283 pure_size = PURESIZE;
7285 verify_alloca ();
7286 init_finalizer_list (&finalizers);
7287 init_finalizer_list (&doomed_finalizers);
7289 mem_init ();
7290 Vdead = make_pure_string ("DEAD", 4, 4, 0);
7292 #ifdef DOUG_LEA_MALLOC
7293 mallopt (M_TRIM_THRESHOLD, 128 * 1024); /* Trim threshold. */
7294 mallopt (M_MMAP_THRESHOLD, 64 * 1024); /* Mmap threshold. */
7295 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); /* Max. number of mmap'ed areas. */
7296 #endif
7297 init_strings ();
7298 init_vectors ();
7300 refill_memory_reserve ();
7301 gc_cons_threshold = GC_DEFAULT_THRESHOLD;
7304 void
7305 init_alloc (void)
7307 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
7308 setjmp_tested_p = longjmps_done = 0;
7309 #endif
7310 Vgc_elapsed = make_float (0.0);
7311 gcs_done = 0;
7313 #if USE_VALGRIND
7314 valgrind_p = RUNNING_ON_VALGRIND != 0;
7315 #endif
7318 void
7319 syms_of_alloc (void)
7321 DEFVAR_INT ("gc-cons-threshold", gc_cons_threshold,
7322 doc: /* Number of bytes of consing between garbage collections.
7323 Garbage collection can happen automatically once this many bytes have been
7324 allocated since the last garbage collection. All data types count.
7326 Garbage collection happens automatically only when `eval' is called.
7328 By binding this temporarily to a large number, you can effectively
7329 prevent garbage collection during a part of the program.
7330 See also `gc-cons-percentage'. */);
7332 DEFVAR_LISP ("gc-cons-percentage", Vgc_cons_percentage,
7333 doc: /* Portion of the heap used for allocation.
7334 Garbage collection can happen automatically once this portion of the heap
7335 has been allocated since the last garbage collection.
7336 If this portion is smaller than `gc-cons-threshold', this is ignored. */);
7337 Vgc_cons_percentage = make_float (0.1);
7339 DEFVAR_INT ("pure-bytes-used", pure_bytes_used,
7340 doc: /* Number of bytes of shareable Lisp data allocated so far. */);
7342 DEFVAR_INT ("cons-cells-consed", cons_cells_consed,
7343 doc: /* Number of cons cells that have been consed so far. */);
7345 DEFVAR_INT ("floats-consed", floats_consed,
7346 doc: /* Number of floats that have been consed so far. */);
7348 DEFVAR_INT ("vector-cells-consed", vector_cells_consed,
7349 doc: /* Number of vector cells that have been consed so far. */);
7351 DEFVAR_INT ("symbols-consed", symbols_consed,
7352 doc: /* Number of symbols that have been consed so far. */);
7353 symbols_consed += ARRAYELTS (lispsym);
7355 DEFVAR_INT ("string-chars-consed", string_chars_consed,
7356 doc: /* Number of string characters that have been consed so far. */);
7358 DEFVAR_INT ("misc-objects-consed", misc_objects_consed,
7359 doc: /* Number of miscellaneous objects that have been consed so far.
7360 These include markers and overlays, plus certain objects not visible
7361 to users. */);
7363 DEFVAR_INT ("intervals-consed", intervals_consed,
7364 doc: /* Number of intervals that have been consed so far. */);
7366 DEFVAR_INT ("strings-consed", strings_consed,
7367 doc: /* Number of strings that have been consed so far. */);
7369 DEFVAR_LISP ("purify-flag", Vpurify_flag,
7370 doc: /* Non-nil means loading Lisp code in order to dump an executable.
7371 This means that certain objects should be allocated in shared (pure) space.
7372 It can also be set to a hash-table, in which case this table is used to
7373 do hash-consing of the objects allocated to pure space. */);
7375 DEFVAR_BOOL ("garbage-collection-messages", garbage_collection_messages,
7376 doc: /* Non-nil means display messages at start and end of garbage collection. */);
7377 garbage_collection_messages = 0;
7379 DEFVAR_LISP ("post-gc-hook", Vpost_gc_hook,
7380 doc: /* Hook run after garbage collection has finished. */);
7381 Vpost_gc_hook = Qnil;
7382 DEFSYM (Qpost_gc_hook, "post-gc-hook");
7384 DEFVAR_LISP ("memory-signal-data", Vmemory_signal_data,
7385 doc: /* Precomputed `signal' argument for memory-full error. */);
7386 /* We build this in advance because if we wait until we need it, we might
7387 not be able to allocate the memory to hold it. */
7388 Vmemory_signal_data
7389 = listn (CONSTYPE_PURE, 2, Qerror,
7390 build_pure_c_string ("Memory exhausted--use M-x save-some-buffers then exit and restart Emacs"));
7392 DEFVAR_LISP ("memory-full", Vmemory_full,
7393 doc: /* Non-nil means Emacs cannot get much more Lisp memory. */);
7394 Vmemory_full = Qnil;
7396 DEFSYM (Qconses, "conses");
7397 DEFSYM (Qsymbols, "symbols");
7398 DEFSYM (Qmiscs, "miscs");
7399 DEFSYM (Qstrings, "strings");
7400 DEFSYM (Qvectors, "vectors");
7401 DEFSYM (Qfloats, "floats");
7402 DEFSYM (Qintervals, "intervals");
7403 DEFSYM (Qbuffers, "buffers");
7404 DEFSYM (Qstring_bytes, "string-bytes");
7405 DEFSYM (Qvector_slots, "vector-slots");
7406 DEFSYM (Qheap, "heap");
7407 DEFSYM (QAutomatic_GC, "Automatic GC");
7409 DEFSYM (Qgc_cons_threshold, "gc-cons-threshold");
7410 DEFSYM (Qchar_table_extra_slots, "char-table-extra-slots");
7412 DEFVAR_LISP ("gc-elapsed", Vgc_elapsed,
7413 doc: /* Accumulated time elapsed in garbage collections.
7414 The time is in seconds as a floating point value. */);
7415 DEFVAR_INT ("gcs-done", gcs_done,
7416 doc: /* Accumulated number of garbage collections done. */);
7418 defsubr (&Scons);
7419 defsubr (&Slist);
7420 defsubr (&Svector);
7421 defsubr (&Sbool_vector);
7422 defsubr (&Smake_byte_code);
7423 defsubr (&Smake_list);
7424 defsubr (&Smake_vector);
7425 defsubr (&Smake_string);
7426 defsubr (&Smake_bool_vector);
7427 defsubr (&Smake_symbol);
7428 defsubr (&Smake_marker);
7429 defsubr (&Smake_finalizer);
7430 defsubr (&Spurecopy);
7431 defsubr (&Sgarbage_collect);
7432 defsubr (&Smemory_limit);
7433 defsubr (&Smemory_info);
7434 defsubr (&Smemory_use_counts);
7435 defsubr (&Ssuspicious_object);
7438 /* When compiled with GCC, GDB might say "No enum type named
7439 pvec_type" if we don't have at least one symbol with that type, and
7440 then xbacktrace could fail. Similarly for the other enums and
7441 their values. Some non-GCC compilers don't like these constructs. */
7442 #ifdef __GNUC__
7443 union
7445 enum CHARTAB_SIZE_BITS CHARTAB_SIZE_BITS;
7446 enum char_table_specials char_table_specials;
7447 enum char_bits char_bits;
7448 enum CHECK_LISP_OBJECT_TYPE CHECK_LISP_OBJECT_TYPE;
7449 enum DEFAULT_HASH_SIZE DEFAULT_HASH_SIZE;
7450 enum Lisp_Bits Lisp_Bits;
7451 enum Lisp_Compiled Lisp_Compiled;
7452 enum maxargs maxargs;
7453 enum MAX_ALLOCA MAX_ALLOCA;
7454 enum More_Lisp_Bits More_Lisp_Bits;
7455 enum pvec_type pvec_type;
7456 } const EXTERNALLY_VISIBLE gdb_make_enums_visible = {0};
7457 #endif /* __GNUC__ */