Fix Bug#24432
[emacs.git] / src / alloc.c
blob5bbd5e55c42d9f637842b68b85f2f21584411503
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 <limits.h> /* For CHAR_BIT. */
26 #include <signal.h> /* For SIGABRT, SIGDANGER. */
28 #ifdef HAVE_PTHREAD
29 #include <pthread.h>
30 #endif
32 #include "lisp.h"
33 #include "dispextern.h"
34 #include "intervals.h"
35 #include "puresize.h"
36 #include "sheap.h"
37 #include "systime.h"
38 #include "character.h"
39 #include "buffer.h"
40 #include "window.h"
41 #include "keyboard.h"
42 #include "frame.h"
43 #include "blockinput.h"
44 #include "termhooks.h" /* For struct terminal. */
45 #ifdef HAVE_WINDOW_SYSTEM
46 #include TERM_HEADER
47 #endif /* HAVE_WINDOW_SYSTEM */
49 #include <flexmember.h>
50 #include <verify.h>
51 #include <execinfo.h> /* For backtrace. */
53 #ifdef HAVE_LINUX_SYSINFO
54 #include <sys/sysinfo.h>
55 #endif
57 #ifdef MSDOS
58 #include "dosfns.h" /* For dos_memory_info. */
59 #endif
61 #ifdef HAVE_MALLOC_H
62 # include <malloc.h>
63 #endif
65 #if (defined ENABLE_CHECKING \
66 && defined HAVE_VALGRIND_VALGRIND_H \
67 && !defined USE_VALGRIND)
68 # define USE_VALGRIND 1
69 #endif
71 #if USE_VALGRIND
72 #include <valgrind/valgrind.h>
73 #include <valgrind/memcheck.h>
74 static bool valgrind_p;
75 #endif
77 /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects. */
79 /* GC_MALLOC_CHECK defined means perform validity checks of malloc'd
80 memory. Can do this only if using gmalloc.c and if not checking
81 marked objects. */
83 #if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \
84 || defined HYBRID_MALLOC || defined GC_CHECK_MARKED_OBJECTS)
85 #undef GC_MALLOC_CHECK
86 #endif
88 #include <unistd.h>
89 #include <fcntl.h>
91 #ifdef USE_GTK
92 # include "gtkutil.h"
93 #endif
94 #ifdef WINDOWSNT
95 #include "w32.h"
96 #include "w32heap.h" /* for sbrk */
97 #endif
99 #if defined DOUG_LEA_MALLOC || defined GNU_LINUX
100 /* The address where the heap starts. */
101 void *
102 my_heap_start (void)
104 static void *start;
105 if (! start)
106 start = sbrk (0);
107 return start;
109 #endif
111 #ifdef DOUG_LEA_MALLOC
113 /* Specify maximum number of areas to mmap. It would be nice to use a
114 value that explicitly means "no limit". */
116 #define MMAP_MAX_AREAS 100000000
118 /* A pointer to the memory allocated that copies that static data
119 inside glibc's malloc. */
120 static void *malloc_state_ptr;
122 /* Restore the dumped malloc state. Because malloc can be invoked
123 even before main (e.g. by the dynamic linker), the dumped malloc
124 state must be restored as early as possible using this special hook. */
125 static void
126 malloc_initialize_hook (void)
128 static bool malloc_using_checking;
130 if (! initialized)
132 my_heap_start ();
133 malloc_using_checking = getenv ("MALLOC_CHECK_") != NULL;
135 else
137 if (!malloc_using_checking)
139 /* Work around a bug in glibc's malloc. MALLOC_CHECK_ must be
140 ignored if the heap to be restored was constructed without
141 malloc checking. Can't use unsetenv, since that calls malloc. */
142 char **p = environ;
143 if (p)
144 for (; *p; p++)
145 if (strncmp (*p, "MALLOC_CHECK_=", 14) == 0)
148 *p = p[1];
149 while (*++p);
151 break;
155 if (malloc_set_state (malloc_state_ptr) != 0)
156 emacs_abort ();
157 # ifndef XMALLOC_OVERRUN_CHECK
158 alloc_unexec_post ();
159 # endif
163 /* Declare the malloc initialization hook, which runs before 'main' starts.
164 EXTERNALLY_VISIBLE works around Bug#22522. */
165 # ifndef __MALLOC_HOOK_VOLATILE
166 # define __MALLOC_HOOK_VOLATILE
167 # endif
168 voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook EXTERNALLY_VISIBLE
169 = malloc_initialize_hook;
171 #endif
173 /* Allocator-related actions to do just before and after unexec. */
175 void
176 alloc_unexec_pre (void)
178 #ifdef DOUG_LEA_MALLOC
179 malloc_state_ptr = malloc_get_state ();
180 if (!malloc_state_ptr)
181 fatal ("malloc_get_state: %s", strerror (errno));
182 #endif
183 #ifdef HYBRID_MALLOC
184 bss_sbrk_did_unexec = true;
185 #endif
188 void
189 alloc_unexec_post (void)
191 #ifdef DOUG_LEA_MALLOC
192 free (malloc_state_ptr);
193 #endif
194 #ifdef HYBRID_MALLOC
195 bss_sbrk_did_unexec = false;
196 #endif
199 /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
200 to a struct Lisp_String. */
202 #define MARK_STRING(S) ((S)->size |= ARRAY_MARK_FLAG)
203 #define UNMARK_STRING(S) ((S)->size &= ~ARRAY_MARK_FLAG)
204 #define STRING_MARKED_P(S) (((S)->size & ARRAY_MARK_FLAG) != 0)
206 #define VECTOR_MARK(V) ((V)->header.size |= ARRAY_MARK_FLAG)
207 #define VECTOR_UNMARK(V) ((V)->header.size &= ~ARRAY_MARK_FLAG)
208 #define VECTOR_MARKED_P(V) (((V)->header.size & ARRAY_MARK_FLAG) != 0)
210 /* Default value of gc_cons_threshold (see below). */
212 #define GC_DEFAULT_THRESHOLD (100000 * word_size)
214 /* Global variables. */
215 struct emacs_globals globals;
217 /* Number of bytes of consing done since the last gc. */
219 EMACS_INT consing_since_gc;
221 /* Similar minimum, computed from Vgc_cons_percentage. */
223 EMACS_INT gc_relative_threshold;
225 /* Minimum number of bytes of consing since GC before next GC,
226 when memory is full. */
228 EMACS_INT memory_full_cons_threshold;
230 /* True during GC. */
232 bool gc_in_progress;
234 /* True means abort if try to GC.
235 This is for code which is written on the assumption that
236 no GC will happen, so as to verify that assumption. */
238 bool abort_on_gc;
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 b->next_free = b->data;
2012 b->data[0].string = NULL;
2013 b->next = large_sblocks;
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 b->next_free = b->data;
2024 b->data[0].string = NULL;
2025 b->next = NULL;
2027 if (current_sblock)
2028 current_sblock->next = b;
2029 else
2030 oldest_sblock = b;
2031 current_sblock = b;
2033 else
2034 b = current_sblock;
2036 data = b->next_free;
2037 b->next_free = (sdata *) ((char *) data + needed + GC_STRING_EXTRA);
2039 MALLOC_UNBLOCK_INPUT;
2041 data->string = s;
2042 s->data = SDATA_DATA (data);
2043 #ifdef GC_CHECK_STRING_BYTES
2044 SDATA_NBYTES (data) = nbytes;
2045 #endif
2046 s->size = nchars;
2047 s->size_byte = nbytes;
2048 s->data[nbytes] = '\0';
2049 #ifdef GC_CHECK_STRING_OVERRUN
2050 memcpy ((char *) data + needed, string_overrun_cookie,
2051 GC_STRING_OVERRUN_COOKIE_SIZE);
2052 #endif
2054 /* Note that Faset may call to this function when S has already data
2055 assigned. In this case, mark data as free by setting it's string
2056 back-pointer to null, and record the size of the data in it. */
2057 if (old_data)
2059 SDATA_NBYTES (old_data) = old_nbytes;
2060 old_data->string = NULL;
2063 consing_since_gc += needed;
2067 /* Sweep and compact strings. */
2069 NO_INLINE /* For better stack traces */
2070 static void
2071 sweep_strings (void)
2073 struct string_block *b, *next;
2074 struct string_block *live_blocks = NULL;
2076 string_free_list = NULL;
2077 total_strings = total_free_strings = 0;
2078 total_string_bytes = 0;
2080 /* Scan strings_blocks, free Lisp_Strings that aren't marked. */
2081 for (b = string_blocks; b; b = next)
2083 int i, nfree = 0;
2084 struct Lisp_String *free_list_before = string_free_list;
2086 next = b->next;
2088 for (i = 0; i < STRING_BLOCK_SIZE; ++i)
2090 struct Lisp_String *s = b->strings + i;
2092 if (s->data)
2094 /* String was not on free-list before. */
2095 if (STRING_MARKED_P (s))
2097 /* String is live; unmark it and its intervals. */
2098 UNMARK_STRING (s);
2100 /* Do not use string_(set|get)_intervals here. */
2101 s->intervals = balance_intervals (s->intervals);
2103 ++total_strings;
2104 total_string_bytes += STRING_BYTES (s);
2106 else
2108 /* String is dead. Put it on the free-list. */
2109 sdata *data = SDATA_OF_STRING (s);
2111 /* Save the size of S in its sdata so that we know
2112 how large that is. Reset the sdata's string
2113 back-pointer so that we know it's free. */
2114 #ifdef GC_CHECK_STRING_BYTES
2115 if (string_bytes (s) != SDATA_NBYTES (data))
2116 emacs_abort ();
2117 #else
2118 data->n.nbytes = STRING_BYTES (s);
2119 #endif
2120 data->string = NULL;
2122 /* Reset the strings's `data' member so that we
2123 know it's free. */
2124 s->data = NULL;
2126 /* Put the string on the free-list. */
2127 NEXT_FREE_LISP_STRING (s) = string_free_list;
2128 string_free_list = s;
2129 ++nfree;
2132 else
2134 /* S was on the free-list before. Put it there again. */
2135 NEXT_FREE_LISP_STRING (s) = string_free_list;
2136 string_free_list = s;
2137 ++nfree;
2141 /* Free blocks that contain free Lisp_Strings only, except
2142 the first two of them. */
2143 if (nfree == STRING_BLOCK_SIZE
2144 && total_free_strings > STRING_BLOCK_SIZE)
2146 lisp_free (b);
2147 string_free_list = free_list_before;
2149 else
2151 total_free_strings += nfree;
2152 b->next = live_blocks;
2153 live_blocks = b;
2157 check_string_free_list ();
2159 string_blocks = live_blocks;
2160 free_large_strings ();
2161 compact_small_strings ();
2163 check_string_free_list ();
2167 /* Free dead large strings. */
2169 static void
2170 free_large_strings (void)
2172 struct sblock *b, *next;
2173 struct sblock *live_blocks = NULL;
2175 for (b = large_sblocks; b; b = next)
2177 next = b->next;
2179 if (b->data[0].string == NULL)
2180 lisp_free (b);
2181 else
2183 b->next = live_blocks;
2184 live_blocks = b;
2188 large_sblocks = live_blocks;
2192 /* Compact data of small strings. Free sblocks that don't contain
2193 data of live strings after compaction. */
2195 static void
2196 compact_small_strings (void)
2198 /* TB is the sblock we copy to, TO is the sdata within TB we copy
2199 to, and TB_END is the end of TB. */
2200 struct sblock *tb = oldest_sblock;
2201 if (tb)
2203 sdata *tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
2204 sdata *to = tb->data;
2206 /* Step through the blocks from the oldest to the youngest. We
2207 expect that old blocks will stabilize over time, so that less
2208 copying will happen this way. */
2209 struct sblock *b = tb;
2212 sdata *end = b->next_free;
2213 eassert ((char *) end <= (char *) b + SBLOCK_SIZE);
2215 for (sdata *from = b->data; from < end; )
2217 /* Compute the next FROM here because copying below may
2218 overwrite data we need to compute it. */
2219 ptrdiff_t nbytes;
2220 struct Lisp_String *s = from->string;
2222 #ifdef GC_CHECK_STRING_BYTES
2223 /* Check that the string size recorded in the string is the
2224 same as the one recorded in the sdata structure. */
2225 if (s && string_bytes (s) != SDATA_NBYTES (from))
2226 emacs_abort ();
2227 #endif /* GC_CHECK_STRING_BYTES */
2229 nbytes = s ? STRING_BYTES (s) : SDATA_NBYTES (from);
2230 eassert (nbytes <= LARGE_STRING_BYTES);
2232 nbytes = SDATA_SIZE (nbytes);
2233 sdata *from_end = (sdata *) ((char *) from
2234 + nbytes + GC_STRING_EXTRA);
2236 #ifdef GC_CHECK_STRING_OVERRUN
2237 if (memcmp (string_overrun_cookie,
2238 (char *) from_end - GC_STRING_OVERRUN_COOKIE_SIZE,
2239 GC_STRING_OVERRUN_COOKIE_SIZE))
2240 emacs_abort ();
2241 #endif
2243 /* Non-NULL S means it's alive. Copy its data. */
2244 if (s)
2246 /* If TB is full, proceed with the next sblock. */
2247 sdata *to_end = (sdata *) ((char *) to
2248 + nbytes + GC_STRING_EXTRA);
2249 if (to_end > tb_end)
2251 tb->next_free = to;
2252 tb = tb->next;
2253 tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
2254 to = tb->data;
2255 to_end = (sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2258 /* Copy, and update the string's `data' pointer. */
2259 if (from != to)
2261 eassert (tb != b || to < from);
2262 memmove (to, from, nbytes + GC_STRING_EXTRA);
2263 to->string->data = SDATA_DATA (to);
2266 /* Advance past the sdata we copied to. */
2267 to = to_end;
2269 from = from_end;
2271 b = b->next;
2273 while (b);
2275 /* The rest of the sblocks following TB don't contain live data, so
2276 we can free them. */
2277 for (b = tb->next; b; )
2279 struct sblock *next = b->next;
2280 lisp_free (b);
2281 b = next;
2284 tb->next_free = to;
2285 tb->next = NULL;
2288 current_sblock = tb;
2291 void
2292 string_overflow (void)
2294 error ("Maximum string size exceeded");
2297 DEFUN ("make-string", Fmake_string, Smake_string, 2, 2, 0,
2298 doc: /* Return a newly created string of length LENGTH, with INIT in each element.
2299 LENGTH must be an integer.
2300 INIT must be an integer that represents a character. */)
2301 (Lisp_Object length, Lisp_Object init)
2303 register Lisp_Object val;
2304 int c;
2305 EMACS_INT nbytes;
2307 CHECK_NATNUM (length);
2308 CHECK_CHARACTER (init);
2310 c = XFASTINT (init);
2311 if (ASCII_CHAR_P (c))
2313 nbytes = XINT (length);
2314 val = make_uninit_string (nbytes);
2315 if (nbytes)
2317 memset (SDATA (val), c, nbytes);
2318 SDATA (val)[nbytes] = 0;
2321 else
2323 unsigned char str[MAX_MULTIBYTE_LENGTH];
2324 ptrdiff_t len = CHAR_STRING (c, str);
2325 EMACS_INT string_len = XINT (length);
2326 unsigned char *p, *beg, *end;
2328 if (INT_MULTIPLY_WRAPV (len, string_len, &nbytes))
2329 string_overflow ();
2330 val = make_uninit_multibyte_string (string_len, nbytes);
2331 for (beg = SDATA (val), p = beg, end = beg + nbytes; p < end; p += len)
2333 /* First time we just copy `str' to the data of `val'. */
2334 if (p == beg)
2335 memcpy (p, str, len);
2336 else
2338 /* Next time we copy largest possible chunk from
2339 initialized to uninitialized part of `val'. */
2340 len = min (p - beg, end - p);
2341 memcpy (p, beg, len);
2344 if (nbytes)
2345 *p = 0;
2348 return val;
2351 /* Fill A with 1 bits if INIT is non-nil, and with 0 bits otherwise.
2352 Return A. */
2354 Lisp_Object
2355 bool_vector_fill (Lisp_Object a, Lisp_Object init)
2357 EMACS_INT nbits = bool_vector_size (a);
2358 if (0 < nbits)
2360 unsigned char *data = bool_vector_uchar_data (a);
2361 int pattern = NILP (init) ? 0 : (1 << BOOL_VECTOR_BITS_PER_CHAR) - 1;
2362 ptrdiff_t nbytes = bool_vector_bytes (nbits);
2363 int last_mask = ~ (~0u << ((nbits - 1) % BOOL_VECTOR_BITS_PER_CHAR + 1));
2364 memset (data, pattern, nbytes - 1);
2365 data[nbytes - 1] = pattern & last_mask;
2367 return a;
2370 /* Return a newly allocated, uninitialized bool vector of size NBITS. */
2372 Lisp_Object
2373 make_uninit_bool_vector (EMACS_INT nbits)
2375 Lisp_Object val;
2376 EMACS_INT words = bool_vector_words (nbits);
2377 EMACS_INT word_bytes = words * sizeof (bits_word);
2378 EMACS_INT needed_elements = ((bool_header_size - header_size + word_bytes
2379 + word_size - 1)
2380 / word_size);
2381 struct Lisp_Bool_Vector *p
2382 = (struct Lisp_Bool_Vector *) allocate_vector (needed_elements);
2383 XSETVECTOR (val, p);
2384 XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0);
2385 p->size = nbits;
2387 /* Clear padding at the end. */
2388 if (words)
2389 p->data[words - 1] = 0;
2391 return val;
2394 DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0,
2395 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element.
2396 LENGTH must be a number. INIT matters only in whether it is t or nil. */)
2397 (Lisp_Object length, Lisp_Object init)
2399 Lisp_Object val;
2401 CHECK_NATNUM (length);
2402 val = make_uninit_bool_vector (XFASTINT (length));
2403 return bool_vector_fill (val, init);
2406 DEFUN ("bool-vector", Fbool_vector, Sbool_vector, 0, MANY, 0,
2407 doc: /* Return a new bool-vector with specified arguments as elements.
2408 Any number of arguments, even zero arguments, are allowed.
2409 usage: (bool-vector &rest OBJECTS) */)
2410 (ptrdiff_t nargs, Lisp_Object *args)
2412 ptrdiff_t i;
2413 Lisp_Object vector;
2415 vector = make_uninit_bool_vector (nargs);
2416 for (i = 0; i < nargs; i++)
2417 bool_vector_set (vector, i, !NILP (args[i]));
2419 return vector;
2422 /* Make a string from NBYTES bytes at CONTENTS, and compute the number
2423 of characters from the contents. This string may be unibyte or
2424 multibyte, depending on the contents. */
2426 Lisp_Object
2427 make_string (const char *contents, ptrdiff_t nbytes)
2429 register Lisp_Object val;
2430 ptrdiff_t nchars, multibyte_nbytes;
2432 parse_str_as_multibyte ((const unsigned char *) contents, nbytes,
2433 &nchars, &multibyte_nbytes);
2434 if (nbytes == nchars || nbytes != multibyte_nbytes)
2435 /* CONTENTS contains no multibyte sequences or contains an invalid
2436 multibyte sequence. We must make unibyte string. */
2437 val = make_unibyte_string (contents, nbytes);
2438 else
2439 val = make_multibyte_string (contents, nchars, nbytes);
2440 return val;
2443 /* Make a unibyte string from LENGTH bytes at CONTENTS. */
2445 Lisp_Object
2446 make_unibyte_string (const char *contents, ptrdiff_t length)
2448 register Lisp_Object val;
2449 val = make_uninit_string (length);
2450 memcpy (SDATA (val), contents, length);
2451 return val;
2455 /* Make a multibyte string from NCHARS characters occupying NBYTES
2456 bytes at CONTENTS. */
2458 Lisp_Object
2459 make_multibyte_string (const char *contents,
2460 ptrdiff_t nchars, ptrdiff_t nbytes)
2462 register Lisp_Object val;
2463 val = make_uninit_multibyte_string (nchars, nbytes);
2464 memcpy (SDATA (val), contents, nbytes);
2465 return val;
2469 /* Make a string from NCHARS characters occupying NBYTES bytes at
2470 CONTENTS. It is a multibyte string if NBYTES != NCHARS. */
2472 Lisp_Object
2473 make_string_from_bytes (const char *contents,
2474 ptrdiff_t nchars, ptrdiff_t nbytes)
2476 register Lisp_Object val;
2477 val = make_uninit_multibyte_string (nchars, nbytes);
2478 memcpy (SDATA (val), contents, nbytes);
2479 if (SBYTES (val) == SCHARS (val))
2480 STRING_SET_UNIBYTE (val);
2481 return val;
2485 /* Make a string from NCHARS characters occupying NBYTES bytes at
2486 CONTENTS. The argument MULTIBYTE controls whether to label the
2487 string as multibyte. If NCHARS is negative, it counts the number of
2488 characters by itself. */
2490 Lisp_Object
2491 make_specified_string (const char *contents,
2492 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
2494 Lisp_Object val;
2496 if (nchars < 0)
2498 if (multibyte)
2499 nchars = multibyte_chars_in_text ((const unsigned char *) contents,
2500 nbytes);
2501 else
2502 nchars = nbytes;
2504 val = make_uninit_multibyte_string (nchars, nbytes);
2505 memcpy (SDATA (val), contents, nbytes);
2506 if (!multibyte)
2507 STRING_SET_UNIBYTE (val);
2508 return val;
2512 /* Return a unibyte Lisp_String set up to hold LENGTH characters
2513 occupying LENGTH bytes. */
2515 Lisp_Object
2516 make_uninit_string (EMACS_INT length)
2518 Lisp_Object val;
2520 if (!length)
2521 return empty_unibyte_string;
2522 val = make_uninit_multibyte_string (length, length);
2523 STRING_SET_UNIBYTE (val);
2524 return val;
2528 /* Return a multibyte Lisp_String set up to hold NCHARS characters
2529 which occupy NBYTES bytes. */
2531 Lisp_Object
2532 make_uninit_multibyte_string (EMACS_INT nchars, EMACS_INT nbytes)
2534 Lisp_Object string;
2535 struct Lisp_String *s;
2537 if (nchars < 0)
2538 emacs_abort ();
2539 if (!nbytes)
2540 return empty_multibyte_string;
2542 s = allocate_string ();
2543 s->intervals = NULL;
2544 allocate_string_data (s, nchars, nbytes);
2545 XSETSTRING (string, s);
2546 string_chars_consed += nbytes;
2547 return string;
2550 /* Print arguments to BUF according to a FORMAT, then return
2551 a Lisp_String initialized with the data from BUF. */
2553 Lisp_Object
2554 make_formatted_string (char *buf, const char *format, ...)
2556 va_list ap;
2557 int length;
2559 va_start (ap, format);
2560 length = vsprintf (buf, format, ap);
2561 va_end (ap);
2562 return make_string (buf, length);
2566 /***********************************************************************
2567 Float Allocation
2568 ***********************************************************************/
2570 /* We store float cells inside of float_blocks, allocating a new
2571 float_block with malloc whenever necessary. Float cells reclaimed
2572 by GC are put on a free list to be reallocated before allocating
2573 any new float cells from the latest float_block. */
2575 #define FLOAT_BLOCK_SIZE \
2576 (((BLOCK_BYTES - sizeof (struct float_block *) \
2577 /* The compiler might add padding at the end. */ \
2578 - (sizeof (struct Lisp_Float) - sizeof (bits_word))) * CHAR_BIT) \
2579 / (sizeof (struct Lisp_Float) * CHAR_BIT + 1))
2581 #define GETMARKBIT(block,n) \
2582 (((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2583 >> ((n) % BITS_PER_BITS_WORD)) \
2584 & 1)
2586 #define SETMARKBIT(block,n) \
2587 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2588 |= (bits_word) 1 << ((n) % BITS_PER_BITS_WORD))
2590 #define UNSETMARKBIT(block,n) \
2591 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2592 &= ~((bits_word) 1 << ((n) % BITS_PER_BITS_WORD)))
2594 #define FLOAT_BLOCK(fptr) \
2595 ((struct float_block *) (((uintptr_t) (fptr)) & ~(BLOCK_ALIGN - 1)))
2597 #define FLOAT_INDEX(fptr) \
2598 ((((uintptr_t) (fptr)) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Float))
2600 struct float_block
2602 /* Place `floats' at the beginning, to ease up FLOAT_INDEX's job. */
2603 struct Lisp_Float floats[FLOAT_BLOCK_SIZE];
2604 bits_word gcmarkbits[1 + FLOAT_BLOCK_SIZE / BITS_PER_BITS_WORD];
2605 struct float_block *next;
2608 #define FLOAT_MARKED_P(fptr) \
2609 GETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2611 #define FLOAT_MARK(fptr) \
2612 SETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2614 #define FLOAT_UNMARK(fptr) \
2615 UNSETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2617 /* Current float_block. */
2619 static struct float_block *float_block;
2621 /* Index of first unused Lisp_Float in the current float_block. */
2623 static int float_block_index = FLOAT_BLOCK_SIZE;
2625 /* Free-list of Lisp_Floats. */
2627 static struct Lisp_Float *float_free_list;
2629 /* Return a new float object with value FLOAT_VALUE. */
2631 Lisp_Object
2632 make_float (double float_value)
2634 register Lisp_Object val;
2636 MALLOC_BLOCK_INPUT;
2638 if (float_free_list)
2640 /* We use the data field for chaining the free list
2641 so that we won't use the same field that has the mark bit. */
2642 XSETFLOAT (val, float_free_list);
2643 float_free_list = float_free_list->u.chain;
2645 else
2647 if (float_block_index == FLOAT_BLOCK_SIZE)
2649 struct float_block *new
2650 = lisp_align_malloc (sizeof *new, MEM_TYPE_FLOAT);
2651 new->next = float_block;
2652 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2653 float_block = new;
2654 float_block_index = 0;
2655 total_free_floats += FLOAT_BLOCK_SIZE;
2657 XSETFLOAT (val, &float_block->floats[float_block_index]);
2658 float_block_index++;
2661 MALLOC_UNBLOCK_INPUT;
2663 XFLOAT_INIT (val, float_value);
2664 eassert (!FLOAT_MARKED_P (XFLOAT (val)));
2665 consing_since_gc += sizeof (struct Lisp_Float);
2666 floats_consed++;
2667 total_free_floats--;
2668 return val;
2673 /***********************************************************************
2674 Cons Allocation
2675 ***********************************************************************/
2677 /* We store cons cells inside of cons_blocks, allocating a new
2678 cons_block with malloc whenever necessary. Cons cells reclaimed by
2679 GC are put on a free list to be reallocated before allocating
2680 any new cons cells from the latest cons_block. */
2682 #define CONS_BLOCK_SIZE \
2683 (((BLOCK_BYTES - sizeof (struct cons_block *) \
2684 /* The compiler might add padding at the end. */ \
2685 - (sizeof (struct Lisp_Cons) - sizeof (bits_word))) * CHAR_BIT) \
2686 / (sizeof (struct Lisp_Cons) * CHAR_BIT + 1))
2688 #define CONS_BLOCK(fptr) \
2689 ((struct cons_block *) ((uintptr_t) (fptr) & ~(BLOCK_ALIGN - 1)))
2691 #define CONS_INDEX(fptr) \
2692 (((uintptr_t) (fptr) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Cons))
2694 struct cons_block
2696 /* Place `conses' at the beginning, to ease up CONS_INDEX's job. */
2697 struct Lisp_Cons conses[CONS_BLOCK_SIZE];
2698 bits_word gcmarkbits[1 + CONS_BLOCK_SIZE / BITS_PER_BITS_WORD];
2699 struct cons_block *next;
2702 #define CONS_MARKED_P(fptr) \
2703 GETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2705 #define CONS_MARK(fptr) \
2706 SETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2708 #define CONS_UNMARK(fptr) \
2709 UNSETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2711 /* Current cons_block. */
2713 static struct cons_block *cons_block;
2715 /* Index of first unused Lisp_Cons in the current block. */
2717 static int cons_block_index = CONS_BLOCK_SIZE;
2719 /* Free-list of Lisp_Cons structures. */
2721 static struct Lisp_Cons *cons_free_list;
2723 /* Explicitly free a cons cell by putting it on the free-list. */
2725 void
2726 free_cons (struct Lisp_Cons *ptr)
2728 ptr->u.chain = cons_free_list;
2729 ptr->car = Vdead;
2730 cons_free_list = ptr;
2731 consing_since_gc -= sizeof *ptr;
2732 total_free_conses++;
2735 DEFUN ("cons", Fcons, Scons, 2, 2, 0,
2736 doc: /* Create a new cons, give it CAR and CDR as components, and return it. */)
2737 (Lisp_Object car, Lisp_Object cdr)
2739 register Lisp_Object val;
2741 MALLOC_BLOCK_INPUT;
2743 if (cons_free_list)
2745 /* We use the cdr for chaining the free list
2746 so that we won't use the same field that has the mark bit. */
2747 XSETCONS (val, cons_free_list);
2748 cons_free_list = cons_free_list->u.chain;
2750 else
2752 if (cons_block_index == CONS_BLOCK_SIZE)
2754 struct cons_block *new
2755 = lisp_align_malloc (sizeof *new, MEM_TYPE_CONS);
2756 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2757 new->next = cons_block;
2758 cons_block = new;
2759 cons_block_index = 0;
2760 total_free_conses += CONS_BLOCK_SIZE;
2762 XSETCONS (val, &cons_block->conses[cons_block_index]);
2763 cons_block_index++;
2766 MALLOC_UNBLOCK_INPUT;
2768 XSETCAR (val, car);
2769 XSETCDR (val, cdr);
2770 eassert (!CONS_MARKED_P (XCONS (val)));
2771 consing_since_gc += sizeof (struct Lisp_Cons);
2772 total_free_conses--;
2773 cons_cells_consed++;
2774 return val;
2777 #ifdef GC_CHECK_CONS_LIST
2778 /* Get an error now if there's any junk in the cons free list. */
2779 void
2780 check_cons_list (void)
2782 struct Lisp_Cons *tail = cons_free_list;
2784 while (tail)
2785 tail = tail->u.chain;
2787 #endif
2789 /* Make a list of 1, 2, 3, 4 or 5 specified objects. */
2791 Lisp_Object
2792 list1 (Lisp_Object arg1)
2794 return Fcons (arg1, Qnil);
2797 Lisp_Object
2798 list2 (Lisp_Object arg1, Lisp_Object arg2)
2800 return Fcons (arg1, Fcons (arg2, Qnil));
2804 Lisp_Object
2805 list3 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3)
2807 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Qnil)));
2811 Lisp_Object
2812 list4 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4)
2814 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4, Qnil))));
2818 Lisp_Object
2819 list5 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5)
2821 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4,
2822 Fcons (arg5, Qnil)))));
2825 /* Make a list of COUNT Lisp_Objects, where ARG is the
2826 first one. Allocate conses from pure space if TYPE
2827 is CONSTYPE_PURE, or allocate as usual if type is CONSTYPE_HEAP. */
2829 Lisp_Object
2830 listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...)
2832 Lisp_Object (*cons) (Lisp_Object, Lisp_Object);
2833 switch (type)
2835 case CONSTYPE_PURE: cons = pure_cons; break;
2836 case CONSTYPE_HEAP: cons = Fcons; break;
2837 default: emacs_abort ();
2840 eassume (0 < count);
2841 Lisp_Object val = cons (arg, Qnil);
2842 Lisp_Object tail = val;
2844 va_list ap;
2845 va_start (ap, arg);
2846 for (ptrdiff_t i = 1; i < count; i++)
2848 Lisp_Object elem = cons (va_arg (ap, Lisp_Object), Qnil);
2849 XSETCDR (tail, elem);
2850 tail = elem;
2852 va_end (ap);
2854 return val;
2857 DEFUN ("list", Flist, Slist, 0, MANY, 0,
2858 doc: /* Return a newly created list with specified arguments as elements.
2859 Any number of arguments, even zero arguments, are allowed.
2860 usage: (list &rest OBJECTS) */)
2861 (ptrdiff_t nargs, Lisp_Object *args)
2863 register Lisp_Object val;
2864 val = Qnil;
2866 while (nargs > 0)
2868 nargs--;
2869 val = Fcons (args[nargs], val);
2871 return val;
2875 DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
2876 doc: /* Return a newly created list of length LENGTH, with each element being INIT. */)
2877 (register Lisp_Object length, Lisp_Object init)
2879 register Lisp_Object val;
2880 register EMACS_INT size;
2882 CHECK_NATNUM (length);
2883 size = XFASTINT (length);
2885 val = Qnil;
2886 while (size > 0)
2888 val = Fcons (init, val);
2889 --size;
2891 if (size > 0)
2893 val = Fcons (init, val);
2894 --size;
2896 if (size > 0)
2898 val = Fcons (init, val);
2899 --size;
2901 if (size > 0)
2903 val = Fcons (init, val);
2904 --size;
2906 if (size > 0)
2908 val = Fcons (init, val);
2909 --size;
2915 QUIT;
2918 return val;
2923 /***********************************************************************
2924 Vector Allocation
2925 ***********************************************************************/
2927 /* Sometimes a vector's contents are merely a pointer internally used
2928 in vector allocation code. On the rare platforms where a null
2929 pointer cannot be tagged, represent it with a Lisp 0.
2930 Usually you don't want to touch this. */
2932 static struct Lisp_Vector *
2933 next_vector (struct Lisp_Vector *v)
2935 return XUNTAG (v->contents[0], Lisp_Int0);
2938 static void
2939 set_next_vector (struct Lisp_Vector *v, struct Lisp_Vector *p)
2941 v->contents[0] = make_lisp_ptr (p, Lisp_Int0);
2944 /* This value is balanced well enough to avoid too much internal overhead
2945 for the most common cases; it's not required to be a power of two, but
2946 it's expected to be a mult-of-ROUNDUP_SIZE (see below). */
2948 #define VECTOR_BLOCK_SIZE 4096
2950 enum
2952 /* Alignment of struct Lisp_Vector objects. */
2953 vector_alignment = COMMON_MULTIPLE (FLEXALIGNOF (struct Lisp_Vector),
2954 GCALIGNMENT),
2956 /* Vector size requests are a multiple of this. */
2957 roundup_size = COMMON_MULTIPLE (vector_alignment, word_size)
2960 /* Verify assumptions described above. */
2961 verify (VECTOR_BLOCK_SIZE % roundup_size == 0);
2962 verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS));
2964 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */
2965 #define vroundup_ct(x) ROUNDUP (x, roundup_size)
2966 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */
2967 #define vroundup(x) (eassume ((x) >= 0), vroundup_ct (x))
2969 /* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */
2971 #define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup_ct (sizeof (void *)))
2973 /* Size of the minimal vector allocated from block. */
2975 #define VBLOCK_BYTES_MIN vroundup_ct (header_size + sizeof (Lisp_Object))
2977 /* Size of the largest vector allocated from block. */
2979 #define VBLOCK_BYTES_MAX \
2980 vroundup ((VECTOR_BLOCK_BYTES / 2) - word_size)
2982 /* We maintain one free list for each possible block-allocated
2983 vector size, and this is the number of free lists we have. */
2985 #define VECTOR_MAX_FREE_LIST_INDEX \
2986 ((VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN) / roundup_size + 1)
2988 /* Common shortcut to advance vector pointer over a block data. */
2990 #define ADVANCE(v, nbytes) ((struct Lisp_Vector *) ((char *) (v) + (nbytes)))
2992 /* Common shortcut to calculate NBYTES-vector index in VECTOR_FREE_LISTS. */
2994 #define VINDEX(nbytes) (((nbytes) - VBLOCK_BYTES_MIN) / roundup_size)
2996 /* Common shortcut to setup vector on a free list. */
2998 #define SETUP_ON_FREE_LIST(v, nbytes, tmp) \
2999 do { \
3000 (tmp) = ((nbytes - header_size) / word_size); \
3001 XSETPVECTYPESIZE (v, PVEC_FREE, 0, (tmp)); \
3002 eassert ((nbytes) % roundup_size == 0); \
3003 (tmp) = VINDEX (nbytes); \
3004 eassert ((tmp) < VECTOR_MAX_FREE_LIST_INDEX); \
3005 set_next_vector (v, vector_free_lists[tmp]); \
3006 vector_free_lists[tmp] = (v); \
3007 total_free_vector_slots += (nbytes) / word_size; \
3008 } while (0)
3010 /* This internal type is used to maintain the list of large vectors
3011 which are allocated at their own, e.g. outside of vector blocks.
3013 struct large_vector itself cannot contain a struct Lisp_Vector, as
3014 the latter contains a flexible array member and C99 does not allow
3015 such structs to be nested. Instead, each struct large_vector
3016 object LV is followed by a struct Lisp_Vector, which is at offset
3017 large_vector_offset from LV, and whose address is therefore
3018 large_vector_vec (&LV). */
3020 struct large_vector
3022 struct large_vector *next;
3025 enum
3027 large_vector_offset = ROUNDUP (sizeof (struct large_vector), vector_alignment)
3030 static struct Lisp_Vector *
3031 large_vector_vec (struct large_vector *p)
3033 return (struct Lisp_Vector *) ((char *) p + large_vector_offset);
3036 /* This internal type is used to maintain an underlying storage
3037 for small vectors. */
3039 struct vector_block
3041 char data[VECTOR_BLOCK_BYTES];
3042 struct vector_block *next;
3045 /* Chain of vector blocks. */
3047 static struct vector_block *vector_blocks;
3049 /* Vector free lists, where NTH item points to a chain of free
3050 vectors of the same NBYTES size, so NTH == VINDEX (NBYTES). */
3052 static struct Lisp_Vector *vector_free_lists[VECTOR_MAX_FREE_LIST_INDEX];
3054 /* Singly-linked list of large vectors. */
3056 static struct large_vector *large_vectors;
3058 /* The only vector with 0 slots, allocated from pure space. */
3060 Lisp_Object zero_vector;
3062 /* Number of live vectors. */
3064 static EMACS_INT total_vectors;
3066 /* Total size of live and free vectors, in Lisp_Object units. */
3068 static EMACS_INT total_vector_slots, total_free_vector_slots;
3070 /* Get a new vector block. */
3072 static struct vector_block *
3073 allocate_vector_block (void)
3075 struct vector_block *block = xmalloc (sizeof *block);
3077 #ifndef GC_MALLOC_CHECK
3078 mem_insert (block->data, block->data + VECTOR_BLOCK_BYTES,
3079 MEM_TYPE_VECTOR_BLOCK);
3080 #endif
3082 block->next = vector_blocks;
3083 vector_blocks = block;
3084 return block;
3087 /* Called once to initialize vector allocation. */
3089 static void
3090 init_vectors (void)
3092 zero_vector = make_pure_vector (0);
3095 /* Allocate vector from a vector block. */
3097 static struct Lisp_Vector *
3098 allocate_vector_from_block (size_t nbytes)
3100 struct Lisp_Vector *vector;
3101 struct vector_block *block;
3102 size_t index, restbytes;
3104 eassert (VBLOCK_BYTES_MIN <= nbytes && nbytes <= VBLOCK_BYTES_MAX);
3105 eassert (nbytes % roundup_size == 0);
3107 /* First, try to allocate from a free list
3108 containing vectors of the requested size. */
3109 index = VINDEX (nbytes);
3110 if (vector_free_lists[index])
3112 vector = vector_free_lists[index];
3113 vector_free_lists[index] = next_vector (vector);
3114 total_free_vector_slots -= nbytes / word_size;
3115 return vector;
3118 /* Next, check free lists containing larger vectors. Since
3119 we will split the result, we should have remaining space
3120 large enough to use for one-slot vector at least. */
3121 for (index = VINDEX (nbytes + VBLOCK_BYTES_MIN);
3122 index < VECTOR_MAX_FREE_LIST_INDEX; index++)
3123 if (vector_free_lists[index])
3125 /* This vector is larger than requested. */
3126 vector = vector_free_lists[index];
3127 vector_free_lists[index] = next_vector (vector);
3128 total_free_vector_slots -= nbytes / word_size;
3130 /* Excess bytes are used for the smaller vector,
3131 which should be set on an appropriate free list. */
3132 restbytes = index * roundup_size + VBLOCK_BYTES_MIN - nbytes;
3133 eassert (restbytes % roundup_size == 0);
3134 SETUP_ON_FREE_LIST (ADVANCE (vector, nbytes), restbytes, index);
3135 return vector;
3138 /* Finally, need a new vector block. */
3139 block = allocate_vector_block ();
3141 /* New vector will be at the beginning of this block. */
3142 vector = (struct Lisp_Vector *) block->data;
3144 /* If the rest of space from this block is large enough
3145 for one-slot vector at least, set up it on a free list. */
3146 restbytes = VECTOR_BLOCK_BYTES - nbytes;
3147 if (restbytes >= VBLOCK_BYTES_MIN)
3149 eassert (restbytes % roundup_size == 0);
3150 SETUP_ON_FREE_LIST (ADVANCE (vector, nbytes), restbytes, index);
3152 return vector;
3155 /* Nonzero if VECTOR pointer is valid pointer inside BLOCK. */
3157 #define VECTOR_IN_BLOCK(vector, block) \
3158 ((char *) (vector) <= (block)->data \
3159 + VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN)
3161 /* Return the memory footprint of V in bytes. */
3163 static ptrdiff_t
3164 vector_nbytes (struct Lisp_Vector *v)
3166 ptrdiff_t size = v->header.size & ~ARRAY_MARK_FLAG;
3167 ptrdiff_t nwords;
3169 if (size & PSEUDOVECTOR_FLAG)
3171 if (PSEUDOVECTOR_TYPEP (&v->header, PVEC_BOOL_VECTOR))
3173 struct Lisp_Bool_Vector *bv = (struct Lisp_Bool_Vector *) v;
3174 ptrdiff_t word_bytes = (bool_vector_words (bv->size)
3175 * sizeof (bits_word));
3176 ptrdiff_t boolvec_bytes = bool_header_size + word_bytes;
3177 verify (header_size <= bool_header_size);
3178 nwords = (boolvec_bytes - header_size + word_size - 1) / word_size;
3180 else
3181 nwords = ((size & PSEUDOVECTOR_SIZE_MASK)
3182 + ((size & PSEUDOVECTOR_REST_MASK)
3183 >> PSEUDOVECTOR_SIZE_BITS));
3185 else
3186 nwords = size;
3187 return vroundup (header_size + word_size * nwords);
3190 /* Release extra resources still in use by VECTOR, which may be any
3191 vector-like object. For now, this is used just to free data in
3192 font objects. */
3194 static void
3195 cleanup_vector (struct Lisp_Vector *vector)
3197 detect_suspicious_free (vector);
3198 if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT)
3199 && ((vector->header.size & PSEUDOVECTOR_SIZE_MASK)
3200 == FONT_OBJECT_MAX))
3202 struct font_driver *drv = ((struct font *) vector)->driver;
3204 /* The font driver might sometimes be NULL, e.g. if Emacs was
3205 interrupted before it had time to set it up. */
3206 if (drv)
3208 /* Attempt to catch subtle bugs like Bug#16140. */
3209 eassert (valid_font_driver (drv));
3210 drv->close ((struct font *) vector);
3215 /* Reclaim space used by unmarked vectors. */
3217 NO_INLINE /* For better stack traces */
3218 static void
3219 sweep_vectors (void)
3221 struct vector_block *block, **bprev = &vector_blocks;
3222 struct large_vector *lv, **lvprev = &large_vectors;
3223 struct Lisp_Vector *vector, *next;
3225 total_vectors = total_vector_slots = total_free_vector_slots = 0;
3226 memset (vector_free_lists, 0, sizeof (vector_free_lists));
3228 /* Looking through vector blocks. */
3230 for (block = vector_blocks; block; block = *bprev)
3232 bool free_this_block = 0;
3233 ptrdiff_t nbytes;
3235 for (vector = (struct Lisp_Vector *) block->data;
3236 VECTOR_IN_BLOCK (vector, block); vector = next)
3238 if (VECTOR_MARKED_P (vector))
3240 VECTOR_UNMARK (vector);
3241 total_vectors++;
3242 nbytes = vector_nbytes (vector);
3243 total_vector_slots += nbytes / word_size;
3244 next = ADVANCE (vector, nbytes);
3246 else
3248 ptrdiff_t total_bytes;
3250 cleanup_vector (vector);
3251 nbytes = vector_nbytes (vector);
3252 total_bytes = nbytes;
3253 next = ADVANCE (vector, nbytes);
3255 /* While NEXT is not marked, try to coalesce with VECTOR,
3256 thus making VECTOR of the largest possible size. */
3258 while (VECTOR_IN_BLOCK (next, block))
3260 if (VECTOR_MARKED_P (next))
3261 break;
3262 cleanup_vector (next);
3263 nbytes = vector_nbytes (next);
3264 total_bytes += nbytes;
3265 next = ADVANCE (next, nbytes);
3268 eassert (total_bytes % roundup_size == 0);
3270 if (vector == (struct Lisp_Vector *) block->data
3271 && !VECTOR_IN_BLOCK (next, block))
3272 /* This block should be freed because all of its
3273 space was coalesced into the only free vector. */
3274 free_this_block = 1;
3275 else
3277 size_t tmp;
3278 SETUP_ON_FREE_LIST (vector, total_bytes, tmp);
3283 if (free_this_block)
3285 *bprev = block->next;
3286 #ifndef GC_MALLOC_CHECK
3287 mem_delete (mem_find (block->data));
3288 #endif
3289 xfree (block);
3291 else
3292 bprev = &block->next;
3295 /* Sweep large vectors. */
3297 for (lv = large_vectors; lv; lv = *lvprev)
3299 vector = large_vector_vec (lv);
3300 if (VECTOR_MARKED_P (vector))
3302 VECTOR_UNMARK (vector);
3303 total_vectors++;
3304 if (vector->header.size & PSEUDOVECTOR_FLAG)
3306 /* All non-bool pseudovectors are small enough to be allocated
3307 from vector blocks. This code should be redesigned if some
3308 pseudovector type grows beyond VBLOCK_BYTES_MAX. */
3309 eassert (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR));
3310 total_vector_slots += vector_nbytes (vector) / word_size;
3312 else
3313 total_vector_slots
3314 += header_size / word_size + vector->header.size;
3315 lvprev = &lv->next;
3317 else
3319 *lvprev = lv->next;
3320 lisp_free (lv);
3325 /* Value is a pointer to a newly allocated Lisp_Vector structure
3326 with room for LEN Lisp_Objects. */
3328 static struct Lisp_Vector *
3329 allocate_vectorlike (ptrdiff_t len)
3331 struct Lisp_Vector *p;
3333 MALLOC_BLOCK_INPUT;
3335 if (len == 0)
3336 p = XVECTOR (zero_vector);
3337 else
3339 size_t nbytes = header_size + len * word_size;
3341 #ifdef DOUG_LEA_MALLOC
3342 if (!mmap_lisp_allowed_p ())
3343 mallopt (M_MMAP_MAX, 0);
3344 #endif
3346 if (nbytes <= VBLOCK_BYTES_MAX)
3347 p = allocate_vector_from_block (vroundup (nbytes));
3348 else
3350 struct large_vector *lv
3351 = lisp_malloc ((large_vector_offset + header_size
3352 + len * word_size),
3353 MEM_TYPE_VECTORLIKE);
3354 lv->next = large_vectors;
3355 large_vectors = lv;
3356 p = large_vector_vec (lv);
3359 #ifdef DOUG_LEA_MALLOC
3360 if (!mmap_lisp_allowed_p ())
3361 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
3362 #endif
3364 if (find_suspicious_object_in_range (p, (char *) p + nbytes))
3365 emacs_abort ();
3367 consing_since_gc += nbytes;
3368 vector_cells_consed += len;
3371 MALLOC_UNBLOCK_INPUT;
3373 return p;
3377 /* Allocate a vector with LEN slots. */
3379 struct Lisp_Vector *
3380 allocate_vector (EMACS_INT len)
3382 struct Lisp_Vector *v;
3383 ptrdiff_t nbytes_max = min (PTRDIFF_MAX, SIZE_MAX);
3385 if (min ((nbytes_max - header_size) / word_size, MOST_POSITIVE_FIXNUM) < len)
3386 memory_full (SIZE_MAX);
3387 v = allocate_vectorlike (len);
3388 if (len)
3389 v->header.size = len;
3390 return v;
3394 /* Allocate other vector-like structures. */
3396 struct Lisp_Vector *
3397 allocate_pseudovector (int memlen, int lisplen,
3398 int zerolen, enum pvec_type tag)
3400 struct Lisp_Vector *v = allocate_vectorlike (memlen);
3402 /* Catch bogus values. */
3403 eassert (0 <= tag && tag <= PVEC_FONT);
3404 eassert (0 <= lisplen && lisplen <= zerolen && zerolen <= memlen);
3405 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
3406 eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
3408 /* Only the first LISPLEN slots will be traced normally by the GC. */
3409 memclear (v->contents, zerolen * word_size);
3410 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
3411 return v;
3414 struct buffer *
3415 allocate_buffer (void)
3417 struct buffer *b = lisp_malloc (sizeof *b, MEM_TYPE_BUFFER);
3419 BUFFER_PVEC_INIT (b);
3420 /* Put B on the chain of all buffers including killed ones. */
3421 b->next = all_buffers;
3422 all_buffers = b;
3423 /* Note that the rest fields of B are not initialized. */
3424 return b;
3427 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
3428 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
3429 See also the function `vector'. */)
3430 (Lisp_Object length, Lisp_Object init)
3432 CHECK_NATNUM (length);
3433 struct Lisp_Vector *p = allocate_vector (XFASTINT (length));
3434 for (ptrdiff_t i = 0; i < XFASTINT (length); i++)
3435 p->contents[i] = init;
3436 return make_lisp_ptr (p, Lisp_Vectorlike);
3439 DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
3440 doc: /* Return a newly created vector with specified arguments as elements.
3441 Any number of arguments, even zero arguments, are allowed.
3442 usage: (vector &rest OBJECTS) */)
3443 (ptrdiff_t nargs, Lisp_Object *args)
3445 Lisp_Object val = make_uninit_vector (nargs);
3446 struct Lisp_Vector *p = XVECTOR (val);
3447 memcpy (p->contents, args, nargs * sizeof *args);
3448 return val;
3451 void
3452 make_byte_code (struct Lisp_Vector *v)
3454 /* Don't allow the global zero_vector to become a byte code object. */
3455 eassert (0 < v->header.size);
3457 if (v->header.size > 1 && STRINGP (v->contents[1])
3458 && STRING_MULTIBYTE (v->contents[1]))
3459 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the
3460 earlier because they produced a raw 8-bit string for byte-code
3461 and now such a byte-code string is loaded as multibyte while
3462 raw 8-bit characters converted to multibyte form. Thus, now we
3463 must convert them back to the original unibyte form. */
3464 v->contents[1] = Fstring_as_unibyte (v->contents[1]);
3465 XSETPVECTYPE (v, PVEC_COMPILED);
3468 DEFUN ("make-byte-code", Fmake_byte_code, Smake_byte_code, 4, MANY, 0,
3469 doc: /* Create a byte-code object with specified arguments as elements.
3470 The arguments should be the ARGLIST, bytecode-string BYTE-CODE, constant
3471 vector CONSTANTS, maximum stack size DEPTH, (optional) DOCSTRING,
3472 and (optional) INTERACTIVE-SPEC.
3473 The first four arguments are required; at most six have any
3474 significance.
3475 The ARGLIST can be either like the one of `lambda', in which case the arguments
3476 will be dynamically bound before executing the byte code, or it can be an
3477 integer of the form NNNNNNNRMMMMMMM where the 7bit MMMMMMM specifies the
3478 minimum number of arguments, the 7-bit NNNNNNN specifies the maximum number
3479 of arguments (ignoring &rest) and the R bit specifies whether there is a &rest
3480 argument to catch the left-over arguments. If such an integer is used, the
3481 arguments will not be dynamically bound but will be instead pushed on the
3482 stack before executing the byte-code.
3483 usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS) */)
3484 (ptrdiff_t nargs, Lisp_Object *args)
3486 Lisp_Object val = make_uninit_vector (nargs);
3487 struct Lisp_Vector *p = XVECTOR (val);
3489 /* We used to purecopy everything here, if purify-flag was set. This worked
3490 OK for Emacs-23, but with Emacs-24's lexical binding code, it can be
3491 dangerous, since make-byte-code is used during execution to build
3492 closures, so any closure built during the preload phase would end up
3493 copied into pure space, including its free variables, which is sometimes
3494 just wasteful and other times plainly wrong (e.g. those free vars may want
3495 to be setcar'd). */
3497 memcpy (p->contents, args, nargs * sizeof *args);
3498 make_byte_code (p);
3499 XSETCOMPILED (val, p);
3500 return val;
3505 /***********************************************************************
3506 Symbol Allocation
3507 ***********************************************************************/
3509 /* Like struct Lisp_Symbol, but padded so that the size is a multiple
3510 of the required alignment. */
3512 union aligned_Lisp_Symbol
3514 struct Lisp_Symbol s;
3515 unsigned char c[(sizeof (struct Lisp_Symbol) + GCALIGNMENT - 1)
3516 & -GCALIGNMENT];
3519 /* Each symbol_block is just under 1020 bytes long, since malloc
3520 really allocates in units of powers of two and uses 4 bytes for its
3521 own overhead. */
3523 #define SYMBOL_BLOCK_SIZE \
3524 ((1020 - sizeof (struct symbol_block *)) / sizeof (union aligned_Lisp_Symbol))
3526 struct symbol_block
3528 /* Place `symbols' first, to preserve alignment. */
3529 union aligned_Lisp_Symbol symbols[SYMBOL_BLOCK_SIZE];
3530 struct symbol_block *next;
3533 /* Current symbol block and index of first unused Lisp_Symbol
3534 structure in it. */
3536 static struct symbol_block *symbol_block;
3537 static int symbol_block_index = SYMBOL_BLOCK_SIZE;
3538 /* Pointer to the first symbol_block that contains pinned symbols.
3539 Tests for 24.4 showed that at dump-time, Emacs contains about 15K symbols,
3540 10K of which are pinned (and all but 250 of them are interned in obarray),
3541 whereas a "typical session" has in the order of 30K symbols.
3542 `symbol_block_pinned' lets mark_pinned_symbols scan only 15K symbols rather
3543 than 30K to find the 10K symbols we need to mark. */
3544 static struct symbol_block *symbol_block_pinned;
3546 /* List of free symbols. */
3548 static struct Lisp_Symbol *symbol_free_list;
3550 static void
3551 set_symbol_name (Lisp_Object sym, Lisp_Object name)
3553 XSYMBOL (sym)->name = name;
3556 void
3557 init_symbol (Lisp_Object val, Lisp_Object name)
3559 struct Lisp_Symbol *p = XSYMBOL (val);
3560 set_symbol_name (val, name);
3561 set_symbol_plist (val, Qnil);
3562 p->redirect = SYMBOL_PLAINVAL;
3563 SET_SYMBOL_VAL (p, Qunbound);
3564 set_symbol_function (val, Qnil);
3565 set_symbol_next (val, NULL);
3566 p->gcmarkbit = false;
3567 p->interned = SYMBOL_UNINTERNED;
3568 p->constant = 0;
3569 p->declared_special = false;
3570 p->pinned = false;
3573 DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0,
3574 doc: /* Return a newly allocated uninterned symbol whose name is NAME.
3575 Its value is void, and its function definition and property list are nil. */)
3576 (Lisp_Object name)
3578 Lisp_Object val;
3580 CHECK_STRING (name);
3582 MALLOC_BLOCK_INPUT;
3584 if (symbol_free_list)
3586 XSETSYMBOL (val, symbol_free_list);
3587 symbol_free_list = symbol_free_list->next;
3589 else
3591 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
3593 struct symbol_block *new
3594 = lisp_malloc (sizeof *new, MEM_TYPE_SYMBOL);
3595 new->next = symbol_block;
3596 symbol_block = new;
3597 symbol_block_index = 0;
3598 total_free_symbols += SYMBOL_BLOCK_SIZE;
3600 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index].s);
3601 symbol_block_index++;
3604 MALLOC_UNBLOCK_INPUT;
3606 init_symbol (val, name);
3607 consing_since_gc += sizeof (struct Lisp_Symbol);
3608 symbols_consed++;
3609 total_free_symbols--;
3610 return val;
3615 /***********************************************************************
3616 Marker (Misc) Allocation
3617 ***********************************************************************/
3619 /* Like union Lisp_Misc, but padded so that its size is a multiple of
3620 the required alignment. */
3622 union aligned_Lisp_Misc
3624 union Lisp_Misc m;
3625 unsigned char c[(sizeof (union Lisp_Misc) + GCALIGNMENT - 1)
3626 & -GCALIGNMENT];
3629 /* Allocation of markers and other objects that share that structure.
3630 Works like allocation of conses. */
3632 #define MARKER_BLOCK_SIZE \
3633 ((1020 - sizeof (struct marker_block *)) / sizeof (union aligned_Lisp_Misc))
3635 struct marker_block
3637 /* Place `markers' first, to preserve alignment. */
3638 union aligned_Lisp_Misc markers[MARKER_BLOCK_SIZE];
3639 struct marker_block *next;
3642 static struct marker_block *marker_block;
3643 static int marker_block_index = MARKER_BLOCK_SIZE;
3645 static union Lisp_Misc *marker_free_list;
3647 /* Return a newly allocated Lisp_Misc object of specified TYPE. */
3649 static Lisp_Object
3650 allocate_misc (enum Lisp_Misc_Type type)
3652 Lisp_Object val;
3654 MALLOC_BLOCK_INPUT;
3656 if (marker_free_list)
3658 XSETMISC (val, marker_free_list);
3659 marker_free_list = marker_free_list->u_free.chain;
3661 else
3663 if (marker_block_index == MARKER_BLOCK_SIZE)
3665 struct marker_block *new = lisp_malloc (sizeof *new, MEM_TYPE_MISC);
3666 new->next = marker_block;
3667 marker_block = new;
3668 marker_block_index = 0;
3669 total_free_markers += MARKER_BLOCK_SIZE;
3671 XSETMISC (val, &marker_block->markers[marker_block_index].m);
3672 marker_block_index++;
3675 MALLOC_UNBLOCK_INPUT;
3677 --total_free_markers;
3678 consing_since_gc += sizeof (union Lisp_Misc);
3679 misc_objects_consed++;
3680 XMISCANY (val)->type = type;
3681 XMISCANY (val)->gcmarkbit = 0;
3682 return val;
3685 /* Free a Lisp_Misc object. */
3687 void
3688 free_misc (Lisp_Object misc)
3690 XMISCANY (misc)->type = Lisp_Misc_Free;
3691 XMISC (misc)->u_free.chain = marker_free_list;
3692 marker_free_list = XMISC (misc);
3693 consing_since_gc -= sizeof (union Lisp_Misc);
3694 total_free_markers++;
3697 /* Verify properties of Lisp_Save_Value's representation
3698 that are assumed here and elsewhere. */
3700 verify (SAVE_UNUSED == 0);
3701 verify (((SAVE_INTEGER | SAVE_POINTER | SAVE_FUNCPOINTER | SAVE_OBJECT)
3702 >> SAVE_SLOT_BITS)
3703 == 0);
3705 /* Return Lisp_Save_Value objects for the various combinations
3706 that callers need. */
3708 Lisp_Object
3709 make_save_int_int_int (ptrdiff_t a, ptrdiff_t b, ptrdiff_t c)
3711 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3712 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3713 p->save_type = SAVE_TYPE_INT_INT_INT;
3714 p->data[0].integer = a;
3715 p->data[1].integer = b;
3716 p->data[2].integer = c;
3717 return val;
3720 Lisp_Object
3721 make_save_obj_obj_obj_obj (Lisp_Object a, Lisp_Object b, Lisp_Object c,
3722 Lisp_Object d)
3724 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3725 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3726 p->save_type = SAVE_TYPE_OBJ_OBJ_OBJ_OBJ;
3727 p->data[0].object = a;
3728 p->data[1].object = b;
3729 p->data[2].object = c;
3730 p->data[3].object = d;
3731 return val;
3734 Lisp_Object
3735 make_save_ptr (void *a)
3737 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3738 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3739 p->save_type = SAVE_POINTER;
3740 p->data[0].pointer = a;
3741 return val;
3744 Lisp_Object
3745 make_save_ptr_int (void *a, ptrdiff_t b)
3747 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3748 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3749 p->save_type = SAVE_TYPE_PTR_INT;
3750 p->data[0].pointer = a;
3751 p->data[1].integer = b;
3752 return val;
3755 Lisp_Object
3756 make_save_ptr_ptr (void *a, void *b)
3758 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3759 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3760 p->save_type = SAVE_TYPE_PTR_PTR;
3761 p->data[0].pointer = a;
3762 p->data[1].pointer = b;
3763 return val;
3766 Lisp_Object
3767 make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c)
3769 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3770 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3771 p->save_type = SAVE_TYPE_FUNCPTR_PTR_OBJ;
3772 p->data[0].funcpointer = a;
3773 p->data[1].pointer = b;
3774 p->data[2].object = c;
3775 return val;
3778 /* Return a Lisp_Save_Value object that represents an array A
3779 of N Lisp objects. */
3781 Lisp_Object
3782 make_save_memory (Lisp_Object *a, ptrdiff_t n)
3784 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3785 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3786 p->save_type = SAVE_TYPE_MEMORY;
3787 p->data[0].pointer = a;
3788 p->data[1].integer = n;
3789 return val;
3792 /* Free a Lisp_Save_Value object. Do not use this function
3793 if SAVE contains pointer other than returned by xmalloc. */
3795 void
3796 free_save_value (Lisp_Object save)
3798 xfree (XSAVE_POINTER (save, 0));
3799 free_misc (save);
3802 /* Return a Lisp_Misc_Overlay object with specified START, END and PLIST. */
3804 Lisp_Object
3805 build_overlay (Lisp_Object start, Lisp_Object end, Lisp_Object plist)
3807 register Lisp_Object overlay;
3809 overlay = allocate_misc (Lisp_Misc_Overlay);
3810 OVERLAY_START (overlay) = start;
3811 OVERLAY_END (overlay) = end;
3812 set_overlay_plist (overlay, plist);
3813 XOVERLAY (overlay)->next = NULL;
3814 return overlay;
3817 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3818 doc: /* Return a newly allocated marker which does not point at any place. */)
3819 (void)
3821 register Lisp_Object val;
3822 register struct Lisp_Marker *p;
3824 val = allocate_misc (Lisp_Misc_Marker);
3825 p = XMARKER (val);
3826 p->buffer = 0;
3827 p->bytepos = 0;
3828 p->charpos = 0;
3829 p->next = NULL;
3830 p->insertion_type = 0;
3831 p->need_adjustment = 0;
3832 return val;
3835 /* Return a newly allocated marker which points into BUF
3836 at character position CHARPOS and byte position BYTEPOS. */
3838 Lisp_Object
3839 build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos)
3841 Lisp_Object obj;
3842 struct Lisp_Marker *m;
3844 /* No dead buffers here. */
3845 eassert (BUFFER_LIVE_P (buf));
3847 /* Every character is at least one byte. */
3848 eassert (charpos <= bytepos);
3850 obj = allocate_misc (Lisp_Misc_Marker);
3851 m = XMARKER (obj);
3852 m->buffer = buf;
3853 m->charpos = charpos;
3854 m->bytepos = bytepos;
3855 m->insertion_type = 0;
3856 m->need_adjustment = 0;
3857 m->next = BUF_MARKERS (buf);
3858 BUF_MARKERS (buf) = m;
3859 return obj;
3862 /* Put MARKER back on the free list after using it temporarily. */
3864 void
3865 free_marker (Lisp_Object marker)
3867 unchain_marker (XMARKER (marker));
3868 free_misc (marker);
3872 /* Return a newly created vector or string with specified arguments as
3873 elements. If all the arguments are characters that can fit
3874 in a string of events, make a string; otherwise, make a vector.
3876 Any number of arguments, even zero arguments, are allowed. */
3878 Lisp_Object
3879 make_event_array (ptrdiff_t nargs, Lisp_Object *args)
3881 ptrdiff_t i;
3883 for (i = 0; i < nargs; i++)
3884 /* The things that fit in a string
3885 are characters that are in 0...127,
3886 after discarding the meta bit and all the bits above it. */
3887 if (!INTEGERP (args[i])
3888 || (XINT (args[i]) & ~(-CHAR_META)) >= 0200)
3889 return Fvector (nargs, args);
3891 /* Since the loop exited, we know that all the things in it are
3892 characters, so we can make a string. */
3894 Lisp_Object result;
3896 result = Fmake_string (make_number (nargs), make_number (0));
3897 for (i = 0; i < nargs; i++)
3899 SSET (result, i, XINT (args[i]));
3900 /* Move the meta bit to the right place for a string char. */
3901 if (XINT (args[i]) & CHAR_META)
3902 SSET (result, i, SREF (result, i) | 0x80);
3905 return result;
3909 #ifdef HAVE_MODULES
3910 /* Create a new module user ptr object. */
3911 Lisp_Object
3912 make_user_ptr (void (*finalizer) (void *), void *p)
3914 Lisp_Object obj;
3915 struct Lisp_User_Ptr *uptr;
3917 obj = allocate_misc (Lisp_Misc_User_Ptr);
3918 uptr = XUSER_PTR (obj);
3919 uptr->finalizer = finalizer;
3920 uptr->p = p;
3921 return obj;
3924 #endif
3926 static void
3927 init_finalizer_list (struct Lisp_Finalizer *head)
3929 head->prev = head->next = head;
3932 /* Insert FINALIZER before ELEMENT. */
3934 static void
3935 finalizer_insert (struct Lisp_Finalizer *element,
3936 struct Lisp_Finalizer *finalizer)
3938 eassert (finalizer->prev == NULL);
3939 eassert (finalizer->next == NULL);
3940 finalizer->next = element;
3941 finalizer->prev = element->prev;
3942 finalizer->prev->next = finalizer;
3943 element->prev = finalizer;
3946 static void
3947 unchain_finalizer (struct Lisp_Finalizer *finalizer)
3949 if (finalizer->prev != NULL)
3951 eassert (finalizer->next != NULL);
3952 finalizer->prev->next = finalizer->next;
3953 finalizer->next->prev = finalizer->prev;
3954 finalizer->prev = finalizer->next = NULL;
3958 static void
3959 mark_finalizer_list (struct Lisp_Finalizer *head)
3961 for (struct Lisp_Finalizer *finalizer = head->next;
3962 finalizer != head;
3963 finalizer = finalizer->next)
3965 finalizer->base.gcmarkbit = true;
3966 mark_object (finalizer->function);
3970 /* Move doomed finalizers to list DEST from list SRC. A doomed
3971 finalizer is one that is not GC-reachable and whose
3972 finalizer->function is non-nil. */
3974 static void
3975 queue_doomed_finalizers (struct Lisp_Finalizer *dest,
3976 struct Lisp_Finalizer *src)
3978 struct Lisp_Finalizer *finalizer = src->next;
3979 while (finalizer != src)
3981 struct Lisp_Finalizer *next = finalizer->next;
3982 if (!finalizer->base.gcmarkbit && !NILP (finalizer->function))
3984 unchain_finalizer (finalizer);
3985 finalizer_insert (dest, finalizer);
3988 finalizer = next;
3992 static Lisp_Object
3993 run_finalizer_handler (Lisp_Object args)
3995 add_to_log ("finalizer failed: %S", args);
3996 return Qnil;
3999 static void
4000 run_finalizer_function (Lisp_Object function)
4002 ptrdiff_t count = SPECPDL_INDEX ();
4004 specbind (Qinhibit_quit, Qt);
4005 internal_condition_case_1 (call0, function, Qt, run_finalizer_handler);
4006 unbind_to (count, Qnil);
4009 static void
4010 run_finalizers (struct Lisp_Finalizer *finalizers)
4012 struct Lisp_Finalizer *finalizer;
4013 Lisp_Object function;
4015 while (finalizers->next != finalizers)
4017 finalizer = finalizers->next;
4018 eassert (finalizer->base.type == Lisp_Misc_Finalizer);
4019 unchain_finalizer (finalizer);
4020 function = finalizer->function;
4021 if (!NILP (function))
4023 finalizer->function = Qnil;
4024 run_finalizer_function (function);
4029 DEFUN ("make-finalizer", Fmake_finalizer, Smake_finalizer, 1, 1, 0,
4030 doc: /* Make a finalizer that will run FUNCTION.
4031 FUNCTION will be called after garbage collection when the returned
4032 finalizer object becomes unreachable. If the finalizer object is
4033 reachable only through references from finalizer objects, it does not
4034 count as reachable for the purpose of deciding whether to run
4035 FUNCTION. FUNCTION will be run once per finalizer object. */)
4036 (Lisp_Object function)
4038 Lisp_Object val = allocate_misc (Lisp_Misc_Finalizer);
4039 struct Lisp_Finalizer *finalizer = XFINALIZER (val);
4040 finalizer->function = function;
4041 finalizer->prev = finalizer->next = NULL;
4042 finalizer_insert (&finalizers, finalizer);
4043 return val;
4047 /************************************************************************
4048 Memory Full Handling
4049 ************************************************************************/
4052 /* Called if malloc (NBYTES) returns zero. If NBYTES == SIZE_MAX,
4053 there may have been size_t overflow so that malloc was never
4054 called, or perhaps malloc was invoked successfully but the
4055 resulting pointer had problems fitting into a tagged EMACS_INT. In
4056 either case this counts as memory being full even though malloc did
4057 not fail. */
4059 void
4060 memory_full (size_t nbytes)
4062 /* Do not go into hysterics merely because a large request failed. */
4063 bool enough_free_memory = 0;
4064 if (SPARE_MEMORY < nbytes)
4066 void *p;
4068 MALLOC_BLOCK_INPUT;
4069 p = malloc (SPARE_MEMORY);
4070 if (p)
4072 free (p);
4073 enough_free_memory = 1;
4075 MALLOC_UNBLOCK_INPUT;
4078 if (! enough_free_memory)
4080 int i;
4082 Vmemory_full = Qt;
4084 memory_full_cons_threshold = sizeof (struct cons_block);
4086 /* The first time we get here, free the spare memory. */
4087 for (i = 0; i < ARRAYELTS (spare_memory); i++)
4088 if (spare_memory[i])
4090 if (i == 0)
4091 free (spare_memory[i]);
4092 else if (i >= 1 && i <= 4)
4093 lisp_align_free (spare_memory[i]);
4094 else
4095 lisp_free (spare_memory[i]);
4096 spare_memory[i] = 0;
4100 /* This used to call error, but if we've run out of memory, we could
4101 get infinite recursion trying to build the string. */
4102 xsignal (Qnil, Vmemory_signal_data);
4105 /* If we released our reserve (due to running out of memory),
4106 and we have a fair amount free once again,
4107 try to set aside another reserve in case we run out once more.
4109 This is called when a relocatable block is freed in ralloc.c,
4110 and also directly from this file, in case we're not using ralloc.c. */
4112 void
4113 refill_memory_reserve (void)
4115 #if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
4116 if (spare_memory[0] == 0)
4117 spare_memory[0] = malloc (SPARE_MEMORY);
4118 if (spare_memory[1] == 0)
4119 spare_memory[1] = lisp_align_malloc (sizeof (struct cons_block),
4120 MEM_TYPE_SPARE);
4121 if (spare_memory[2] == 0)
4122 spare_memory[2] = lisp_align_malloc (sizeof (struct cons_block),
4123 MEM_TYPE_SPARE);
4124 if (spare_memory[3] == 0)
4125 spare_memory[3] = lisp_align_malloc (sizeof (struct cons_block),
4126 MEM_TYPE_SPARE);
4127 if (spare_memory[4] == 0)
4128 spare_memory[4] = lisp_align_malloc (sizeof (struct cons_block),
4129 MEM_TYPE_SPARE);
4130 if (spare_memory[5] == 0)
4131 spare_memory[5] = lisp_malloc (sizeof (struct string_block),
4132 MEM_TYPE_SPARE);
4133 if (spare_memory[6] == 0)
4134 spare_memory[6] = lisp_malloc (sizeof (struct string_block),
4135 MEM_TYPE_SPARE);
4136 if (spare_memory[0] && spare_memory[1] && spare_memory[5])
4137 Vmemory_full = Qnil;
4138 #endif
4141 /************************************************************************
4142 C Stack Marking
4143 ************************************************************************/
4145 /* Conservative C stack marking requires a method to identify possibly
4146 live Lisp objects given a pointer value. We do this by keeping
4147 track of blocks of Lisp data that are allocated in a red-black tree
4148 (see also the comment of mem_node which is the type of nodes in
4149 that tree). Function lisp_malloc adds information for an allocated
4150 block to the red-black tree with calls to mem_insert, and function
4151 lisp_free removes it with mem_delete. Functions live_string_p etc
4152 call mem_find to lookup information about a given pointer in the
4153 tree, and use that to determine if the pointer points to a Lisp
4154 object or not. */
4156 /* Initialize this part of alloc.c. */
4158 static void
4159 mem_init (void)
4161 mem_z.left = mem_z.right = MEM_NIL;
4162 mem_z.parent = NULL;
4163 mem_z.color = MEM_BLACK;
4164 mem_z.start = mem_z.end = NULL;
4165 mem_root = MEM_NIL;
4169 /* Value is a pointer to the mem_node containing START. Value is
4170 MEM_NIL if there is no node in the tree containing START. */
4172 static struct mem_node *
4173 mem_find (void *start)
4175 struct mem_node *p;
4177 if (start < min_heap_address || start > max_heap_address)
4178 return MEM_NIL;
4180 /* Make the search always successful to speed up the loop below. */
4181 mem_z.start = start;
4182 mem_z.end = (char *) start + 1;
4184 p = mem_root;
4185 while (start < p->start || start >= p->end)
4186 p = start < p->start ? p->left : p->right;
4187 return p;
4191 /* Insert a new node into the tree for a block of memory with start
4192 address START, end address END, and type TYPE. Value is a
4193 pointer to the node that was inserted. */
4195 static struct mem_node *
4196 mem_insert (void *start, void *end, enum mem_type type)
4198 struct mem_node *c, *parent, *x;
4200 if (min_heap_address == NULL || start < min_heap_address)
4201 min_heap_address = start;
4202 if (max_heap_address == NULL || end > max_heap_address)
4203 max_heap_address = end;
4205 /* See where in the tree a node for START belongs. In this
4206 particular application, it shouldn't happen that a node is already
4207 present. For debugging purposes, let's check that. */
4208 c = mem_root;
4209 parent = NULL;
4211 while (c != MEM_NIL)
4213 parent = c;
4214 c = start < c->start ? c->left : c->right;
4217 /* Create a new node. */
4218 #ifdef GC_MALLOC_CHECK
4219 x = malloc (sizeof *x);
4220 if (x == NULL)
4221 emacs_abort ();
4222 #else
4223 x = xmalloc (sizeof *x);
4224 #endif
4225 x->start = start;
4226 x->end = end;
4227 x->type = type;
4228 x->parent = parent;
4229 x->left = x->right = MEM_NIL;
4230 x->color = MEM_RED;
4232 /* Insert it as child of PARENT or install it as root. */
4233 if (parent)
4235 if (start < parent->start)
4236 parent->left = x;
4237 else
4238 parent->right = x;
4240 else
4241 mem_root = x;
4243 /* Re-establish red-black tree properties. */
4244 mem_insert_fixup (x);
4246 return x;
4250 /* Re-establish the red-black properties of the tree, and thereby
4251 balance the tree, after node X has been inserted; X is always red. */
4253 static void
4254 mem_insert_fixup (struct mem_node *x)
4256 while (x != mem_root && x->parent->color == MEM_RED)
4258 /* X is red and its parent is red. This is a violation of
4259 red-black tree property #3. */
4261 if (x->parent == x->parent->parent->left)
4263 /* We're on the left side of our grandparent, and Y is our
4264 "uncle". */
4265 struct mem_node *y = x->parent->parent->right;
4267 if (y->color == MEM_RED)
4269 /* Uncle and parent are red but should be black because
4270 X is red. Change the colors accordingly and proceed
4271 with the grandparent. */
4272 x->parent->color = MEM_BLACK;
4273 y->color = MEM_BLACK;
4274 x->parent->parent->color = MEM_RED;
4275 x = x->parent->parent;
4277 else
4279 /* Parent and uncle have different colors; parent is
4280 red, uncle is black. */
4281 if (x == x->parent->right)
4283 x = x->parent;
4284 mem_rotate_left (x);
4287 x->parent->color = MEM_BLACK;
4288 x->parent->parent->color = MEM_RED;
4289 mem_rotate_right (x->parent->parent);
4292 else
4294 /* This is the symmetrical case of above. */
4295 struct mem_node *y = x->parent->parent->left;
4297 if (y->color == MEM_RED)
4299 x->parent->color = MEM_BLACK;
4300 y->color = MEM_BLACK;
4301 x->parent->parent->color = MEM_RED;
4302 x = x->parent->parent;
4304 else
4306 if (x == x->parent->left)
4308 x = x->parent;
4309 mem_rotate_right (x);
4312 x->parent->color = MEM_BLACK;
4313 x->parent->parent->color = MEM_RED;
4314 mem_rotate_left (x->parent->parent);
4319 /* The root may have been changed to red due to the algorithm. Set
4320 it to black so that property #5 is satisfied. */
4321 mem_root->color = MEM_BLACK;
4325 /* (x) (y)
4326 / \ / \
4327 a (y) ===> (x) c
4328 / \ / \
4329 b c a b */
4331 static void
4332 mem_rotate_left (struct mem_node *x)
4334 struct mem_node *y;
4336 /* Turn y's left sub-tree into x's right sub-tree. */
4337 y = x->right;
4338 x->right = y->left;
4339 if (y->left != MEM_NIL)
4340 y->left->parent = x;
4342 /* Y's parent was x's parent. */
4343 if (y != MEM_NIL)
4344 y->parent = x->parent;
4346 /* Get the parent to point to y instead of x. */
4347 if (x->parent)
4349 if (x == x->parent->left)
4350 x->parent->left = y;
4351 else
4352 x->parent->right = y;
4354 else
4355 mem_root = y;
4357 /* Put x on y's left. */
4358 y->left = x;
4359 if (x != MEM_NIL)
4360 x->parent = y;
4364 /* (x) (Y)
4365 / \ / \
4366 (y) c ===> a (x)
4367 / \ / \
4368 a b b c */
4370 static void
4371 mem_rotate_right (struct mem_node *x)
4373 struct mem_node *y = x->left;
4375 x->left = y->right;
4376 if (y->right != MEM_NIL)
4377 y->right->parent = x;
4379 if (y != MEM_NIL)
4380 y->parent = x->parent;
4381 if (x->parent)
4383 if (x == x->parent->right)
4384 x->parent->right = y;
4385 else
4386 x->parent->left = y;
4388 else
4389 mem_root = y;
4391 y->right = x;
4392 if (x != MEM_NIL)
4393 x->parent = y;
4397 /* Delete node Z from the tree. If Z is null or MEM_NIL, do nothing. */
4399 static void
4400 mem_delete (struct mem_node *z)
4402 struct mem_node *x, *y;
4404 if (!z || z == MEM_NIL)
4405 return;
4407 if (z->left == MEM_NIL || z->right == MEM_NIL)
4408 y = z;
4409 else
4411 y = z->right;
4412 while (y->left != MEM_NIL)
4413 y = y->left;
4416 if (y->left != MEM_NIL)
4417 x = y->left;
4418 else
4419 x = y->right;
4421 x->parent = y->parent;
4422 if (y->parent)
4424 if (y == y->parent->left)
4425 y->parent->left = x;
4426 else
4427 y->parent->right = x;
4429 else
4430 mem_root = x;
4432 if (y != z)
4434 z->start = y->start;
4435 z->end = y->end;
4436 z->type = y->type;
4439 if (y->color == MEM_BLACK)
4440 mem_delete_fixup (x);
4442 #ifdef GC_MALLOC_CHECK
4443 free (y);
4444 #else
4445 xfree (y);
4446 #endif
4450 /* Re-establish the red-black properties of the tree, after a
4451 deletion. */
4453 static void
4454 mem_delete_fixup (struct mem_node *x)
4456 while (x != mem_root && x->color == MEM_BLACK)
4458 if (x == x->parent->left)
4460 struct mem_node *w = x->parent->right;
4462 if (w->color == MEM_RED)
4464 w->color = MEM_BLACK;
4465 x->parent->color = MEM_RED;
4466 mem_rotate_left (x->parent);
4467 w = x->parent->right;
4470 if (w->left->color == MEM_BLACK && w->right->color == MEM_BLACK)
4472 w->color = MEM_RED;
4473 x = x->parent;
4475 else
4477 if (w->right->color == MEM_BLACK)
4479 w->left->color = MEM_BLACK;
4480 w->color = MEM_RED;
4481 mem_rotate_right (w);
4482 w = x->parent->right;
4484 w->color = x->parent->color;
4485 x->parent->color = MEM_BLACK;
4486 w->right->color = MEM_BLACK;
4487 mem_rotate_left (x->parent);
4488 x = mem_root;
4491 else
4493 struct mem_node *w = x->parent->left;
4495 if (w->color == MEM_RED)
4497 w->color = MEM_BLACK;
4498 x->parent->color = MEM_RED;
4499 mem_rotate_right (x->parent);
4500 w = x->parent->left;
4503 if (w->right->color == MEM_BLACK && w->left->color == MEM_BLACK)
4505 w->color = MEM_RED;
4506 x = x->parent;
4508 else
4510 if (w->left->color == MEM_BLACK)
4512 w->right->color = MEM_BLACK;
4513 w->color = MEM_RED;
4514 mem_rotate_left (w);
4515 w = x->parent->left;
4518 w->color = x->parent->color;
4519 x->parent->color = MEM_BLACK;
4520 w->left->color = MEM_BLACK;
4521 mem_rotate_right (x->parent);
4522 x = mem_root;
4527 x->color = MEM_BLACK;
4531 /* Value is non-zero if P is a pointer to a live Lisp string on
4532 the heap. M is a pointer to the mem_block for P. */
4534 static bool
4535 live_string_p (struct mem_node *m, void *p)
4537 if (m->type == MEM_TYPE_STRING)
4539 struct string_block *b = m->start;
4540 ptrdiff_t offset = (char *) p - (char *) &b->strings[0];
4542 /* P must point to the start of a Lisp_String structure, and it
4543 must not be on the free-list. */
4544 return (offset >= 0
4545 && offset % sizeof b->strings[0] == 0
4546 && offset < (STRING_BLOCK_SIZE * sizeof b->strings[0])
4547 && ((struct Lisp_String *) p)->data != NULL);
4549 else
4550 return 0;
4554 /* Value is non-zero if P is a pointer to a live Lisp cons on
4555 the heap. M is a pointer to the mem_block for P. */
4557 static bool
4558 live_cons_p (struct mem_node *m, void *p)
4560 if (m->type == MEM_TYPE_CONS)
4562 struct cons_block *b = m->start;
4563 ptrdiff_t offset = (char *) p - (char *) &b->conses[0];
4565 /* P must point to the start of a Lisp_Cons, not be
4566 one of the unused cells in the current cons block,
4567 and not be on the free-list. */
4568 return (offset >= 0
4569 && offset % sizeof b->conses[0] == 0
4570 && offset < (CONS_BLOCK_SIZE * sizeof b->conses[0])
4571 && (b != cons_block
4572 || offset / sizeof b->conses[0] < cons_block_index)
4573 && !EQ (((struct Lisp_Cons *) p)->car, Vdead));
4575 else
4576 return 0;
4580 /* Value is non-zero if P is a pointer to a live Lisp symbol on
4581 the heap. M is a pointer to the mem_block for P. */
4583 static bool
4584 live_symbol_p (struct mem_node *m, void *p)
4586 if (m->type == MEM_TYPE_SYMBOL)
4588 struct symbol_block *b = m->start;
4589 ptrdiff_t offset = (char *) p - (char *) &b->symbols[0];
4591 /* P must point to the start of a Lisp_Symbol, not be
4592 one of the unused cells in the current symbol block,
4593 and not be on the free-list. */
4594 return (offset >= 0
4595 && offset % sizeof b->symbols[0] == 0
4596 && offset < (SYMBOL_BLOCK_SIZE * sizeof b->symbols[0])
4597 && (b != symbol_block
4598 || offset / sizeof b->symbols[0] < symbol_block_index)
4599 && !EQ (((struct Lisp_Symbol *)p)->function, Vdead));
4601 else
4602 return 0;
4606 /* Value is non-zero if P is a pointer to a live Lisp float on
4607 the heap. M is a pointer to the mem_block for P. */
4609 static bool
4610 live_float_p (struct mem_node *m, void *p)
4612 if (m->type == MEM_TYPE_FLOAT)
4614 struct float_block *b = m->start;
4615 ptrdiff_t offset = (char *) p - (char *) &b->floats[0];
4617 /* P must point to the start of a Lisp_Float and not be
4618 one of the unused cells in the current float block. */
4619 return (offset >= 0
4620 && offset % sizeof b->floats[0] == 0
4621 && offset < (FLOAT_BLOCK_SIZE * sizeof b->floats[0])
4622 && (b != float_block
4623 || offset / sizeof b->floats[0] < float_block_index));
4625 else
4626 return 0;
4630 /* Value is non-zero if P is a pointer to a live Lisp Misc on
4631 the heap. M is a pointer to the mem_block for P. */
4633 static bool
4634 live_misc_p (struct mem_node *m, void *p)
4636 if (m->type == MEM_TYPE_MISC)
4638 struct marker_block *b = m->start;
4639 ptrdiff_t offset = (char *) p - (char *) &b->markers[0];
4641 /* P must point to the start of a Lisp_Misc, not be
4642 one of the unused cells in the current misc block,
4643 and not be on the free-list. */
4644 return (offset >= 0
4645 && offset % sizeof b->markers[0] == 0
4646 && offset < (MARKER_BLOCK_SIZE * sizeof b->markers[0])
4647 && (b != marker_block
4648 || offset / sizeof b->markers[0] < marker_block_index)
4649 && ((union Lisp_Misc *) p)->u_any.type != Lisp_Misc_Free);
4651 else
4652 return 0;
4656 /* Value is non-zero if P is a pointer to a live vector-like object.
4657 M is a pointer to the mem_block for P. */
4659 static bool
4660 live_vector_p (struct mem_node *m, void *p)
4662 if (m->type == MEM_TYPE_VECTOR_BLOCK)
4664 /* This memory node corresponds to a vector block. */
4665 struct vector_block *block = m->start;
4666 struct Lisp_Vector *vector = (struct Lisp_Vector *) block->data;
4668 /* P is in the block's allocation range. Scan the block
4669 up to P and see whether P points to the start of some
4670 vector which is not on a free list. FIXME: check whether
4671 some allocation patterns (probably a lot of short vectors)
4672 may cause a substantial overhead of this loop. */
4673 while (VECTOR_IN_BLOCK (vector, block)
4674 && vector <= (struct Lisp_Vector *) p)
4676 if (!PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE) && vector == p)
4677 return 1;
4678 else
4679 vector = ADVANCE (vector, vector_nbytes (vector));
4682 else if (m->type == MEM_TYPE_VECTORLIKE && p == large_vector_vec (m->start))
4683 /* This memory node corresponds to a large vector. */
4684 return 1;
4685 return 0;
4689 /* Value is non-zero if P is a pointer to a live buffer. M is a
4690 pointer to the mem_block for P. */
4692 static bool
4693 live_buffer_p (struct mem_node *m, void *p)
4695 /* P must point to the start of the block, and the buffer
4696 must not have been killed. */
4697 return (m->type == MEM_TYPE_BUFFER
4698 && p == m->start
4699 && !NILP (((struct buffer *) p)->name_));
4702 /* Mark OBJ if we can prove it's a Lisp_Object. */
4704 static void
4705 mark_maybe_object (Lisp_Object obj)
4707 #if USE_VALGRIND
4708 if (valgrind_p)
4709 VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
4710 #endif
4712 if (INTEGERP (obj))
4713 return;
4715 void *po = XPNTR (obj);
4716 struct mem_node *m = mem_find (po);
4718 if (m != MEM_NIL)
4720 bool mark_p = false;
4722 switch (XTYPE (obj))
4724 case Lisp_String:
4725 mark_p = (live_string_p (m, po)
4726 && !STRING_MARKED_P ((struct Lisp_String *) po));
4727 break;
4729 case Lisp_Cons:
4730 mark_p = (live_cons_p (m, po) && !CONS_MARKED_P (XCONS (obj)));
4731 break;
4733 case Lisp_Symbol:
4734 mark_p = (live_symbol_p (m, po) && !XSYMBOL (obj)->gcmarkbit);
4735 break;
4737 case Lisp_Float:
4738 mark_p = (live_float_p (m, po) && !FLOAT_MARKED_P (XFLOAT (obj)));
4739 break;
4741 case Lisp_Vectorlike:
4742 /* Note: can't check BUFFERP before we know it's a
4743 buffer because checking that dereferences the pointer
4744 PO which might point anywhere. */
4745 if (live_vector_p (m, po))
4746 mark_p = !SUBRP (obj) && !VECTOR_MARKED_P (XVECTOR (obj));
4747 else if (live_buffer_p (m, po))
4748 mark_p = BUFFERP (obj) && !VECTOR_MARKED_P (XBUFFER (obj));
4749 break;
4751 case Lisp_Misc:
4752 mark_p = (live_misc_p (m, po) && !XMISCANY (obj)->gcmarkbit);
4753 break;
4755 default:
4756 break;
4759 if (mark_p)
4760 mark_object (obj);
4764 /* Return true if P can point to Lisp data, and false otherwise.
4765 Symbols are implemented via offsets not pointers, but the offsets
4766 are also multiples of GCALIGNMENT. */
4768 static bool
4769 maybe_lisp_pointer (void *p)
4771 return (uintptr_t) p % GCALIGNMENT == 0;
4774 #ifndef HAVE_MODULES
4775 enum { HAVE_MODULES = false };
4776 #endif
4778 /* If P points to Lisp data, mark that as live if it isn't already
4779 marked. */
4781 static void
4782 mark_maybe_pointer (void *p)
4784 struct mem_node *m;
4786 #if USE_VALGRIND
4787 if (valgrind_p)
4788 VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
4789 #endif
4791 if (sizeof (Lisp_Object) == sizeof (void *) || !HAVE_MODULES)
4793 if (!maybe_lisp_pointer (p))
4794 return;
4796 else
4798 /* For the wide-int case, also mark emacs_value tagged pointers,
4799 which can be generated by emacs-module.c's value_to_lisp. */
4800 p = (void *) ((uintptr_t) p & ~(GCALIGNMENT - 1));
4803 m = mem_find (p);
4804 if (m != MEM_NIL)
4806 Lisp_Object obj = Qnil;
4808 switch (m->type)
4810 case MEM_TYPE_NON_LISP:
4811 case MEM_TYPE_SPARE:
4812 /* Nothing to do; not a pointer to Lisp memory. */
4813 break;
4815 case MEM_TYPE_BUFFER:
4816 if (live_buffer_p (m, p) && !VECTOR_MARKED_P ((struct buffer *)p))
4817 XSETVECTOR (obj, p);
4818 break;
4820 case MEM_TYPE_CONS:
4821 if (live_cons_p (m, p) && !CONS_MARKED_P ((struct Lisp_Cons *) p))
4822 XSETCONS (obj, p);
4823 break;
4825 case MEM_TYPE_STRING:
4826 if (live_string_p (m, p)
4827 && !STRING_MARKED_P ((struct Lisp_String *) p))
4828 XSETSTRING (obj, p);
4829 break;
4831 case MEM_TYPE_MISC:
4832 if (live_misc_p (m, p) && !((struct Lisp_Free *) p)->gcmarkbit)
4833 XSETMISC (obj, p);
4834 break;
4836 case MEM_TYPE_SYMBOL:
4837 if (live_symbol_p (m, p) && !((struct Lisp_Symbol *) p)->gcmarkbit)
4838 XSETSYMBOL (obj, p);
4839 break;
4841 case MEM_TYPE_FLOAT:
4842 if (live_float_p (m, p) && !FLOAT_MARKED_P (p))
4843 XSETFLOAT (obj, p);
4844 break;
4846 case MEM_TYPE_VECTORLIKE:
4847 case MEM_TYPE_VECTOR_BLOCK:
4848 if (live_vector_p (m, p))
4850 Lisp_Object tem;
4851 XSETVECTOR (tem, p);
4852 if (!SUBRP (tem) && !VECTOR_MARKED_P (XVECTOR (tem)))
4853 obj = tem;
4855 break;
4857 default:
4858 emacs_abort ();
4861 if (!NILP (obj))
4862 mark_object (obj);
4867 /* Alignment of pointer values. Use alignof, as it sometimes returns
4868 a smaller alignment than GCC's __alignof__ and mark_memory might
4869 miss objects if __alignof__ were used. */
4870 #define GC_POINTER_ALIGNMENT alignof (void *)
4872 /* Mark Lisp objects referenced from the address range START+OFFSET..END
4873 or END+OFFSET..START. */
4875 static void ATTRIBUTE_NO_SANITIZE_ADDRESS
4876 mark_memory (void *start, void *end)
4878 char *pp;
4880 /* Make START the pointer to the start of the memory region,
4881 if it isn't already. */
4882 if (end < start)
4884 void *tem = start;
4885 start = end;
4886 end = tem;
4889 eassert (((uintptr_t) start) % GC_POINTER_ALIGNMENT == 0);
4891 /* Mark Lisp data pointed to. This is necessary because, in some
4892 situations, the C compiler optimizes Lisp objects away, so that
4893 only a pointer to them remains. Example:
4895 DEFUN ("testme", Ftestme, Stestme, 0, 0, 0, "")
4898 Lisp_Object obj = build_string ("test");
4899 struct Lisp_String *s = XSTRING (obj);
4900 Fgarbage_collect ();
4901 fprintf (stderr, "test '%s'\n", s->data);
4902 return Qnil;
4905 Here, `obj' isn't really used, and the compiler optimizes it
4906 away. The only reference to the life string is through the
4907 pointer `s'. */
4909 for (pp = start; (void *) pp < end; pp += GC_POINTER_ALIGNMENT)
4911 mark_maybe_pointer (*(void **) pp);
4912 mark_maybe_object (*(Lisp_Object *) pp);
4916 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
4918 static bool setjmp_tested_p;
4919 static int longjmps_done;
4921 #define SETJMP_WILL_LIKELY_WORK "\
4923 Emacs garbage collector has been changed to use conservative stack\n\
4924 marking. Emacs has determined that the method it uses to do the\n\
4925 marking will likely work on your system, but this isn't sure.\n\
4927 If you are a system-programmer, or can get the help of a local wizard\n\
4928 who is, please take a look at the function mark_stack in alloc.c, and\n\
4929 verify that the methods used are appropriate for your system.\n\
4931 Please mail the result to <emacs-devel@gnu.org>.\n\
4934 #define SETJMP_WILL_NOT_WORK "\
4936 Emacs garbage collector has been changed to use conservative stack\n\
4937 marking. Emacs has determined that the default method it uses to do the\n\
4938 marking will not work on your system. We will need a system-dependent\n\
4939 solution for your system.\n\
4941 Please take a look at the function mark_stack in alloc.c, and\n\
4942 try to find a way to make it work on your system.\n\
4944 Note that you may get false negatives, depending on the compiler.\n\
4945 In particular, you need to use -O with GCC for this test.\n\
4947 Please mail the result to <emacs-devel@gnu.org>.\n\
4951 /* Perform a quick check if it looks like setjmp saves registers in a
4952 jmp_buf. Print a message to stderr saying so. When this test
4953 succeeds, this is _not_ a proof that setjmp is sufficient for
4954 conservative stack marking. Only the sources or a disassembly
4955 can prove that. */
4957 static void
4958 test_setjmp (void)
4960 char buf[10];
4961 register int x;
4962 sys_jmp_buf jbuf;
4964 /* Arrange for X to be put in a register. */
4965 sprintf (buf, "1");
4966 x = strlen (buf);
4967 x = 2 * x - 1;
4969 sys_setjmp (jbuf);
4970 if (longjmps_done == 1)
4972 /* Came here after the longjmp at the end of the function.
4974 If x == 1, the longjmp has restored the register to its
4975 value before the setjmp, and we can hope that setjmp
4976 saves all such registers in the jmp_buf, although that
4977 isn't sure.
4979 For other values of X, either something really strange is
4980 taking place, or the setjmp just didn't save the register. */
4982 if (x == 1)
4983 fprintf (stderr, SETJMP_WILL_LIKELY_WORK);
4984 else
4986 fprintf (stderr, SETJMP_WILL_NOT_WORK);
4987 exit (1);
4991 ++longjmps_done;
4992 x = 2;
4993 if (longjmps_done == 1)
4994 sys_longjmp (jbuf, 1);
4997 #endif /* not GC_SAVE_REGISTERS_ON_STACK && not GC_SETJMP_WORKS */
5000 /* Mark live Lisp objects on the C stack.
5002 There are several system-dependent problems to consider when
5003 porting this to new architectures:
5005 Processor Registers
5007 We have to mark Lisp objects in CPU registers that can hold local
5008 variables or are used to pass parameters.
5010 If GC_SAVE_REGISTERS_ON_STACK is defined, it should expand to
5011 something that either saves relevant registers on the stack, or
5012 calls mark_maybe_object passing it each register's contents.
5014 If GC_SAVE_REGISTERS_ON_STACK is not defined, the current
5015 implementation assumes that calling setjmp saves registers we need
5016 to see in a jmp_buf which itself lies on the stack. This doesn't
5017 have to be true! It must be verified for each system, possibly
5018 by taking a look at the source code of setjmp.
5020 If __builtin_unwind_init is available (defined by GCC >= 2.8) we
5021 can use it as a machine independent method to store all registers
5022 to the stack. In this case the macros described in the previous
5023 two paragraphs are not used.
5025 Stack Layout
5027 Architectures differ in the way their processor stack is organized.
5028 For example, the stack might look like this
5030 +----------------+
5031 | Lisp_Object | size = 4
5032 +----------------+
5033 | something else | size = 2
5034 +----------------+
5035 | Lisp_Object | size = 4
5036 +----------------+
5037 | ... |
5039 In such a case, not every Lisp_Object will be aligned equally. To
5040 find all Lisp_Object on the stack it won't be sufficient to walk
5041 the stack in steps of 4 bytes. Instead, two passes will be
5042 necessary, one starting at the start of the stack, and a second
5043 pass starting at the start of the stack + 2. Likewise, if the
5044 minimal alignment of Lisp_Objects on the stack is 1, four passes
5045 would be necessary, each one starting with one byte more offset
5046 from the stack start. */
5048 static void
5049 mark_stack (void *end)
5052 /* This assumes that the stack is a contiguous region in memory. If
5053 that's not the case, something has to be done here to iterate
5054 over the stack segments. */
5055 mark_memory (stack_base, end);
5057 /* Allow for marking a secondary stack, like the register stack on the
5058 ia64. */
5059 #ifdef GC_MARK_SECONDARY_STACK
5060 GC_MARK_SECONDARY_STACK ();
5061 #endif
5064 static bool
5065 c_symbol_p (struct Lisp_Symbol *sym)
5067 char *lispsym_ptr = (char *) lispsym;
5068 char *sym_ptr = (char *) sym;
5069 ptrdiff_t lispsym_offset = sym_ptr - lispsym_ptr;
5070 return 0 <= lispsym_offset && lispsym_offset < sizeof lispsym;
5073 /* Determine whether it is safe to access memory at address P. */
5074 static int
5075 valid_pointer_p (void *p)
5077 #ifdef WINDOWSNT
5078 return w32_valid_pointer_p (p, 16);
5079 #else
5081 if (ADDRESS_SANITIZER)
5082 return p ? -1 : 0;
5084 int fd[2];
5086 /* Obviously, we cannot just access it (we would SEGV trying), so we
5087 trick the o/s to tell us whether p is a valid pointer.
5088 Unfortunately, we cannot use NULL_DEVICE here, as emacs_write may
5089 not validate p in that case. */
5091 if (emacs_pipe (fd) == 0)
5093 bool valid = emacs_write (fd[1], p, 16) == 16;
5094 emacs_close (fd[1]);
5095 emacs_close (fd[0]);
5096 return valid;
5099 return -1;
5100 #endif
5103 /* Return 2 if OBJ is a killed or special buffer object, 1 if OBJ is a
5104 valid lisp object, 0 if OBJ is NOT a valid lisp object, or -1 if we
5105 cannot validate OBJ. This function can be quite slow, so its primary
5106 use is the manual debugging. The only exception is print_object, where
5107 we use it to check whether the memory referenced by the pointer of
5108 Lisp_Save_Value object contains valid objects. */
5111 valid_lisp_object_p (Lisp_Object obj)
5113 if (INTEGERP (obj))
5114 return 1;
5116 void *p = XPNTR (obj);
5117 if (PURE_P (p))
5118 return 1;
5120 if (SYMBOLP (obj) && c_symbol_p (p))
5121 return ((char *) p - (char *) lispsym) % sizeof lispsym[0] == 0;
5123 if (p == &buffer_defaults || p == &buffer_local_symbols)
5124 return 2;
5126 struct mem_node *m = mem_find (p);
5128 if (m == MEM_NIL)
5130 int valid = valid_pointer_p (p);
5131 if (valid <= 0)
5132 return valid;
5134 if (SUBRP (obj))
5135 return 1;
5137 return 0;
5140 switch (m->type)
5142 case MEM_TYPE_NON_LISP:
5143 case MEM_TYPE_SPARE:
5144 return 0;
5146 case MEM_TYPE_BUFFER:
5147 return live_buffer_p (m, p) ? 1 : 2;
5149 case MEM_TYPE_CONS:
5150 return live_cons_p (m, p);
5152 case MEM_TYPE_STRING:
5153 return live_string_p (m, p);
5155 case MEM_TYPE_MISC:
5156 return live_misc_p (m, p);
5158 case MEM_TYPE_SYMBOL:
5159 return live_symbol_p (m, p);
5161 case MEM_TYPE_FLOAT:
5162 return live_float_p (m, p);
5164 case MEM_TYPE_VECTORLIKE:
5165 case MEM_TYPE_VECTOR_BLOCK:
5166 return live_vector_p (m, p);
5168 default:
5169 break;
5172 return 0;
5175 /***********************************************************************
5176 Pure Storage Management
5177 ***********************************************************************/
5179 /* Allocate room for SIZE bytes from pure Lisp storage and return a
5180 pointer to it. TYPE is the Lisp type for which the memory is
5181 allocated. TYPE < 0 means it's not used for a Lisp object. */
5183 static void *
5184 pure_alloc (size_t size, int type)
5186 void *result;
5188 again:
5189 if (type >= 0)
5191 /* Allocate space for a Lisp object from the beginning of the free
5192 space with taking account of alignment. */
5193 result = pointer_align (purebeg + pure_bytes_used_lisp, GCALIGNMENT);
5194 pure_bytes_used_lisp = ((char *)result - (char *)purebeg) + size;
5196 else
5198 /* Allocate space for a non-Lisp object from the end of the free
5199 space. */
5200 pure_bytes_used_non_lisp += size;
5201 result = purebeg + pure_size - pure_bytes_used_non_lisp;
5203 pure_bytes_used = pure_bytes_used_lisp + pure_bytes_used_non_lisp;
5205 if (pure_bytes_used <= pure_size)
5206 return result;
5208 /* Don't allocate a large amount here,
5209 because it might get mmap'd and then its address
5210 might not be usable. */
5211 purebeg = xmalloc (10000);
5212 pure_size = 10000;
5213 pure_bytes_used_before_overflow += pure_bytes_used - size;
5214 pure_bytes_used = 0;
5215 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
5216 goto again;
5220 /* Print a warning if PURESIZE is too small. */
5222 void
5223 check_pure_size (void)
5225 if (pure_bytes_used_before_overflow)
5226 message (("emacs:0:Pure Lisp storage overflow (approx. %"pI"d"
5227 " bytes needed)"),
5228 pure_bytes_used + pure_bytes_used_before_overflow);
5232 /* Find the byte sequence {DATA[0], ..., DATA[NBYTES-1], '\0'} from
5233 the non-Lisp data pool of the pure storage, and return its start
5234 address. Return NULL if not found. */
5236 static char *
5237 find_string_data_in_pure (const char *data, ptrdiff_t nbytes)
5239 int i;
5240 ptrdiff_t skip, bm_skip[256], last_char_skip, infinity, start, start_max;
5241 const unsigned char *p;
5242 char *non_lisp_beg;
5244 if (pure_bytes_used_non_lisp <= nbytes)
5245 return NULL;
5247 /* Set up the Boyer-Moore table. */
5248 skip = nbytes + 1;
5249 for (i = 0; i < 256; i++)
5250 bm_skip[i] = skip;
5252 p = (const unsigned char *) data;
5253 while (--skip > 0)
5254 bm_skip[*p++] = skip;
5256 last_char_skip = bm_skip['\0'];
5258 non_lisp_beg = purebeg + pure_size - pure_bytes_used_non_lisp;
5259 start_max = pure_bytes_used_non_lisp - (nbytes + 1);
5261 /* See the comments in the function `boyer_moore' (search.c) for the
5262 use of `infinity'. */
5263 infinity = pure_bytes_used_non_lisp + 1;
5264 bm_skip['\0'] = infinity;
5266 p = (const unsigned char *) non_lisp_beg + nbytes;
5267 start = 0;
5270 /* Check the last character (== '\0'). */
5273 start += bm_skip[*(p + start)];
5275 while (start <= start_max);
5277 if (start < infinity)
5278 /* Couldn't find the last character. */
5279 return NULL;
5281 /* No less than `infinity' means we could find the last
5282 character at `p[start - infinity]'. */
5283 start -= infinity;
5285 /* Check the remaining characters. */
5286 if (memcmp (data, non_lisp_beg + start, nbytes) == 0)
5287 /* Found. */
5288 return non_lisp_beg + start;
5290 start += last_char_skip;
5292 while (start <= start_max);
5294 return NULL;
5298 /* Return a string allocated in pure space. DATA is a buffer holding
5299 NCHARS characters, and NBYTES bytes of string data. MULTIBYTE
5300 means make the result string multibyte.
5302 Must get an error if pure storage is full, since if it cannot hold
5303 a large string it may be able to hold conses that point to that
5304 string; then the string is not protected from gc. */
5306 Lisp_Object
5307 make_pure_string (const char *data,
5308 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
5310 Lisp_Object string;
5311 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5312 s->data = (unsigned char *) find_string_data_in_pure (data, nbytes);
5313 if (s->data == NULL)
5315 s->data = pure_alloc (nbytes + 1, -1);
5316 memcpy (s->data, data, nbytes);
5317 s->data[nbytes] = '\0';
5319 s->size = nchars;
5320 s->size_byte = multibyte ? nbytes : -1;
5321 s->intervals = NULL;
5322 XSETSTRING (string, s);
5323 return string;
5326 /* Return a string allocated in pure space. Do not
5327 allocate the string data, just point to DATA. */
5329 Lisp_Object
5330 make_pure_c_string (const char *data, ptrdiff_t nchars)
5332 Lisp_Object string;
5333 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5334 s->size = nchars;
5335 s->size_byte = -1;
5336 s->data = (unsigned char *) data;
5337 s->intervals = NULL;
5338 XSETSTRING (string, s);
5339 return string;
5342 static Lisp_Object purecopy (Lisp_Object obj);
5344 /* Return a cons allocated from pure space. Give it pure copies
5345 of CAR as car and CDR as cdr. */
5347 Lisp_Object
5348 pure_cons (Lisp_Object car, Lisp_Object cdr)
5350 Lisp_Object new;
5351 struct Lisp_Cons *p = pure_alloc (sizeof *p, Lisp_Cons);
5352 XSETCONS (new, p);
5353 XSETCAR (new, purecopy (car));
5354 XSETCDR (new, purecopy (cdr));
5355 return new;
5359 /* Value is a float object with value NUM allocated from pure space. */
5361 static Lisp_Object
5362 make_pure_float (double num)
5364 Lisp_Object new;
5365 struct Lisp_Float *p = pure_alloc (sizeof *p, Lisp_Float);
5366 XSETFLOAT (new, p);
5367 XFLOAT_INIT (new, num);
5368 return new;
5372 /* Return a vector with room for LEN Lisp_Objects allocated from
5373 pure space. */
5375 static Lisp_Object
5376 make_pure_vector (ptrdiff_t len)
5378 Lisp_Object new;
5379 size_t size = header_size + len * word_size;
5380 struct Lisp_Vector *p = pure_alloc (size, Lisp_Vectorlike);
5381 XSETVECTOR (new, p);
5382 XVECTOR (new)->header.size = len;
5383 return new;
5386 DEFUN ("purecopy", Fpurecopy, Spurecopy, 1, 1, 0,
5387 doc: /* Make a copy of object OBJ in pure storage.
5388 Recursively copies contents of vectors and cons cells.
5389 Does not copy symbols. Copies strings without text properties. */)
5390 (register Lisp_Object obj)
5392 if (NILP (Vpurify_flag))
5393 return obj;
5394 else if (MARKERP (obj) || OVERLAYP (obj)
5395 || HASH_TABLE_P (obj) || SYMBOLP (obj))
5396 /* Can't purify those. */
5397 return obj;
5398 else
5399 return purecopy (obj);
5402 static Lisp_Object
5403 purecopy (Lisp_Object obj)
5405 if (INTEGERP (obj)
5406 || (! SYMBOLP (obj) && PURE_P (XPNTR_OR_SYMBOL_OFFSET (obj)))
5407 || SUBRP (obj))
5408 return obj; /* Already pure. */
5410 if (STRINGP (obj) && XSTRING (obj)->intervals)
5411 message_with_string ("Dropping text-properties while making string `%s' pure",
5412 obj, true);
5414 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5416 Lisp_Object tmp = Fgethash (obj, Vpurify_flag, Qnil);
5417 if (!NILP (tmp))
5418 return tmp;
5421 if (CONSP (obj))
5422 obj = pure_cons (XCAR (obj), XCDR (obj));
5423 else if (FLOATP (obj))
5424 obj = make_pure_float (XFLOAT_DATA (obj));
5425 else if (STRINGP (obj))
5426 obj = make_pure_string (SSDATA (obj), SCHARS (obj),
5427 SBYTES (obj),
5428 STRING_MULTIBYTE (obj));
5429 else if (COMPILEDP (obj) || VECTORP (obj) || HASH_TABLE_P (obj))
5431 struct Lisp_Vector *objp = XVECTOR (obj);
5432 ptrdiff_t nbytes = vector_nbytes (objp);
5433 struct Lisp_Vector *vec = pure_alloc (nbytes, Lisp_Vectorlike);
5434 register ptrdiff_t i;
5435 ptrdiff_t size = ASIZE (obj);
5436 if (size & PSEUDOVECTOR_FLAG)
5437 size &= PSEUDOVECTOR_SIZE_MASK;
5438 memcpy (vec, objp, nbytes);
5439 for (i = 0; i < size; i++)
5440 vec->contents[i] = purecopy (vec->contents[i]);
5441 XSETVECTOR (obj, vec);
5443 else if (SYMBOLP (obj))
5445 if (!XSYMBOL (obj)->pinned && !c_symbol_p (XSYMBOL (obj)))
5446 { /* We can't purify them, but they appear in many pure objects.
5447 Mark them as `pinned' so we know to mark them at every GC cycle. */
5448 XSYMBOL (obj)->pinned = true;
5449 symbol_block_pinned = symbol_block;
5451 /* Don't hash-cons it. */
5452 return obj;
5454 else
5456 AUTO_STRING (fmt, "Don't know how to purify: %S");
5457 Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj)));
5460 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5461 Fputhash (obj, obj, Vpurify_flag);
5463 return obj;
5468 /***********************************************************************
5469 Protection from GC
5470 ***********************************************************************/
5472 /* Put an entry in staticvec, pointing at the variable with address
5473 VARADDRESS. */
5475 void
5476 staticpro (Lisp_Object *varaddress)
5478 if (staticidx >= NSTATICS)
5479 fatal ("NSTATICS too small; try increasing and recompiling Emacs.");
5480 staticvec[staticidx++] = varaddress;
5484 /***********************************************************************
5485 Protection from GC
5486 ***********************************************************************/
5488 /* Temporarily prevent garbage collection. */
5490 ptrdiff_t
5491 inhibit_garbage_collection (void)
5493 ptrdiff_t count = SPECPDL_INDEX ();
5495 specbind (Qgc_cons_threshold, make_number (MOST_POSITIVE_FIXNUM));
5496 return count;
5499 /* Used to avoid possible overflows when
5500 converting from C to Lisp integers. */
5502 static Lisp_Object
5503 bounded_number (EMACS_INT number)
5505 return make_number (min (MOST_POSITIVE_FIXNUM, number));
5508 /* Calculate total bytes of live objects. */
5510 static size_t
5511 total_bytes_of_live_objects (void)
5513 size_t tot = 0;
5514 tot += total_conses * sizeof (struct Lisp_Cons);
5515 tot += total_symbols * sizeof (struct Lisp_Symbol);
5516 tot += total_markers * sizeof (union Lisp_Misc);
5517 tot += total_string_bytes;
5518 tot += total_vector_slots * word_size;
5519 tot += total_floats * sizeof (struct Lisp_Float);
5520 tot += total_intervals * sizeof (struct interval);
5521 tot += total_strings * sizeof (struct Lisp_String);
5522 return tot;
5525 #ifdef HAVE_WINDOW_SYSTEM
5527 /* Remove unmarked font-spec and font-entity objects from ENTRY, which is
5528 (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...), and return changed entry. */
5530 static Lisp_Object
5531 compact_font_cache_entry (Lisp_Object entry)
5533 Lisp_Object tail, *prev = &entry;
5535 for (tail = entry; CONSP (tail); tail = XCDR (tail))
5537 bool drop = 0;
5538 Lisp_Object obj = XCAR (tail);
5540 /* Consider OBJ if it is (font-spec . [font-entity font-entity ...]). */
5541 if (CONSP (obj) && GC_FONT_SPEC_P (XCAR (obj))
5542 && !VECTOR_MARKED_P (GC_XFONT_SPEC (XCAR (obj)))
5543 /* Don't use VECTORP here, as that calls ASIZE, which could
5544 hit assertion violation during GC. */
5545 && (VECTORLIKEP (XCDR (obj))
5546 && ! (gc_asize (XCDR (obj)) & PSEUDOVECTOR_FLAG)))
5548 ptrdiff_t i, size = gc_asize (XCDR (obj));
5549 Lisp_Object obj_cdr = XCDR (obj);
5551 /* If font-spec is not marked, most likely all font-entities
5552 are not marked too. But we must be sure that nothing is
5553 marked within OBJ before we really drop it. */
5554 for (i = 0; i < size; i++)
5556 Lisp_Object objlist;
5558 if (VECTOR_MARKED_P (GC_XFONT_ENTITY (AREF (obj_cdr, i))))
5559 break;
5561 objlist = AREF (AREF (obj_cdr, i), FONT_OBJLIST_INDEX);
5562 for (; CONSP (objlist); objlist = XCDR (objlist))
5564 Lisp_Object val = XCAR (objlist);
5565 struct font *font = GC_XFONT_OBJECT (val);
5567 if (!NILP (AREF (val, FONT_TYPE_INDEX))
5568 && VECTOR_MARKED_P(font))
5569 break;
5571 if (CONSP (objlist))
5573 /* Found a marked font, bail out. */
5574 break;
5578 if (i == size)
5580 /* No marked fonts were found, so this entire font
5581 entity can be dropped. */
5582 drop = 1;
5585 if (drop)
5586 *prev = XCDR (tail);
5587 else
5588 prev = xcdr_addr (tail);
5590 return entry;
5593 /* Compact font caches on all terminals and mark
5594 everything which is still here after compaction. */
5596 static void
5597 compact_font_caches (void)
5599 struct terminal *t;
5601 for (t = terminal_list; t; t = t->next_terminal)
5603 Lisp_Object cache = TERMINAL_FONT_CACHE (t);
5604 if (CONSP (cache))
5606 Lisp_Object entry;
5608 for (entry = XCDR (cache); CONSP (entry); entry = XCDR (entry))
5609 XSETCAR (entry, compact_font_cache_entry (XCAR (entry)));
5611 mark_object (cache);
5615 #else /* not HAVE_WINDOW_SYSTEM */
5617 #define compact_font_caches() (void)(0)
5619 #endif /* HAVE_WINDOW_SYSTEM */
5621 /* Remove (MARKER . DATA) entries with unmarked MARKER
5622 from buffer undo LIST and return changed list. */
5624 static Lisp_Object
5625 compact_undo_list (Lisp_Object list)
5627 Lisp_Object tail, *prev = &list;
5629 for (tail = list; CONSP (tail); tail = XCDR (tail))
5631 if (CONSP (XCAR (tail))
5632 && MARKERP (XCAR (XCAR (tail)))
5633 && !XMARKER (XCAR (XCAR (tail)))->gcmarkbit)
5634 *prev = XCDR (tail);
5635 else
5636 prev = xcdr_addr (tail);
5638 return list;
5641 static void
5642 mark_pinned_symbols (void)
5644 struct symbol_block *sblk;
5645 int lim = (symbol_block_pinned == symbol_block
5646 ? symbol_block_index : SYMBOL_BLOCK_SIZE);
5648 for (sblk = symbol_block_pinned; sblk; sblk = sblk->next)
5650 union aligned_Lisp_Symbol *sym = sblk->symbols, *end = sym + lim;
5651 for (; sym < end; ++sym)
5652 if (sym->s.pinned)
5653 mark_object (make_lisp_symbol (&sym->s));
5655 lim = SYMBOL_BLOCK_SIZE;
5659 /* Subroutine of Fgarbage_collect that does most of the work. It is a
5660 separate function so that we could limit mark_stack in searching
5661 the stack frames below this function, thus avoiding the rare cases
5662 where mark_stack finds values that look like live Lisp objects on
5663 portions of stack that couldn't possibly contain such live objects.
5664 For more details of this, see the discussion at
5665 http://lists.gnu.org/archive/html/emacs-devel/2014-05/msg00270.html. */
5666 static Lisp_Object
5667 garbage_collect_1 (void *end)
5669 struct buffer *nextb;
5670 char stack_top_variable;
5671 ptrdiff_t i;
5672 bool message_p;
5673 ptrdiff_t count = SPECPDL_INDEX ();
5674 struct timespec start;
5675 Lisp_Object retval = Qnil;
5676 size_t tot_before = 0;
5678 if (abort_on_gc)
5679 emacs_abort ();
5681 /* Can't GC if pure storage overflowed because we can't determine
5682 if something is a pure object or not. */
5683 if (pure_bytes_used_before_overflow)
5684 return Qnil;
5686 /* Record this function, so it appears on the profiler's backtraces. */
5687 record_in_backtrace (QAutomatic_GC, 0, 0);
5689 check_cons_list ();
5691 /* Don't keep undo information around forever.
5692 Do this early on, so it is no problem if the user quits. */
5693 FOR_EACH_BUFFER (nextb)
5694 compact_buffer (nextb);
5696 if (profiler_memory_running)
5697 tot_before = total_bytes_of_live_objects ();
5699 start = current_timespec ();
5701 /* In case user calls debug_print during GC,
5702 don't let that cause a recursive GC. */
5703 consing_since_gc = 0;
5705 /* Save what's currently displayed in the echo area. Don't do that
5706 if we are GC'ing because we've run out of memory, since
5707 push_message will cons, and we might have no memory for that. */
5708 if (NILP (Vmemory_full))
5710 message_p = push_message ();
5711 record_unwind_protect_void (pop_message_unwind);
5713 else
5714 message_p = false;
5716 /* Save a copy of the contents of the stack, for debugging. */
5717 #if MAX_SAVE_STACK > 0
5718 if (NILP (Vpurify_flag))
5720 char *stack;
5721 ptrdiff_t stack_size;
5722 if (&stack_top_variable < stack_bottom)
5724 stack = &stack_top_variable;
5725 stack_size = stack_bottom - &stack_top_variable;
5727 else
5729 stack = stack_bottom;
5730 stack_size = &stack_top_variable - stack_bottom;
5732 if (stack_size <= MAX_SAVE_STACK)
5734 if (stack_copy_size < stack_size)
5736 stack_copy = xrealloc (stack_copy, stack_size);
5737 stack_copy_size = stack_size;
5739 no_sanitize_memcpy (stack_copy, stack, stack_size);
5742 #endif /* MAX_SAVE_STACK > 0 */
5744 if (garbage_collection_messages)
5745 message1_nolog ("Garbage collecting...");
5747 block_input ();
5749 shrink_regexp_cache ();
5751 gc_in_progress = 1;
5753 /* Mark all the special slots that serve as the roots of accessibility. */
5755 mark_buffer (&buffer_defaults);
5756 mark_buffer (&buffer_local_symbols);
5758 for (i = 0; i < ARRAYELTS (lispsym); i++)
5759 mark_object (builtin_lisp_symbol (i));
5761 for (i = 0; i < staticidx; i++)
5762 mark_object (*staticvec[i]);
5764 mark_pinned_symbols ();
5765 mark_specpdl ();
5766 mark_terminals ();
5767 mark_kboards ();
5769 #ifdef USE_GTK
5770 xg_mark_data ();
5771 #endif
5773 mark_stack (end);
5776 struct handler *handler;
5777 for (handler = handlerlist; handler; handler = handler->next)
5779 mark_object (handler->tag_or_ch);
5780 mark_object (handler->val);
5783 #ifdef HAVE_WINDOW_SYSTEM
5784 mark_fringe_data ();
5785 #endif
5787 /* Everything is now marked, except for the data in font caches,
5788 undo lists, and finalizers. The first two are compacted by
5789 removing an items which aren't reachable otherwise. */
5791 compact_font_caches ();
5793 FOR_EACH_BUFFER (nextb)
5795 if (!EQ (BVAR (nextb, undo_list), Qt))
5796 bset_undo_list (nextb, compact_undo_list (BVAR (nextb, undo_list)));
5797 /* Now that we have stripped the elements that need not be
5798 in the undo_list any more, we can finally mark the list. */
5799 mark_object (BVAR (nextb, undo_list));
5802 /* Now pre-sweep finalizers. Here, we add any unmarked finalizers
5803 to doomed_finalizers so we can run their associated functions
5804 after GC. It's important to scan finalizers at this stage so
5805 that we can be sure that unmarked finalizers are really
5806 unreachable except for references from their associated functions
5807 and from other finalizers. */
5809 queue_doomed_finalizers (&doomed_finalizers, &finalizers);
5810 mark_finalizer_list (&doomed_finalizers);
5812 gc_sweep ();
5814 /* Clear the mark bits that we set in certain root slots. */
5815 VECTOR_UNMARK (&buffer_defaults);
5816 VECTOR_UNMARK (&buffer_local_symbols);
5818 check_cons_list ();
5820 gc_in_progress = 0;
5822 unblock_input ();
5824 consing_since_gc = 0;
5825 if (gc_cons_threshold < GC_DEFAULT_THRESHOLD / 10)
5826 gc_cons_threshold = GC_DEFAULT_THRESHOLD / 10;
5828 gc_relative_threshold = 0;
5829 if (FLOATP (Vgc_cons_percentage))
5830 { /* Set gc_cons_combined_threshold. */
5831 double tot = total_bytes_of_live_objects ();
5833 tot *= XFLOAT_DATA (Vgc_cons_percentage);
5834 if (0 < tot)
5836 if (tot < TYPE_MAXIMUM (EMACS_INT))
5837 gc_relative_threshold = tot;
5838 else
5839 gc_relative_threshold = TYPE_MAXIMUM (EMACS_INT);
5843 if (garbage_collection_messages && NILP (Vmemory_full))
5845 if (message_p || minibuf_level > 0)
5846 restore_message ();
5847 else
5848 message1_nolog ("Garbage collecting...done");
5851 unbind_to (count, Qnil);
5853 Lisp_Object total[] = {
5854 list4 (Qconses, make_number (sizeof (struct Lisp_Cons)),
5855 bounded_number (total_conses),
5856 bounded_number (total_free_conses)),
5857 list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)),
5858 bounded_number (total_symbols),
5859 bounded_number (total_free_symbols)),
5860 list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)),
5861 bounded_number (total_markers),
5862 bounded_number (total_free_markers)),
5863 list4 (Qstrings, make_number (sizeof (struct Lisp_String)),
5864 bounded_number (total_strings),
5865 bounded_number (total_free_strings)),
5866 list3 (Qstring_bytes, make_number (1),
5867 bounded_number (total_string_bytes)),
5868 list3 (Qvectors,
5869 make_number (header_size + sizeof (Lisp_Object)),
5870 bounded_number (total_vectors)),
5871 list4 (Qvector_slots, make_number (word_size),
5872 bounded_number (total_vector_slots),
5873 bounded_number (total_free_vector_slots)),
5874 list4 (Qfloats, make_number (sizeof (struct Lisp_Float)),
5875 bounded_number (total_floats),
5876 bounded_number (total_free_floats)),
5877 list4 (Qintervals, make_number (sizeof (struct interval)),
5878 bounded_number (total_intervals),
5879 bounded_number (total_free_intervals)),
5880 list3 (Qbuffers, make_number (sizeof (struct buffer)),
5881 bounded_number (total_buffers)),
5883 #ifdef DOUG_LEA_MALLOC
5884 list4 (Qheap, make_number (1024),
5885 bounded_number ((mallinfo ().uordblks + 1023) >> 10),
5886 bounded_number ((mallinfo ().fordblks + 1023) >> 10)),
5887 #endif
5889 retval = CALLMANY (Flist, total);
5891 /* GC is complete: now we can run our finalizer callbacks. */
5892 run_finalizers (&doomed_finalizers);
5894 if (!NILP (Vpost_gc_hook))
5896 ptrdiff_t gc_count = inhibit_garbage_collection ();
5897 safe_run_hooks (Qpost_gc_hook);
5898 unbind_to (gc_count, Qnil);
5901 /* Accumulate statistics. */
5902 if (FLOATP (Vgc_elapsed))
5904 struct timespec since_start = timespec_sub (current_timespec (), start);
5905 Vgc_elapsed = make_float (XFLOAT_DATA (Vgc_elapsed)
5906 + timespectod (since_start));
5909 gcs_done++;
5911 /* Collect profiling data. */
5912 if (profiler_memory_running)
5914 size_t swept = 0;
5915 size_t tot_after = total_bytes_of_live_objects ();
5916 if (tot_before > tot_after)
5917 swept = tot_before - tot_after;
5918 malloc_probe (swept);
5921 return retval;
5924 DEFUN ("garbage-collect", Fgarbage_collect, Sgarbage_collect, 0, 0, "",
5925 doc: /* Reclaim storage for Lisp objects no longer needed.
5926 Garbage collection happens automatically if you cons more than
5927 `gc-cons-threshold' bytes of Lisp data since previous garbage collection.
5928 `garbage-collect' normally returns a list with info on amount of space in use,
5929 where each entry has the form (NAME SIZE USED FREE), where:
5930 - NAME is a symbol describing the kind of objects this entry represents,
5931 - SIZE is the number of bytes used by each one,
5932 - USED is the number of those objects that were found live in the heap,
5933 - FREE is the number of those objects that are not live but that Emacs
5934 keeps around for future allocations (maybe because it does not know how
5935 to return them to the OS).
5936 However, if there was overflow in pure space, `garbage-collect'
5937 returns nil, because real GC can't be done.
5938 See Info node `(elisp)Garbage Collection'. */)
5939 (void)
5941 void *end;
5943 #ifdef HAVE___BUILTIN_UNWIND_INIT
5944 /* Force callee-saved registers and register windows onto the stack.
5945 This is the preferred method if available, obviating the need for
5946 machine dependent methods. */
5947 __builtin_unwind_init ();
5948 end = &end;
5949 #else /* not HAVE___BUILTIN_UNWIND_INIT */
5950 #ifndef GC_SAVE_REGISTERS_ON_STACK
5951 /* jmp_buf may not be aligned enough on darwin-ppc64 */
5952 union aligned_jmpbuf {
5953 Lisp_Object o;
5954 sys_jmp_buf j;
5955 } j;
5956 volatile bool stack_grows_down_p = (char *) &j > (char *) stack_base;
5957 #endif
5958 /* This trick flushes the register windows so that all the state of
5959 the process is contained in the stack. */
5960 /* Fixme: Code in the Boehm GC suggests flushing (with `flushrs') is
5961 needed on ia64 too. See mach_dep.c, where it also says inline
5962 assembler doesn't work with relevant proprietary compilers. */
5963 #ifdef __sparc__
5964 #if defined (__sparc64__) && defined (__FreeBSD__)
5965 /* FreeBSD does not have a ta 3 handler. */
5966 asm ("flushw");
5967 #else
5968 asm ("ta 3");
5969 #endif
5970 #endif
5972 /* Save registers that we need to see on the stack. We need to see
5973 registers used to hold register variables and registers used to
5974 pass parameters. */
5975 #ifdef GC_SAVE_REGISTERS_ON_STACK
5976 GC_SAVE_REGISTERS_ON_STACK (end);
5977 #else /* not GC_SAVE_REGISTERS_ON_STACK */
5979 #ifndef GC_SETJMP_WORKS /* If it hasn't been checked yet that
5980 setjmp will definitely work, test it
5981 and print a message with the result
5982 of the test. */
5983 if (!setjmp_tested_p)
5985 setjmp_tested_p = 1;
5986 test_setjmp ();
5988 #endif /* GC_SETJMP_WORKS */
5990 sys_setjmp (j.j);
5991 end = stack_grows_down_p ? (char *) &j + sizeof j : (char *) &j;
5992 #endif /* not GC_SAVE_REGISTERS_ON_STACK */
5993 #endif /* not HAVE___BUILTIN_UNWIND_INIT */
5994 return garbage_collect_1 (end);
5997 /* Mark Lisp objects in glyph matrix MATRIX. Currently the
5998 only interesting objects referenced from glyphs are strings. */
6000 static void
6001 mark_glyph_matrix (struct glyph_matrix *matrix)
6003 struct glyph_row *row = matrix->rows;
6004 struct glyph_row *end = row + matrix->nrows;
6006 for (; row < end; ++row)
6007 if (row->enabled_p)
6009 int area;
6010 for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
6012 struct glyph *glyph = row->glyphs[area];
6013 struct glyph *end_glyph = glyph + row->used[area];
6015 for (; glyph < end_glyph; ++glyph)
6016 if (STRINGP (glyph->object)
6017 && !STRING_MARKED_P (XSTRING (glyph->object)))
6018 mark_object (glyph->object);
6023 /* Mark reference to a Lisp_Object.
6024 If the object referred to has not been seen yet, recursively mark
6025 all the references contained in it. */
6027 #define LAST_MARKED_SIZE 500
6028 static Lisp_Object last_marked[LAST_MARKED_SIZE];
6029 static int last_marked_index;
6031 /* For debugging--call abort when we cdr down this many
6032 links of a list, in mark_object. In debugging,
6033 the call to abort will hit a breakpoint.
6034 Normally this is zero and the check never goes off. */
6035 ptrdiff_t mark_object_loop_halt EXTERNALLY_VISIBLE;
6037 static void
6038 mark_vectorlike (struct Lisp_Vector *ptr)
6040 ptrdiff_t size = ptr->header.size;
6041 ptrdiff_t i;
6043 eassert (!VECTOR_MARKED_P (ptr));
6044 VECTOR_MARK (ptr); /* Else mark it. */
6045 if (size & PSEUDOVECTOR_FLAG)
6046 size &= PSEUDOVECTOR_SIZE_MASK;
6048 /* Note that this size is not the memory-footprint size, but only
6049 the number of Lisp_Object fields that we should trace.
6050 The distinction is used e.g. by Lisp_Process which places extra
6051 non-Lisp_Object fields at the end of the structure... */
6052 for (i = 0; i < size; i++) /* ...and then mark its elements. */
6053 mark_object (ptr->contents[i]);
6056 /* Like mark_vectorlike but optimized for char-tables (and
6057 sub-char-tables) assuming that the contents are mostly integers or
6058 symbols. */
6060 static void
6061 mark_char_table (struct Lisp_Vector *ptr, enum pvec_type pvectype)
6063 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6064 /* Consult the Lisp_Sub_Char_Table layout before changing this. */
6065 int i, idx = (pvectype == PVEC_SUB_CHAR_TABLE ? SUB_CHAR_TABLE_OFFSET : 0);
6067 eassert (!VECTOR_MARKED_P (ptr));
6068 VECTOR_MARK (ptr);
6069 for (i = idx; i < size; i++)
6071 Lisp_Object val = ptr->contents[i];
6073 if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->gcmarkbit))
6074 continue;
6075 if (SUB_CHAR_TABLE_P (val))
6077 if (! VECTOR_MARKED_P (XVECTOR (val)))
6078 mark_char_table (XVECTOR (val), PVEC_SUB_CHAR_TABLE);
6080 else
6081 mark_object (val);
6085 NO_INLINE /* To reduce stack depth in mark_object. */
6086 static Lisp_Object
6087 mark_compiled (struct Lisp_Vector *ptr)
6089 int i, size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6091 VECTOR_MARK (ptr);
6092 for (i = 0; i < size; i++)
6093 if (i != COMPILED_CONSTANTS)
6094 mark_object (ptr->contents[i]);
6095 return size > COMPILED_CONSTANTS ? ptr->contents[COMPILED_CONSTANTS] : Qnil;
6098 /* Mark the chain of overlays starting at PTR. */
6100 static void
6101 mark_overlay (struct Lisp_Overlay *ptr)
6103 for (; ptr && !ptr->gcmarkbit; ptr = ptr->next)
6105 ptr->gcmarkbit = 1;
6106 /* These two are always markers and can be marked fast. */
6107 XMARKER (ptr->start)->gcmarkbit = 1;
6108 XMARKER (ptr->end)->gcmarkbit = 1;
6109 mark_object (ptr->plist);
6113 /* Mark Lisp_Objects and special pointers in BUFFER. */
6115 static void
6116 mark_buffer (struct buffer *buffer)
6118 /* This is handled much like other pseudovectors... */
6119 mark_vectorlike ((struct Lisp_Vector *) buffer);
6121 /* ...but there are some buffer-specific things. */
6123 MARK_INTERVAL_TREE (buffer_intervals (buffer));
6125 /* For now, we just don't mark the undo_list. It's done later in
6126 a special way just before the sweep phase, and after stripping
6127 some of its elements that are not needed any more. */
6129 mark_overlay (buffer->overlays_before);
6130 mark_overlay (buffer->overlays_after);
6132 /* If this is an indirect buffer, mark its base buffer. */
6133 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
6134 mark_buffer (buffer->base_buffer);
6137 /* Mark Lisp faces in the face cache C. */
6139 NO_INLINE /* To reduce stack depth in mark_object. */
6140 static void
6141 mark_face_cache (struct face_cache *c)
6143 if (c)
6145 int i, j;
6146 for (i = 0; i < c->used; ++i)
6148 struct face *face = FACE_FROM_ID_OR_NULL (c->f, i);
6150 if (face)
6152 if (face->font && !VECTOR_MARKED_P (face->font))
6153 mark_vectorlike ((struct Lisp_Vector *) face->font);
6155 for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
6156 mark_object (face->lface[j]);
6162 NO_INLINE /* To reduce stack depth in mark_object. */
6163 static void
6164 mark_localized_symbol (struct Lisp_Symbol *ptr)
6166 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
6167 Lisp_Object where = blv->where;
6168 /* If the value is set up for a killed buffer or deleted
6169 frame, restore its global binding. If the value is
6170 forwarded to a C variable, either it's not a Lisp_Object
6171 var, or it's staticpro'd already. */
6172 if ((BUFFERP (where) && !BUFFER_LIVE_P (XBUFFER (where)))
6173 || (FRAMEP (where) && !FRAME_LIVE_P (XFRAME (where))))
6174 swap_in_global_binding (ptr);
6175 mark_object (blv->where);
6176 mark_object (blv->valcell);
6177 mark_object (blv->defcell);
6180 NO_INLINE /* To reduce stack depth in mark_object. */
6181 static void
6182 mark_save_value (struct Lisp_Save_Value *ptr)
6184 /* If `save_type' is zero, `data[0].pointer' is the address
6185 of a memory area containing `data[1].integer' potential
6186 Lisp_Objects. */
6187 if (ptr->save_type == SAVE_TYPE_MEMORY)
6189 Lisp_Object *p = ptr->data[0].pointer;
6190 ptrdiff_t nelt;
6191 for (nelt = ptr->data[1].integer; nelt > 0; nelt--, p++)
6192 mark_maybe_object (*p);
6194 else
6196 /* Find Lisp_Objects in `data[N]' slots and mark them. */
6197 int i;
6198 for (i = 0; i < SAVE_VALUE_SLOTS; i++)
6199 if (save_type (ptr, i) == SAVE_OBJECT)
6200 mark_object (ptr->data[i].object);
6204 /* Remove killed buffers or items whose car is a killed buffer from
6205 LIST, and mark other items. Return changed LIST, which is marked. */
6207 static Lisp_Object
6208 mark_discard_killed_buffers (Lisp_Object list)
6210 Lisp_Object tail, *prev = &list;
6212 for (tail = list; CONSP (tail) && !CONS_MARKED_P (XCONS (tail));
6213 tail = XCDR (tail))
6215 Lisp_Object tem = XCAR (tail);
6216 if (CONSP (tem))
6217 tem = XCAR (tem);
6218 if (BUFFERP (tem) && !BUFFER_LIVE_P (XBUFFER (tem)))
6219 *prev = XCDR (tail);
6220 else
6222 CONS_MARK (XCONS (tail));
6223 mark_object (XCAR (tail));
6224 prev = xcdr_addr (tail);
6227 mark_object (tail);
6228 return list;
6231 /* Determine type of generic Lisp_Object and mark it accordingly.
6233 This function implements a straightforward depth-first marking
6234 algorithm and so the recursion depth may be very high (a few
6235 tens of thousands is not uncommon). To minimize stack usage,
6236 a few cold paths are moved out to NO_INLINE functions above.
6237 In general, inlining them doesn't help you to gain more speed. */
6239 void
6240 mark_object (Lisp_Object arg)
6242 register Lisp_Object obj;
6243 void *po;
6244 #ifdef GC_CHECK_MARKED_OBJECTS
6245 struct mem_node *m;
6246 #endif
6247 ptrdiff_t cdr_count = 0;
6249 obj = arg;
6250 loop:
6252 po = XPNTR (obj);
6253 if (PURE_P (po))
6254 return;
6256 last_marked[last_marked_index++] = obj;
6257 if (last_marked_index == LAST_MARKED_SIZE)
6258 last_marked_index = 0;
6260 /* Perform some sanity checks on the objects marked here. Abort if
6261 we encounter an object we know is bogus. This increases GC time
6262 by ~80%. */
6263 #ifdef GC_CHECK_MARKED_OBJECTS
6265 /* Check that the object pointed to by PO is known to be a Lisp
6266 structure allocated from the heap. */
6267 #define CHECK_ALLOCATED() \
6268 do { \
6269 m = mem_find (po); \
6270 if (m == MEM_NIL) \
6271 emacs_abort (); \
6272 } while (0)
6274 /* Check that the object pointed to by PO is live, using predicate
6275 function LIVEP. */
6276 #define CHECK_LIVE(LIVEP) \
6277 do { \
6278 if (!LIVEP (m, po)) \
6279 emacs_abort (); \
6280 } while (0)
6282 /* Check both of the above conditions, for non-symbols. */
6283 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) \
6284 do { \
6285 CHECK_ALLOCATED (); \
6286 CHECK_LIVE (LIVEP); \
6287 } while (0) \
6289 /* Check both of the above conditions, for symbols. */
6290 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() \
6291 do { \
6292 if (!c_symbol_p (ptr)) \
6294 CHECK_ALLOCATED (); \
6295 CHECK_LIVE (live_symbol_p); \
6297 } while (0) \
6299 #else /* not GC_CHECK_MARKED_OBJECTS */
6301 #define CHECK_LIVE(LIVEP) ((void) 0)
6302 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) ((void) 0)
6303 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() ((void) 0)
6305 #endif /* not GC_CHECK_MARKED_OBJECTS */
6307 switch (XTYPE (obj))
6309 case Lisp_String:
6311 register struct Lisp_String *ptr = XSTRING (obj);
6312 if (STRING_MARKED_P (ptr))
6313 break;
6314 CHECK_ALLOCATED_AND_LIVE (live_string_p);
6315 MARK_STRING (ptr);
6316 MARK_INTERVAL_TREE (ptr->intervals);
6317 #ifdef GC_CHECK_STRING_BYTES
6318 /* Check that the string size recorded in the string is the
6319 same as the one recorded in the sdata structure. */
6320 string_bytes (ptr);
6321 #endif /* GC_CHECK_STRING_BYTES */
6323 break;
6325 case Lisp_Vectorlike:
6327 register struct Lisp_Vector *ptr = XVECTOR (obj);
6328 register ptrdiff_t pvectype;
6330 if (VECTOR_MARKED_P (ptr))
6331 break;
6333 #ifdef GC_CHECK_MARKED_OBJECTS
6334 m = mem_find (po);
6335 if (m == MEM_NIL && !SUBRP (obj))
6336 emacs_abort ();
6337 #endif /* GC_CHECK_MARKED_OBJECTS */
6339 if (ptr->header.size & PSEUDOVECTOR_FLAG)
6340 pvectype = ((ptr->header.size & PVEC_TYPE_MASK)
6341 >> PSEUDOVECTOR_AREA_BITS);
6342 else
6343 pvectype = PVEC_NORMAL_VECTOR;
6345 if (pvectype != PVEC_SUBR && pvectype != PVEC_BUFFER)
6346 CHECK_LIVE (live_vector_p);
6348 switch (pvectype)
6350 case PVEC_BUFFER:
6351 #ifdef GC_CHECK_MARKED_OBJECTS
6353 struct buffer *b;
6354 FOR_EACH_BUFFER (b)
6355 if (b == po)
6356 break;
6357 if (b == NULL)
6358 emacs_abort ();
6360 #endif /* GC_CHECK_MARKED_OBJECTS */
6361 mark_buffer ((struct buffer *) ptr);
6362 break;
6364 case PVEC_COMPILED:
6365 /* Although we could treat this just like a vector, mark_compiled
6366 returns the COMPILED_CONSTANTS element, which is marked at the
6367 next iteration of goto-loop here. This is done to avoid a few
6368 recursive calls to mark_object. */
6369 obj = mark_compiled (ptr);
6370 if (!NILP (obj))
6371 goto loop;
6372 break;
6374 case PVEC_FRAME:
6376 struct frame *f = (struct frame *) ptr;
6378 mark_vectorlike (ptr);
6379 mark_face_cache (f->face_cache);
6380 #ifdef HAVE_WINDOW_SYSTEM
6381 if (FRAME_WINDOW_P (f) && FRAME_X_OUTPUT (f))
6383 struct font *font = FRAME_FONT (f);
6385 if (font && !VECTOR_MARKED_P (font))
6386 mark_vectorlike ((struct Lisp_Vector *) font);
6388 #endif
6390 break;
6392 case PVEC_WINDOW:
6394 struct window *w = (struct window *) ptr;
6396 mark_vectorlike (ptr);
6398 /* Mark glyph matrices, if any. Marking window
6399 matrices is sufficient because frame matrices
6400 use the same glyph memory. */
6401 if (w->current_matrix)
6403 mark_glyph_matrix (w->current_matrix);
6404 mark_glyph_matrix (w->desired_matrix);
6407 /* Filter out killed buffers from both buffer lists
6408 in attempt to help GC to reclaim killed buffers faster.
6409 We can do it elsewhere for live windows, but this is the
6410 best place to do it for dead windows. */
6411 wset_prev_buffers
6412 (w, mark_discard_killed_buffers (w->prev_buffers));
6413 wset_next_buffers
6414 (w, mark_discard_killed_buffers (w->next_buffers));
6416 break;
6418 case PVEC_HASH_TABLE:
6420 struct Lisp_Hash_Table *h = (struct Lisp_Hash_Table *) ptr;
6422 mark_vectorlike (ptr);
6423 mark_object (h->test.name);
6424 mark_object (h->test.user_hash_function);
6425 mark_object (h->test.user_cmp_function);
6426 /* If hash table is not weak, mark all keys and values.
6427 For weak tables, mark only the vector. */
6428 if (NILP (h->weak))
6429 mark_object (h->key_and_value);
6430 else
6431 VECTOR_MARK (XVECTOR (h->key_and_value));
6433 break;
6435 case PVEC_CHAR_TABLE:
6436 case PVEC_SUB_CHAR_TABLE:
6437 mark_char_table (ptr, (enum pvec_type) pvectype);
6438 break;
6440 case PVEC_BOOL_VECTOR:
6441 /* No Lisp_Objects to mark in a bool vector. */
6442 VECTOR_MARK (ptr);
6443 break;
6445 case PVEC_SUBR:
6446 break;
6448 case PVEC_FREE:
6449 emacs_abort ();
6451 default:
6452 mark_vectorlike (ptr);
6455 break;
6457 case Lisp_Symbol:
6459 register struct Lisp_Symbol *ptr = XSYMBOL (obj);
6460 nextsym:
6461 if (ptr->gcmarkbit)
6462 break;
6463 CHECK_ALLOCATED_AND_LIVE_SYMBOL ();
6464 ptr->gcmarkbit = 1;
6465 /* Attempt to catch bogus objects. */
6466 eassert (valid_lisp_object_p (ptr->function));
6467 mark_object (ptr->function);
6468 mark_object (ptr->plist);
6469 switch (ptr->redirect)
6471 case SYMBOL_PLAINVAL: mark_object (SYMBOL_VAL (ptr)); break;
6472 case SYMBOL_VARALIAS:
6474 Lisp_Object tem;
6475 XSETSYMBOL (tem, SYMBOL_ALIAS (ptr));
6476 mark_object (tem);
6477 break;
6479 case SYMBOL_LOCALIZED:
6480 mark_localized_symbol (ptr);
6481 break;
6482 case SYMBOL_FORWARDED:
6483 /* If the value is forwarded to a buffer or keyboard field,
6484 these are marked when we see the corresponding object.
6485 And if it's forwarded to a C variable, either it's not
6486 a Lisp_Object var, or it's staticpro'd already. */
6487 break;
6488 default: emacs_abort ();
6490 if (!PURE_P (XSTRING (ptr->name)))
6491 MARK_STRING (XSTRING (ptr->name));
6492 MARK_INTERVAL_TREE (string_intervals (ptr->name));
6493 /* Inner loop to mark next symbol in this bucket, if any. */
6494 po = ptr = ptr->next;
6495 if (ptr)
6496 goto nextsym;
6498 break;
6500 case Lisp_Misc:
6501 CHECK_ALLOCATED_AND_LIVE (live_misc_p);
6503 if (XMISCANY (obj)->gcmarkbit)
6504 break;
6506 switch (XMISCTYPE (obj))
6508 case Lisp_Misc_Marker:
6509 /* DO NOT mark thru the marker's chain.
6510 The buffer's markers chain does not preserve markers from gc;
6511 instead, markers are removed from the chain when freed by gc. */
6512 XMISCANY (obj)->gcmarkbit = 1;
6513 break;
6515 case Lisp_Misc_Save_Value:
6516 XMISCANY (obj)->gcmarkbit = 1;
6517 mark_save_value (XSAVE_VALUE (obj));
6518 break;
6520 case Lisp_Misc_Overlay:
6521 mark_overlay (XOVERLAY (obj));
6522 break;
6524 case Lisp_Misc_Finalizer:
6525 XMISCANY (obj)->gcmarkbit = true;
6526 mark_object (XFINALIZER (obj)->function);
6527 break;
6529 #ifdef HAVE_MODULES
6530 case Lisp_Misc_User_Ptr:
6531 XMISCANY (obj)->gcmarkbit = true;
6532 break;
6533 #endif
6535 default:
6536 emacs_abort ();
6538 break;
6540 case Lisp_Cons:
6542 register struct Lisp_Cons *ptr = XCONS (obj);
6543 if (CONS_MARKED_P (ptr))
6544 break;
6545 CHECK_ALLOCATED_AND_LIVE (live_cons_p);
6546 CONS_MARK (ptr);
6547 /* If the cdr is nil, avoid recursion for the car. */
6548 if (EQ (ptr->u.cdr, Qnil))
6550 obj = ptr->car;
6551 cdr_count = 0;
6552 goto loop;
6554 mark_object (ptr->car);
6555 obj = ptr->u.cdr;
6556 cdr_count++;
6557 if (cdr_count == mark_object_loop_halt)
6558 emacs_abort ();
6559 goto loop;
6562 case Lisp_Float:
6563 CHECK_ALLOCATED_AND_LIVE (live_float_p);
6564 FLOAT_MARK (XFLOAT (obj));
6565 break;
6567 case_Lisp_Int:
6568 break;
6570 default:
6571 emacs_abort ();
6574 #undef CHECK_LIVE
6575 #undef CHECK_ALLOCATED
6576 #undef CHECK_ALLOCATED_AND_LIVE
6578 /* Mark the Lisp pointers in the terminal objects.
6579 Called by Fgarbage_collect. */
6581 static void
6582 mark_terminals (void)
6584 struct terminal *t;
6585 for (t = terminal_list; t; t = t->next_terminal)
6587 eassert (t->name != NULL);
6588 #ifdef HAVE_WINDOW_SYSTEM
6589 /* If a terminal object is reachable from a stacpro'ed object,
6590 it might have been marked already. Make sure the image cache
6591 gets marked. */
6592 mark_image_cache (t->image_cache);
6593 #endif /* HAVE_WINDOW_SYSTEM */
6594 if (!VECTOR_MARKED_P (t))
6595 mark_vectorlike ((struct Lisp_Vector *)t);
6601 /* Value is non-zero if OBJ will survive the current GC because it's
6602 either marked or does not need to be marked to survive. */
6604 bool
6605 survives_gc_p (Lisp_Object obj)
6607 bool survives_p;
6609 switch (XTYPE (obj))
6611 case_Lisp_Int:
6612 survives_p = 1;
6613 break;
6615 case Lisp_Symbol:
6616 survives_p = XSYMBOL (obj)->gcmarkbit;
6617 break;
6619 case Lisp_Misc:
6620 survives_p = XMISCANY (obj)->gcmarkbit;
6621 break;
6623 case Lisp_String:
6624 survives_p = STRING_MARKED_P (XSTRING (obj));
6625 break;
6627 case Lisp_Vectorlike:
6628 survives_p = SUBRP (obj) || VECTOR_MARKED_P (XVECTOR (obj));
6629 break;
6631 case Lisp_Cons:
6632 survives_p = CONS_MARKED_P (XCONS (obj));
6633 break;
6635 case Lisp_Float:
6636 survives_p = FLOAT_MARKED_P (XFLOAT (obj));
6637 break;
6639 default:
6640 emacs_abort ();
6643 return survives_p || PURE_P (XPNTR (obj));
6649 NO_INLINE /* For better stack traces */
6650 static void
6651 sweep_conses (void)
6653 struct cons_block *cblk;
6654 struct cons_block **cprev = &cons_block;
6655 int lim = cons_block_index;
6656 EMACS_INT num_free = 0, num_used = 0;
6658 cons_free_list = 0;
6660 for (cblk = cons_block; cblk; cblk = *cprev)
6662 int i = 0;
6663 int this_free = 0;
6664 int ilim = (lim + BITS_PER_BITS_WORD - 1) / BITS_PER_BITS_WORD;
6666 /* Scan the mark bits an int at a time. */
6667 for (i = 0; i < ilim; i++)
6669 if (cblk->gcmarkbits[i] == BITS_WORD_MAX)
6671 /* Fast path - all cons cells for this int are marked. */
6672 cblk->gcmarkbits[i] = 0;
6673 num_used += BITS_PER_BITS_WORD;
6675 else
6677 /* Some cons cells for this int are not marked.
6678 Find which ones, and free them. */
6679 int start, pos, stop;
6681 start = i * BITS_PER_BITS_WORD;
6682 stop = lim - start;
6683 if (stop > BITS_PER_BITS_WORD)
6684 stop = BITS_PER_BITS_WORD;
6685 stop += start;
6687 for (pos = start; pos < stop; pos++)
6689 if (!CONS_MARKED_P (&cblk->conses[pos]))
6691 this_free++;
6692 cblk->conses[pos].u.chain = cons_free_list;
6693 cons_free_list = &cblk->conses[pos];
6694 cons_free_list->car = Vdead;
6696 else
6698 num_used++;
6699 CONS_UNMARK (&cblk->conses[pos]);
6705 lim = CONS_BLOCK_SIZE;
6706 /* If this block contains only free conses and we have already
6707 seen more than two blocks worth of free conses then deallocate
6708 this block. */
6709 if (this_free == CONS_BLOCK_SIZE && num_free > CONS_BLOCK_SIZE)
6711 *cprev = cblk->next;
6712 /* Unhook from the free list. */
6713 cons_free_list = cblk->conses[0].u.chain;
6714 lisp_align_free (cblk);
6716 else
6718 num_free += this_free;
6719 cprev = &cblk->next;
6722 total_conses = num_used;
6723 total_free_conses = num_free;
6726 NO_INLINE /* For better stack traces */
6727 static void
6728 sweep_floats (void)
6730 register struct float_block *fblk;
6731 struct float_block **fprev = &float_block;
6732 register int lim = float_block_index;
6733 EMACS_INT num_free = 0, num_used = 0;
6735 float_free_list = 0;
6737 for (fblk = float_block; fblk; fblk = *fprev)
6739 register int i;
6740 int this_free = 0;
6741 for (i = 0; i < lim; i++)
6742 if (!FLOAT_MARKED_P (&fblk->floats[i]))
6744 this_free++;
6745 fblk->floats[i].u.chain = float_free_list;
6746 float_free_list = &fblk->floats[i];
6748 else
6750 num_used++;
6751 FLOAT_UNMARK (&fblk->floats[i]);
6753 lim = FLOAT_BLOCK_SIZE;
6754 /* If this block contains only free floats and we have already
6755 seen more than two blocks worth of free floats then deallocate
6756 this block. */
6757 if (this_free == FLOAT_BLOCK_SIZE && num_free > FLOAT_BLOCK_SIZE)
6759 *fprev = fblk->next;
6760 /* Unhook from the free list. */
6761 float_free_list = fblk->floats[0].u.chain;
6762 lisp_align_free (fblk);
6764 else
6766 num_free += this_free;
6767 fprev = &fblk->next;
6770 total_floats = num_used;
6771 total_free_floats = num_free;
6774 NO_INLINE /* For better stack traces */
6775 static void
6776 sweep_intervals (void)
6778 register struct interval_block *iblk;
6779 struct interval_block **iprev = &interval_block;
6780 register int lim = interval_block_index;
6781 EMACS_INT num_free = 0, num_used = 0;
6783 interval_free_list = 0;
6785 for (iblk = interval_block; iblk; iblk = *iprev)
6787 register int i;
6788 int this_free = 0;
6790 for (i = 0; i < lim; i++)
6792 if (!iblk->intervals[i].gcmarkbit)
6794 set_interval_parent (&iblk->intervals[i], interval_free_list);
6795 interval_free_list = &iblk->intervals[i];
6796 this_free++;
6798 else
6800 num_used++;
6801 iblk->intervals[i].gcmarkbit = 0;
6804 lim = INTERVAL_BLOCK_SIZE;
6805 /* If this block contains only free intervals and we have already
6806 seen more than two blocks worth of free intervals then
6807 deallocate this block. */
6808 if (this_free == INTERVAL_BLOCK_SIZE && num_free > INTERVAL_BLOCK_SIZE)
6810 *iprev = iblk->next;
6811 /* Unhook from the free list. */
6812 interval_free_list = INTERVAL_PARENT (&iblk->intervals[0]);
6813 lisp_free (iblk);
6815 else
6817 num_free += this_free;
6818 iprev = &iblk->next;
6821 total_intervals = num_used;
6822 total_free_intervals = num_free;
6825 NO_INLINE /* For better stack traces */
6826 static void
6827 sweep_symbols (void)
6829 struct symbol_block *sblk;
6830 struct symbol_block **sprev = &symbol_block;
6831 int lim = symbol_block_index;
6832 EMACS_INT num_free = 0, num_used = ARRAYELTS (lispsym);
6834 symbol_free_list = NULL;
6836 for (int i = 0; i < ARRAYELTS (lispsym); i++)
6837 lispsym[i].gcmarkbit = 0;
6839 for (sblk = symbol_block; sblk; sblk = *sprev)
6841 int this_free = 0;
6842 union aligned_Lisp_Symbol *sym = sblk->symbols;
6843 union aligned_Lisp_Symbol *end = sym + lim;
6845 for (; sym < end; ++sym)
6847 if (!sym->s.gcmarkbit)
6849 if (sym->s.redirect == SYMBOL_LOCALIZED)
6850 xfree (SYMBOL_BLV (&sym->s));
6851 sym->s.next = symbol_free_list;
6852 symbol_free_list = &sym->s;
6853 symbol_free_list->function = Vdead;
6854 ++this_free;
6856 else
6858 ++num_used;
6859 sym->s.gcmarkbit = 0;
6860 /* Attempt to catch bogus objects. */
6861 eassert (valid_lisp_object_p (sym->s.function));
6865 lim = SYMBOL_BLOCK_SIZE;
6866 /* If this block contains only free symbols and we have already
6867 seen more than two blocks worth of free symbols then deallocate
6868 this block. */
6869 if (this_free == SYMBOL_BLOCK_SIZE && num_free > SYMBOL_BLOCK_SIZE)
6871 *sprev = sblk->next;
6872 /* Unhook from the free list. */
6873 symbol_free_list = sblk->symbols[0].s.next;
6874 lisp_free (sblk);
6876 else
6878 num_free += this_free;
6879 sprev = &sblk->next;
6882 total_symbols = num_used;
6883 total_free_symbols = num_free;
6886 NO_INLINE /* For better stack traces. */
6887 static void
6888 sweep_misc (void)
6890 register struct marker_block *mblk;
6891 struct marker_block **mprev = &marker_block;
6892 register int lim = marker_block_index;
6893 EMACS_INT num_free = 0, num_used = 0;
6895 /* Put all unmarked misc's on free list. For a marker, first
6896 unchain it from the buffer it points into. */
6898 marker_free_list = 0;
6900 for (mblk = marker_block; mblk; mblk = *mprev)
6902 register int i;
6903 int this_free = 0;
6905 for (i = 0; i < lim; i++)
6907 if (!mblk->markers[i].m.u_any.gcmarkbit)
6909 if (mblk->markers[i].m.u_any.type == Lisp_Misc_Marker)
6910 unchain_marker (&mblk->markers[i].m.u_marker);
6911 else if (mblk->markers[i].m.u_any.type == Lisp_Misc_Finalizer)
6912 unchain_finalizer (&mblk->markers[i].m.u_finalizer);
6913 #ifdef HAVE_MODULES
6914 else if (mblk->markers[i].m.u_any.type == Lisp_Misc_User_Ptr)
6916 struct Lisp_User_Ptr *uptr = &mblk->markers[i].m.u_user_ptr;
6917 uptr->finalizer (uptr->p);
6919 #endif
6920 /* Set the type of the freed object to Lisp_Misc_Free.
6921 We could leave the type alone, since nobody checks it,
6922 but this might catch bugs faster. */
6923 mblk->markers[i].m.u_marker.type = Lisp_Misc_Free;
6924 mblk->markers[i].m.u_free.chain = marker_free_list;
6925 marker_free_list = &mblk->markers[i].m;
6926 this_free++;
6928 else
6930 num_used++;
6931 mblk->markers[i].m.u_any.gcmarkbit = 0;
6934 lim = MARKER_BLOCK_SIZE;
6935 /* If this block contains only free markers and we have already
6936 seen more than two blocks worth of free markers then deallocate
6937 this block. */
6938 if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE)
6940 *mprev = mblk->next;
6941 /* Unhook from the free list. */
6942 marker_free_list = mblk->markers[0].m.u_free.chain;
6943 lisp_free (mblk);
6945 else
6947 num_free += this_free;
6948 mprev = &mblk->next;
6952 total_markers = num_used;
6953 total_free_markers = num_free;
6956 NO_INLINE /* For better stack traces */
6957 static void
6958 sweep_buffers (void)
6960 register struct buffer *buffer, **bprev = &all_buffers;
6962 total_buffers = 0;
6963 for (buffer = all_buffers; buffer; buffer = *bprev)
6964 if (!VECTOR_MARKED_P (buffer))
6966 *bprev = buffer->next;
6967 lisp_free (buffer);
6969 else
6971 VECTOR_UNMARK (buffer);
6972 /* Do not use buffer_(set|get)_intervals here. */
6973 buffer->text->intervals = balance_intervals (buffer->text->intervals);
6974 total_buffers++;
6975 bprev = &buffer->next;
6979 /* Sweep: find all structures not marked, and free them. */
6980 static void
6981 gc_sweep (void)
6983 /* Remove or mark entries in weak hash tables.
6984 This must be done before any object is unmarked. */
6985 sweep_weak_hash_tables ();
6987 sweep_strings ();
6988 check_string_bytes (!noninteractive);
6989 sweep_conses ();
6990 sweep_floats ();
6991 sweep_intervals ();
6992 sweep_symbols ();
6993 sweep_misc ();
6994 sweep_buffers ();
6995 sweep_vectors ();
6996 check_string_bytes (!noninteractive);
6999 DEFUN ("memory-info", Fmemory_info, Smemory_info, 0, 0, 0,
7000 doc: /* Return a list of (TOTAL-RAM FREE-RAM TOTAL-SWAP FREE-SWAP).
7001 All values are in Kbytes. If there is no swap space,
7002 last two values are zero. If the system is not supported
7003 or memory information can't be obtained, return nil. */)
7004 (void)
7006 #if defined HAVE_LINUX_SYSINFO
7007 struct sysinfo si;
7008 uintmax_t units;
7010 if (sysinfo (&si))
7011 return Qnil;
7012 #ifdef LINUX_SYSINFO_UNIT
7013 units = si.mem_unit;
7014 #else
7015 units = 1;
7016 #endif
7017 return list4i ((uintmax_t) si.totalram * units / 1024,
7018 (uintmax_t) si.freeram * units / 1024,
7019 (uintmax_t) si.totalswap * units / 1024,
7020 (uintmax_t) si.freeswap * units / 1024);
7021 #elif defined WINDOWSNT
7022 unsigned long long totalram, freeram, totalswap, freeswap;
7024 if (w32_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7025 return list4i ((uintmax_t) totalram / 1024,
7026 (uintmax_t) freeram / 1024,
7027 (uintmax_t) totalswap / 1024,
7028 (uintmax_t) freeswap / 1024);
7029 else
7030 return Qnil;
7031 #elif defined MSDOS
7032 unsigned long totalram, freeram, totalswap, freeswap;
7034 if (dos_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7035 return list4i ((uintmax_t) totalram / 1024,
7036 (uintmax_t) freeram / 1024,
7037 (uintmax_t) totalswap / 1024,
7038 (uintmax_t) freeswap / 1024);
7039 else
7040 return Qnil;
7041 #else /* not HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7042 /* FIXME: add more systems. */
7043 return Qnil;
7044 #endif /* HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7047 /* Debugging aids. */
7049 DEFUN ("memory-limit", Fmemory_limit, Smemory_limit, 0, 0, 0,
7050 doc: /* Return the address of the last byte Emacs has allocated, divided by 1024.
7051 This may be helpful in debugging Emacs's memory usage.
7052 We divide the value by 1024 to make sure it fits in a Lisp integer. */)
7053 (void)
7055 Lisp_Object end;
7057 #ifdef HAVE_NS
7058 /* Avoid warning. sbrk has no relation to memory allocated anyway. */
7059 XSETINT (end, 0);
7060 #else
7061 XSETINT (end, (intptr_t) (char *) sbrk (0) / 1024);
7062 #endif
7064 return end;
7067 DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0,
7068 doc: /* Return a list of counters that measure how much consing there has been.
7069 Each of these counters increments for a certain kind of object.
7070 The counters wrap around from the largest positive integer to zero.
7071 Garbage collection does not decrease them.
7072 The elements of the value are as follows:
7073 (CONSES FLOATS VECTOR-CELLS SYMBOLS STRING-CHARS MISCS INTERVALS STRINGS)
7074 All are in units of 1 = one object consed
7075 except for VECTOR-CELLS and STRING-CHARS, which count the total length of
7076 objects consed.
7077 MISCS include overlays, markers, and some internal types.
7078 Frames, windows, buffers, and subprocesses count as vectors
7079 (but the contents of a buffer's text do not count here). */)
7080 (void)
7082 return listn (CONSTYPE_HEAP, 8,
7083 bounded_number (cons_cells_consed),
7084 bounded_number (floats_consed),
7085 bounded_number (vector_cells_consed),
7086 bounded_number (symbols_consed),
7087 bounded_number (string_chars_consed),
7088 bounded_number (misc_objects_consed),
7089 bounded_number (intervals_consed),
7090 bounded_number (strings_consed));
7093 static bool
7094 symbol_uses_obj (Lisp_Object symbol, Lisp_Object obj)
7096 struct Lisp_Symbol *sym = XSYMBOL (symbol);
7097 Lisp_Object val = find_symbol_value (symbol);
7098 return (EQ (val, obj)
7099 || EQ (sym->function, obj)
7100 || (!NILP (sym->function)
7101 && COMPILEDP (sym->function)
7102 && EQ (AREF (sym->function, COMPILED_BYTECODE), obj))
7103 || (!NILP (val)
7104 && COMPILEDP (val)
7105 && EQ (AREF (val, COMPILED_BYTECODE), obj)));
7108 /* Find at most FIND_MAX symbols which have OBJ as their value or
7109 function. This is used in gdbinit's `xwhichsymbols' command. */
7111 Lisp_Object
7112 which_symbols (Lisp_Object obj, EMACS_INT find_max)
7114 struct symbol_block *sblk;
7115 ptrdiff_t gc_count = inhibit_garbage_collection ();
7116 Lisp_Object found = Qnil;
7118 if (! DEADP (obj))
7120 for (int i = 0; i < ARRAYELTS (lispsym); i++)
7122 Lisp_Object sym = builtin_lisp_symbol (i);
7123 if (symbol_uses_obj (sym, obj))
7125 found = Fcons (sym, found);
7126 if (--find_max == 0)
7127 goto out;
7131 for (sblk = symbol_block; sblk; sblk = sblk->next)
7133 union aligned_Lisp_Symbol *aligned_sym = sblk->symbols;
7134 int bn;
7136 for (bn = 0; bn < SYMBOL_BLOCK_SIZE; bn++, aligned_sym++)
7138 if (sblk == symbol_block && bn >= symbol_block_index)
7139 break;
7141 Lisp_Object sym = make_lisp_symbol (&aligned_sym->s);
7142 if (symbol_uses_obj (sym, obj))
7144 found = Fcons (sym, found);
7145 if (--find_max == 0)
7146 goto out;
7152 out:
7153 unbind_to (gc_count, Qnil);
7154 return found;
7157 #ifdef SUSPICIOUS_OBJECT_CHECKING
7159 static void *
7160 find_suspicious_object_in_range (void *begin, void *end)
7162 char *begin_a = begin;
7163 char *end_a = end;
7164 int i;
7166 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7168 char *suspicious_object = suspicious_objects[i];
7169 if (begin_a <= suspicious_object && suspicious_object < end_a)
7170 return suspicious_object;
7173 return NULL;
7176 static void
7177 note_suspicious_free (void* ptr)
7179 struct suspicious_free_record* rec;
7181 rec = &suspicious_free_history[suspicious_free_history_index++];
7182 if (suspicious_free_history_index ==
7183 ARRAYELTS (suspicious_free_history))
7185 suspicious_free_history_index = 0;
7188 memset (rec, 0, sizeof (*rec));
7189 rec->suspicious_object = ptr;
7190 backtrace (&rec->backtrace[0], ARRAYELTS (rec->backtrace));
7193 static void
7194 detect_suspicious_free (void* ptr)
7196 int i;
7198 eassert (ptr != NULL);
7200 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7201 if (suspicious_objects[i] == ptr)
7203 note_suspicious_free (ptr);
7204 suspicious_objects[i] = NULL;
7208 #endif /* SUSPICIOUS_OBJECT_CHECKING */
7210 DEFUN ("suspicious-object", Fsuspicious_object, Ssuspicious_object, 1, 1, 0,
7211 doc: /* Return OBJ, maybe marking it for extra scrutiny.
7212 If Emacs is compiled with suspicious object checking, capture
7213 a stack trace when OBJ is freed in order to help track down
7214 garbage collection bugs. Otherwise, do nothing and return OBJ. */)
7215 (Lisp_Object obj)
7217 #ifdef SUSPICIOUS_OBJECT_CHECKING
7218 /* Right now, we care only about vectors. */
7219 if (VECTORLIKEP (obj))
7221 suspicious_objects[suspicious_object_index++] = XVECTOR (obj);
7222 if (suspicious_object_index == ARRAYELTS (suspicious_objects))
7223 suspicious_object_index = 0;
7225 #endif
7226 return obj;
7229 #ifdef ENABLE_CHECKING
7231 bool suppress_checking;
7233 void
7234 die (const char *msg, const char *file, int line)
7236 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: assertion failed: %s\r\n",
7237 file, line, msg);
7238 terminate_due_to_signal (SIGABRT, INT_MAX);
7241 #endif /* ENABLE_CHECKING */
7243 #if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
7245 /* Stress alloca with inconveniently sized requests and check
7246 whether all allocated areas may be used for Lisp_Object. */
7248 NO_INLINE static void
7249 verify_alloca (void)
7251 int i;
7252 enum { ALLOCA_CHECK_MAX = 256 };
7253 /* Start from size of the smallest Lisp object. */
7254 for (i = sizeof (struct Lisp_Cons); i <= ALLOCA_CHECK_MAX; i++)
7256 void *ptr = alloca (i);
7257 make_lisp_ptr (ptr, Lisp_Cons);
7261 #else /* not ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7263 #define verify_alloca() ((void) 0)
7265 #endif /* ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7267 /* Initialization. */
7269 void
7270 init_alloc_once (void)
7272 /* Even though Qt's contents are not set up, its address is known. */
7273 Vpurify_flag = Qt;
7275 purebeg = PUREBEG;
7276 pure_size = PURESIZE;
7278 verify_alloca ();
7279 init_finalizer_list (&finalizers);
7280 init_finalizer_list (&doomed_finalizers);
7282 mem_init ();
7283 Vdead = make_pure_string ("DEAD", 4, 4, 0);
7285 #ifdef DOUG_LEA_MALLOC
7286 mallopt (M_TRIM_THRESHOLD, 128 * 1024); /* Trim threshold. */
7287 mallopt (M_MMAP_THRESHOLD, 64 * 1024); /* Mmap threshold. */
7288 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); /* Max. number of mmap'ed areas. */
7289 #endif
7290 init_strings ();
7291 init_vectors ();
7293 refill_memory_reserve ();
7294 gc_cons_threshold = GC_DEFAULT_THRESHOLD;
7297 void
7298 init_alloc (void)
7300 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
7301 setjmp_tested_p = longjmps_done = 0;
7302 #endif
7303 Vgc_elapsed = make_float (0.0);
7304 gcs_done = 0;
7306 #if USE_VALGRIND
7307 valgrind_p = RUNNING_ON_VALGRIND != 0;
7308 #endif
7311 void
7312 syms_of_alloc (void)
7314 DEFVAR_INT ("gc-cons-threshold", gc_cons_threshold,
7315 doc: /* Number of bytes of consing between garbage collections.
7316 Garbage collection can happen automatically once this many bytes have been
7317 allocated since the last garbage collection. All data types count.
7319 Garbage collection happens automatically only when `eval' is called.
7321 By binding this temporarily to a large number, you can effectively
7322 prevent garbage collection during a part of the program.
7323 See also `gc-cons-percentage'. */);
7325 DEFVAR_LISP ("gc-cons-percentage", Vgc_cons_percentage,
7326 doc: /* Portion of the heap used for allocation.
7327 Garbage collection can happen automatically once this portion of the heap
7328 has been allocated since the last garbage collection.
7329 If this portion is smaller than `gc-cons-threshold', this is ignored. */);
7330 Vgc_cons_percentage = make_float (0.1);
7332 DEFVAR_INT ("pure-bytes-used", pure_bytes_used,
7333 doc: /* Number of bytes of shareable Lisp data allocated so far. */);
7335 DEFVAR_INT ("cons-cells-consed", cons_cells_consed,
7336 doc: /* Number of cons cells that have been consed so far. */);
7338 DEFVAR_INT ("floats-consed", floats_consed,
7339 doc: /* Number of floats that have been consed so far. */);
7341 DEFVAR_INT ("vector-cells-consed", vector_cells_consed,
7342 doc: /* Number of vector cells that have been consed so far. */);
7344 DEFVAR_INT ("symbols-consed", symbols_consed,
7345 doc: /* Number of symbols that have been consed so far. */);
7346 symbols_consed += ARRAYELTS (lispsym);
7348 DEFVAR_INT ("string-chars-consed", string_chars_consed,
7349 doc: /* Number of string characters that have been consed so far. */);
7351 DEFVAR_INT ("misc-objects-consed", misc_objects_consed,
7352 doc: /* Number of miscellaneous objects that have been consed so far.
7353 These include markers and overlays, plus certain objects not visible
7354 to users. */);
7356 DEFVAR_INT ("intervals-consed", intervals_consed,
7357 doc: /* Number of intervals that have been consed so far. */);
7359 DEFVAR_INT ("strings-consed", strings_consed,
7360 doc: /* Number of strings that have been consed so far. */);
7362 DEFVAR_LISP ("purify-flag", Vpurify_flag,
7363 doc: /* Non-nil means loading Lisp code in order to dump an executable.
7364 This means that certain objects should be allocated in shared (pure) space.
7365 It can also be set to a hash-table, in which case this table is used to
7366 do hash-consing of the objects allocated to pure space. */);
7368 DEFVAR_BOOL ("garbage-collection-messages", garbage_collection_messages,
7369 doc: /* Non-nil means display messages at start and end of garbage collection. */);
7370 garbage_collection_messages = 0;
7372 DEFVAR_LISP ("post-gc-hook", Vpost_gc_hook,
7373 doc: /* Hook run after garbage collection has finished. */);
7374 Vpost_gc_hook = Qnil;
7375 DEFSYM (Qpost_gc_hook, "post-gc-hook");
7377 DEFVAR_LISP ("memory-signal-data", Vmemory_signal_data,
7378 doc: /* Precomputed `signal' argument for memory-full error. */);
7379 /* We build this in advance because if we wait until we need it, we might
7380 not be able to allocate the memory to hold it. */
7381 Vmemory_signal_data
7382 = listn (CONSTYPE_PURE, 2, Qerror,
7383 build_pure_c_string ("Memory exhausted--use M-x save-some-buffers then exit and restart Emacs"));
7385 DEFVAR_LISP ("memory-full", Vmemory_full,
7386 doc: /* Non-nil means Emacs cannot get much more Lisp memory. */);
7387 Vmemory_full = Qnil;
7389 DEFSYM (Qconses, "conses");
7390 DEFSYM (Qsymbols, "symbols");
7391 DEFSYM (Qmiscs, "miscs");
7392 DEFSYM (Qstrings, "strings");
7393 DEFSYM (Qvectors, "vectors");
7394 DEFSYM (Qfloats, "floats");
7395 DEFSYM (Qintervals, "intervals");
7396 DEFSYM (Qbuffers, "buffers");
7397 DEFSYM (Qstring_bytes, "string-bytes");
7398 DEFSYM (Qvector_slots, "vector-slots");
7399 DEFSYM (Qheap, "heap");
7400 DEFSYM (QAutomatic_GC, "Automatic GC");
7402 DEFSYM (Qgc_cons_threshold, "gc-cons-threshold");
7403 DEFSYM (Qchar_table_extra_slots, "char-table-extra-slots");
7405 DEFVAR_LISP ("gc-elapsed", Vgc_elapsed,
7406 doc: /* Accumulated time elapsed in garbage collections.
7407 The time is in seconds as a floating point value. */);
7408 DEFVAR_INT ("gcs-done", gcs_done,
7409 doc: /* Accumulated number of garbage collections done. */);
7411 defsubr (&Scons);
7412 defsubr (&Slist);
7413 defsubr (&Svector);
7414 defsubr (&Sbool_vector);
7415 defsubr (&Smake_byte_code);
7416 defsubr (&Smake_list);
7417 defsubr (&Smake_vector);
7418 defsubr (&Smake_string);
7419 defsubr (&Smake_bool_vector);
7420 defsubr (&Smake_symbol);
7421 defsubr (&Smake_marker);
7422 defsubr (&Smake_finalizer);
7423 defsubr (&Spurecopy);
7424 defsubr (&Sgarbage_collect);
7425 defsubr (&Smemory_limit);
7426 defsubr (&Smemory_info);
7427 defsubr (&Smemory_use_counts);
7428 defsubr (&Ssuspicious_object);
7431 /* When compiled with GCC, GDB might say "No enum type named
7432 pvec_type" if we don't have at least one symbol with that type, and
7433 then xbacktrace could fail. Similarly for the other enums and
7434 their values. Some non-GCC compilers don't like these constructs. */
7435 #ifdef __GNUC__
7436 union
7438 enum CHARTAB_SIZE_BITS CHARTAB_SIZE_BITS;
7439 enum char_table_specials char_table_specials;
7440 enum char_bits char_bits;
7441 enum CHECK_LISP_OBJECT_TYPE CHECK_LISP_OBJECT_TYPE;
7442 enum DEFAULT_HASH_SIZE DEFAULT_HASH_SIZE;
7443 enum Lisp_Bits Lisp_Bits;
7444 enum Lisp_Compiled Lisp_Compiled;
7445 enum maxargs maxargs;
7446 enum MAX_ALLOCA MAX_ALLOCA;
7447 enum More_Lisp_Bits More_Lisp_Bits;
7448 enum pvec_type pvec_type;
7449 } const EXTERNALLY_VISIBLE gdb_make_enums_visible = {0};
7450 #endif /* __GNUC__ */