* src/alloc.c: Fix comment.
[emacs.git] / src / alloc.c
blobd959c55350a50dbcfed8141b2c919a12b116acdf
1 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
3 Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2018 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 <https://www.gnu.org/licenses/>. */
21 #include <config.h>
23 #include <errno.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <limits.h> /* For CHAR_BIT. */
27 #include <signal.h> /* For SIGABRT, SIGDANGER. */
29 #ifdef HAVE_PTHREAD
30 #include <pthread.h>
31 #endif
33 #include "lisp.h"
34 #include "dispextern.h"
35 #include "intervals.h"
36 #include "ptr-bounds.h"
37 #include "puresize.h"
38 #include "sheap.h"
39 #include "systime.h"
40 #include "character.h"
41 #include "buffer.h"
42 #include "window.h"
43 #include "keyboard.h"
44 #include "frame.h"
45 #include "blockinput.h"
46 #include "termhooks.h" /* For struct terminal. */
47 #ifdef HAVE_WINDOW_SYSTEM
48 #include TERM_HEADER
49 #endif /* HAVE_WINDOW_SYSTEM */
51 #include <flexmember.h>
52 #include <verify.h>
53 #include <execinfo.h> /* For backtrace. */
55 #ifdef HAVE_LINUX_SYSINFO
56 #include <sys/sysinfo.h>
57 #endif
59 #ifdef MSDOS
60 #include "dosfns.h" /* For dos_memory_info. */
61 #endif
63 #ifdef HAVE_MALLOC_H
64 # include <malloc.h>
65 #endif
67 #if (defined ENABLE_CHECKING \
68 && defined HAVE_VALGRIND_VALGRIND_H \
69 && !defined USE_VALGRIND)
70 # define USE_VALGRIND 1
71 #endif
73 #if USE_VALGRIND
74 #include <valgrind/valgrind.h>
75 #include <valgrind/memcheck.h>
76 static bool valgrind_p;
77 #endif
79 /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects.
80 We turn that on by default when ENABLE_CHECKING is defined;
81 define GC_CHECK_MARKED_OBJECTS to zero to disable. */
83 #if defined ENABLE_CHECKING && !defined GC_CHECK_MARKED_OBJECTS
84 # define GC_CHECK_MARKED_OBJECTS 1
85 #endif
87 /* GC_MALLOC_CHECK defined means perform validity checks of malloc'd
88 memory. Can do this only if using gmalloc.c and if not checking
89 marked objects. */
91 #if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \
92 || defined HYBRID_MALLOC || GC_CHECK_MARKED_OBJECTS)
93 #undef GC_MALLOC_CHECK
94 #endif
96 #include <unistd.h>
97 #include <fcntl.h>
99 #ifdef USE_GTK
100 # include "gtkutil.h"
101 #endif
102 #ifdef WINDOWSNT
103 #include "w32.h"
104 #include "w32heap.h" /* for sbrk */
105 #endif
107 #ifdef GNU_LINUX
108 /* The address where the heap starts. */
109 void *
110 my_heap_start (void)
112 static void *start;
113 if (! start)
114 start = sbrk (0);
115 return start;
117 #endif
119 #ifdef DOUG_LEA_MALLOC
121 /* Specify maximum number of areas to mmap. It would be nice to use a
122 value that explicitly means "no limit". */
124 #define MMAP_MAX_AREAS 100000000
126 /* A pointer to the memory allocated that copies that static data
127 inside glibc's malloc. */
128 static void *malloc_state_ptr;
130 /* Restore the dumped malloc state. Because malloc can be invoked
131 even before main (e.g. by the dynamic linker), the dumped malloc
132 state must be restored as early as possible using this special hook. */
133 static void
134 malloc_initialize_hook (void)
136 static bool malloc_using_checking;
138 if (! initialized)
140 #ifdef GNU_LINUX
141 my_heap_start ();
142 #endif
143 malloc_using_checking = getenv ("MALLOC_CHECK_") != NULL;
145 else
147 if (!malloc_using_checking)
149 /* Work around a bug in glibc's malloc. MALLOC_CHECK_ must be
150 ignored if the heap to be restored was constructed without
151 malloc checking. Can't use unsetenv, since that calls malloc. */
152 char **p = environ;
153 if (p)
154 for (; *p; p++)
155 if (strncmp (*p, "MALLOC_CHECK_=", 14) == 0)
158 *p = p[1];
159 while (*++p);
161 break;
165 if (malloc_set_state (malloc_state_ptr) != 0)
166 emacs_abort ();
167 # ifndef XMALLOC_OVERRUN_CHECK
168 alloc_unexec_post ();
169 # endif
173 /* Declare the malloc initialization hook, which runs before 'main' starts.
174 EXTERNALLY_VISIBLE works around Bug#22522. */
175 # ifndef __MALLOC_HOOK_VOLATILE
176 # define __MALLOC_HOOK_VOLATILE
177 # endif
178 voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook EXTERNALLY_VISIBLE
179 = malloc_initialize_hook;
181 #endif
183 #if defined DOUG_LEA_MALLOC || !defined CANNOT_DUMP
185 /* Allocator-related actions to do just before and after unexec. */
187 void
188 alloc_unexec_pre (void)
190 # ifdef DOUG_LEA_MALLOC
191 malloc_state_ptr = malloc_get_state ();
192 if (!malloc_state_ptr)
193 fatal ("malloc_get_state: %s", strerror (errno));
194 # endif
195 # ifdef HYBRID_MALLOC
196 bss_sbrk_did_unexec = true;
197 # endif
200 void
201 alloc_unexec_post (void)
203 # ifdef DOUG_LEA_MALLOC
204 free (malloc_state_ptr);
205 # endif
206 # ifdef HYBRID_MALLOC
207 bss_sbrk_did_unexec = false;
208 # endif
210 #endif
212 /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
213 to a struct Lisp_String. */
215 #define MARK_STRING(S) ((S)->u.s.size |= ARRAY_MARK_FLAG)
216 #define UNMARK_STRING(S) ((S)->u.s.size &= ~ARRAY_MARK_FLAG)
217 #define STRING_MARKED_P(S) (((S)->u.s.size & ARRAY_MARK_FLAG) != 0)
219 #define VECTOR_MARK(V) ((V)->header.size |= ARRAY_MARK_FLAG)
220 #define VECTOR_UNMARK(V) ((V)->header.size &= ~ARRAY_MARK_FLAG)
221 #define VECTOR_MARKED_P(V) (((V)->header.size & ARRAY_MARK_FLAG) != 0)
223 /* Default value of gc_cons_threshold (see below). */
225 #define GC_DEFAULT_THRESHOLD (100000 * word_size)
227 /* Global variables. */
228 struct emacs_globals globals;
230 /* Number of bytes of consing done since the last gc. */
232 EMACS_INT consing_since_gc;
234 /* Similar minimum, computed from Vgc_cons_percentage. */
236 EMACS_INT gc_relative_threshold;
238 /* Minimum number of bytes of consing since GC before next GC,
239 when memory is full. */
241 EMACS_INT memory_full_cons_threshold;
243 /* True during GC. */
245 bool gc_in_progress;
247 /* Number of live and free conses etc. */
249 static EMACS_INT total_conses, total_markers, total_symbols, total_buffers;
250 static EMACS_INT total_free_conses, total_free_markers, total_free_symbols;
251 static EMACS_INT total_free_floats, total_floats;
253 /* Points to memory space allocated as "spare", to be freed if we run
254 out of memory. We keep one large block, four cons-blocks, and
255 two string blocks. */
257 static char *spare_memory[7];
259 /* Amount of spare memory to keep in large reserve block, or to see
260 whether this much is available when malloc fails on a larger request. */
262 #define SPARE_MEMORY (1 << 14)
264 /* Initialize it to a nonzero value to force it into data space
265 (rather than bss space). That way unexec will remap it into text
266 space (pure), on some systems. We have not implemented the
267 remapping on more recent systems because this is less important
268 nowadays than in the days of small memories and timesharing. */
270 EMACS_INT pure[(PURESIZE + sizeof (EMACS_INT) - 1) / sizeof (EMACS_INT)] = {1,};
271 #define PUREBEG (char *) pure
273 /* Pointer to the pure area, and its size. */
275 static char *purebeg;
276 static ptrdiff_t pure_size;
278 /* Number of bytes of pure storage used before pure storage overflowed.
279 If this is non-zero, this implies that an overflow occurred. */
281 static ptrdiff_t pure_bytes_used_before_overflow;
283 /* Index in pure at which next pure Lisp object will be allocated.. */
285 static ptrdiff_t pure_bytes_used_lisp;
287 /* Number of bytes allocated for non-Lisp objects in pure storage. */
289 static ptrdiff_t pure_bytes_used_non_lisp;
291 /* If nonzero, this is a warning delivered by malloc and not yet
292 displayed. */
294 const char *pending_malloc_warning;
296 #if 0 /* Normally, pointer sanity only on request... */
297 #ifdef ENABLE_CHECKING
298 #define SUSPICIOUS_OBJECT_CHECKING 1
299 #endif
300 #endif
302 /* ... but unconditionally use SUSPICIOUS_OBJECT_CHECKING while the GC
303 bug is unresolved. */
304 #define SUSPICIOUS_OBJECT_CHECKING 1
306 #ifdef SUSPICIOUS_OBJECT_CHECKING
307 struct suspicious_free_record
309 void *suspicious_object;
310 void *backtrace[128];
312 static void *suspicious_objects[32];
313 static int suspicious_object_index;
314 struct suspicious_free_record suspicious_free_history[64] EXTERNALLY_VISIBLE;
315 static int suspicious_free_history_index;
316 /* Find the first currently-monitored suspicious pointer in range
317 [begin,end) or NULL if no such pointer exists. */
318 static void *find_suspicious_object_in_range (void *begin, void *end);
319 static void detect_suspicious_free (void *ptr);
320 #else
321 # define find_suspicious_object_in_range(begin, end) NULL
322 # define detect_suspicious_free(ptr) (void)
323 #endif
325 /* Maximum amount of C stack to save when a GC happens. */
327 #ifndef MAX_SAVE_STACK
328 #define MAX_SAVE_STACK 16000
329 #endif
331 /* Buffer in which we save a copy of the C stack at each GC. */
333 #if MAX_SAVE_STACK > 0
334 static char *stack_copy;
335 static ptrdiff_t stack_copy_size;
337 /* Copy to DEST a block of memory from SRC of size SIZE bytes,
338 avoiding any address sanitization. */
340 static void * ATTRIBUTE_NO_SANITIZE_ADDRESS
341 no_sanitize_memcpy (void *dest, void const *src, size_t size)
343 if (! ADDRESS_SANITIZER)
344 return memcpy (dest, src, size);
345 else
347 size_t i;
348 char *d = dest;
349 char const *s = src;
350 for (i = 0; i < size; i++)
351 d[i] = s[i];
352 return dest;
356 #endif /* MAX_SAVE_STACK > 0 */
358 static void mark_terminals (void);
359 static void gc_sweep (void);
360 static Lisp_Object make_pure_vector (ptrdiff_t);
361 static void mark_buffer (struct buffer *);
363 #if !defined REL_ALLOC || defined SYSTEM_MALLOC || defined HYBRID_MALLOC
364 static void refill_memory_reserve (void);
365 #endif
366 static void compact_small_strings (void);
367 static void free_large_strings (void);
368 extern Lisp_Object which_symbols (Lisp_Object, EMACS_INT) EXTERNALLY_VISIBLE;
370 /* When scanning the C stack for live Lisp objects, Emacs keeps track of
371 what memory allocated via lisp_malloc and lisp_align_malloc is intended
372 for what purpose. This enumeration specifies the type of memory. */
374 enum mem_type
376 MEM_TYPE_NON_LISP,
377 MEM_TYPE_BUFFER,
378 MEM_TYPE_CONS,
379 MEM_TYPE_STRING,
380 MEM_TYPE_MISC,
381 MEM_TYPE_SYMBOL,
382 MEM_TYPE_FLOAT,
383 /* Since all non-bool pseudovectors are small enough to be
384 allocated from vector blocks, this memory type denotes
385 large regular vectors and large bool pseudovectors. */
386 MEM_TYPE_VECTORLIKE,
387 /* Special type to denote vector blocks. */
388 MEM_TYPE_VECTOR_BLOCK,
389 /* Special type to denote reserved memory. */
390 MEM_TYPE_SPARE
393 /* A unique object in pure space used to make some Lisp objects
394 on free lists recognizable in O(1). */
396 static Lisp_Object Vdead;
397 #define DEADP(x) EQ (x, Vdead)
399 #ifdef GC_MALLOC_CHECK
401 enum mem_type allocated_mem_type;
403 #endif /* GC_MALLOC_CHECK */
405 /* A node in the red-black tree describing allocated memory containing
406 Lisp data. Each such block is recorded with its start and end
407 address when it is allocated, and removed from the tree when it
408 is freed.
410 A red-black tree is a balanced binary tree with the following
411 properties:
413 1. Every node is either red or black.
414 2. Every leaf is black.
415 3. If a node is red, then both of its children are black.
416 4. Every simple path from a node to a descendant leaf contains
417 the same number of black nodes.
418 5. The root is always black.
420 When nodes are inserted into the tree, or deleted from the tree,
421 the tree is "fixed" so that these properties are always true.
423 A red-black tree with N internal nodes has height at most 2
424 log(N+1). Searches, insertions and deletions are done in O(log N).
425 Please see a text book about data structures for a detailed
426 description of red-black trees. Any book worth its salt should
427 describe them. */
429 struct mem_node
431 /* Children of this node. These pointers are never NULL. When there
432 is no child, the value is MEM_NIL, which points to a dummy node. */
433 struct mem_node *left, *right;
435 /* The parent of this node. In the root node, this is NULL. */
436 struct mem_node *parent;
438 /* Start and end of allocated region. */
439 void *start, *end;
441 /* Node color. */
442 enum {MEM_BLACK, MEM_RED} color;
444 /* Memory type. */
445 enum mem_type type;
448 /* Root of the tree describing allocated Lisp memory. */
450 static struct mem_node *mem_root;
452 /* Lowest and highest known address in the heap. */
454 static void *min_heap_address, *max_heap_address;
456 /* Sentinel node of the tree. */
458 static struct mem_node mem_z;
459 #define MEM_NIL &mem_z
461 static struct mem_node *mem_insert (void *, void *, enum mem_type);
462 static void mem_insert_fixup (struct mem_node *);
463 static void mem_rotate_left (struct mem_node *);
464 static void mem_rotate_right (struct mem_node *);
465 static void mem_delete (struct mem_node *);
466 static void mem_delete_fixup (struct mem_node *);
467 static struct mem_node *mem_find (void *);
469 #ifndef DEADP
470 # define DEADP(x) 0
471 #endif
473 /* Addresses of staticpro'd variables. Initialize it to a nonzero
474 value; otherwise some compilers put it into BSS. */
476 enum { NSTATICS = 2048 };
477 static Lisp_Object *staticvec[NSTATICS] = {&Vpurify_flag};
479 /* Index of next unused slot in staticvec. */
481 static int staticidx;
483 static void *pure_alloc (size_t, int);
485 /* True if N is a power of 2. N should be positive. */
487 #define POWER_OF_2(n) (((n) & ((n) - 1)) == 0)
489 /* Return X rounded to the next multiple of Y. Y should be positive,
490 and Y - 1 + X should not overflow. Arguments should not have side
491 effects, as they are evaluated more than once. Tune for Y being a
492 power of 2. */
494 #define ROUNDUP(x, y) (POWER_OF_2 (y) \
495 ? ((y) - 1 + (x)) & ~ ((y) - 1) \
496 : ((y) - 1 + (x)) - ((y) - 1 + (x)) % (y))
498 /* Return PTR rounded up to the next multiple of ALIGNMENT. */
500 static void *
501 pointer_align (void *ptr, int alignment)
503 return (void *) ROUNDUP ((uintptr_t) ptr, alignment);
506 /* Define PNTR_ADD and XPNTR as functions, which are cleaner and can
507 be used in debuggers. Also, define them as macros if
508 DEFINE_KEY_OPS_AS_MACROS, for performance in that case.
509 The macro_* macros are private to this section of code. */
511 /* Add a pointer P to an integer I without gcc -fsanitize complaining
512 about the result being out of range of the underlying array. */
514 #define macro_PNTR_ADD(p, i) ((p) + (i))
516 static char * ATTRIBUTE_NO_SANITIZE_UNDEFINED ATTRIBUTE_UNUSED
517 PNTR_ADD (char *p, EMACS_UINT i)
519 return macro_PNTR_ADD (p, i);
522 #if DEFINE_KEY_OPS_AS_MACROS
523 # define PNTR_ADD(p, i) macro_PNTR_ADD (p, i)
524 #endif
526 /* Extract the pointer hidden within O. */
528 #define macro_XPNTR(o) \
529 ((void *) \
530 (SYMBOLP (o) \
531 ? PNTR_ADD ((char *) lispsym, \
532 (XLI (o) \
533 - ((EMACS_UINT) Lisp_Symbol << (USE_LSB_TAG ? 0 : VALBITS)))) \
534 : (char *) XLP (o) - (XLI (o) & ~VALMASK)))
536 static ATTRIBUTE_UNUSED void *
537 XPNTR (Lisp_Object a)
539 return macro_XPNTR (a);
542 #if DEFINE_KEY_OPS_AS_MACROS
543 # define XPNTR(a) macro_XPNTR (a)
544 #endif
546 static void
547 XFLOAT_INIT (Lisp_Object f, double n)
549 XFLOAT (f)->u.data = n;
552 #ifdef DOUG_LEA_MALLOC
553 static bool
554 pointers_fit_in_lispobj_p (void)
556 return (UINTPTR_MAX <= VAL_MAX) || USE_LSB_TAG;
559 static bool
560 mmap_lisp_allowed_p (void)
562 /* If we can't store all memory addresses in our lisp objects, it's
563 risky to let the heap use mmap and give us addresses from all
564 over our address space. We also can't use mmap for lisp objects
565 if we might dump: unexec doesn't preserve the contents of mmapped
566 regions. */
567 return pointers_fit_in_lispobj_p () && !might_dump;
569 #endif
571 /* Head of a circularly-linked list of extant finalizers. */
572 static struct Lisp_Finalizer finalizers;
574 /* Head of a circularly-linked list of finalizers that must be invoked
575 because we deemed them unreachable. This list must be global, and
576 not a local inside garbage_collect_1, in case we GC again while
577 running finalizers. */
578 static struct Lisp_Finalizer doomed_finalizers;
581 /************************************************************************
582 Malloc
583 ************************************************************************/
585 #if defined SIGDANGER || (!defined SYSTEM_MALLOC && !defined HYBRID_MALLOC)
587 /* Function malloc calls this if it finds we are near exhausting storage. */
589 void
590 malloc_warning (const char *str)
592 pending_malloc_warning = str;
595 #endif
597 /* Display an already-pending malloc warning. */
599 void
600 display_malloc_warning (void)
602 call3 (intern ("display-warning"),
603 intern ("alloc"),
604 build_string (pending_malloc_warning),
605 intern ("emergency"));
606 pending_malloc_warning = 0;
609 /* Called if we can't allocate relocatable space for a buffer. */
611 void
612 buffer_memory_full (ptrdiff_t nbytes)
614 /* If buffers use the relocating allocator, no need to free
615 spare_memory, because we may have plenty of malloc space left
616 that we could get, and if we don't, the malloc that fails will
617 itself cause spare_memory to be freed. If buffers don't use the
618 relocating allocator, treat this like any other failing
619 malloc. */
621 #ifndef REL_ALLOC
622 memory_full (nbytes);
623 #else
624 /* This used to call error, but if we've run out of memory, we could
625 get infinite recursion trying to build the string. */
626 xsignal (Qnil, Vmemory_signal_data);
627 #endif
630 /* A common multiple of the positive integers A and B. Ideally this
631 would be the least common multiple, but there's no way to do that
632 as a constant expression in C, so do the best that we can easily do. */
633 #define COMMON_MULTIPLE(a, b) \
634 ((a) % (b) == 0 ? (a) : (b) % (a) == 0 ? (b) : (a) * (b))
636 #ifndef XMALLOC_OVERRUN_CHECK
637 #define XMALLOC_OVERRUN_CHECK_OVERHEAD 0
638 #else
640 /* Check for overrun in malloc'ed buffers by wrapping a header and trailer
641 around each block.
643 The header consists of XMALLOC_OVERRUN_CHECK_SIZE fixed bytes
644 followed by XMALLOC_OVERRUN_SIZE_SIZE bytes containing the original
645 block size in little-endian order. The trailer consists of
646 XMALLOC_OVERRUN_CHECK_SIZE fixed bytes.
648 The header is used to detect whether this block has been allocated
649 through these functions, as some low-level libc functions may
650 bypass the malloc hooks. */
652 #define XMALLOC_OVERRUN_CHECK_SIZE 16
653 #define XMALLOC_OVERRUN_CHECK_OVERHEAD \
654 (2 * XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE)
656 #define XMALLOC_BASE_ALIGNMENT alignof (max_align_t)
658 #define XMALLOC_HEADER_ALIGNMENT \
659 COMMON_MULTIPLE (GCALIGNMENT, XMALLOC_BASE_ALIGNMENT)
661 /* Define XMALLOC_OVERRUN_SIZE_SIZE so that (1) it's large enough to
662 hold a size_t value and (2) the header size is a multiple of the
663 alignment that Emacs needs for C types and for USE_LSB_TAG. */
664 #define XMALLOC_OVERRUN_SIZE_SIZE \
665 (((XMALLOC_OVERRUN_CHECK_SIZE + sizeof (size_t) \
666 + XMALLOC_HEADER_ALIGNMENT - 1) \
667 / XMALLOC_HEADER_ALIGNMENT * XMALLOC_HEADER_ALIGNMENT) \
668 - XMALLOC_OVERRUN_CHECK_SIZE)
670 static char const xmalloc_overrun_check_header[XMALLOC_OVERRUN_CHECK_SIZE] =
671 { '\x9a', '\x9b', '\xae', '\xaf',
672 '\xbf', '\xbe', '\xce', '\xcf',
673 '\xea', '\xeb', '\xec', '\xed',
674 '\xdf', '\xde', '\x9c', '\x9d' };
676 static char const xmalloc_overrun_check_trailer[XMALLOC_OVERRUN_CHECK_SIZE] =
677 { '\xaa', '\xab', '\xac', '\xad',
678 '\xba', '\xbb', '\xbc', '\xbd',
679 '\xca', '\xcb', '\xcc', '\xcd',
680 '\xda', '\xdb', '\xdc', '\xdd' };
682 /* Insert and extract the block size in the header. */
684 static void
685 xmalloc_put_size (unsigned char *ptr, size_t size)
687 int i;
688 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
690 *--ptr = size & ((1 << CHAR_BIT) - 1);
691 size >>= CHAR_BIT;
695 static size_t
696 xmalloc_get_size (unsigned char *ptr)
698 size_t size = 0;
699 int i;
700 ptr -= XMALLOC_OVERRUN_SIZE_SIZE;
701 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
703 size <<= CHAR_BIT;
704 size += *ptr++;
706 return size;
710 /* Like malloc, but wraps allocated block with header and trailer. */
712 static void *
713 overrun_check_malloc (size_t size)
715 register unsigned char *val;
716 if (SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD < size)
717 emacs_abort ();
719 val = malloc (size + XMALLOC_OVERRUN_CHECK_OVERHEAD);
720 if (val)
722 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
723 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
724 xmalloc_put_size (val, size);
725 memcpy (val + size, xmalloc_overrun_check_trailer,
726 XMALLOC_OVERRUN_CHECK_SIZE);
728 return val;
732 /* Like realloc, but checks old block for overrun, and wraps new block
733 with header and trailer. */
735 static void *
736 overrun_check_realloc (void *block, size_t size)
738 register unsigned char *val = (unsigned char *) block;
739 if (SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD < size)
740 emacs_abort ();
742 if (val
743 && memcmp (xmalloc_overrun_check_header,
744 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
745 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
747 size_t osize = xmalloc_get_size (val);
748 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
749 XMALLOC_OVERRUN_CHECK_SIZE))
750 emacs_abort ();
751 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
752 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
753 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
756 val = realloc (val, size + XMALLOC_OVERRUN_CHECK_OVERHEAD);
758 if (val)
760 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
761 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
762 xmalloc_put_size (val, size);
763 memcpy (val + size, xmalloc_overrun_check_trailer,
764 XMALLOC_OVERRUN_CHECK_SIZE);
766 return val;
769 /* Like free, but checks block for overrun. */
771 static void
772 overrun_check_free (void *block)
774 unsigned char *val = (unsigned char *) block;
776 if (val
777 && memcmp (xmalloc_overrun_check_header,
778 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
779 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
781 size_t osize = xmalloc_get_size (val);
782 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
783 XMALLOC_OVERRUN_CHECK_SIZE))
784 emacs_abort ();
785 #ifdef XMALLOC_CLEAR_FREE_MEMORY
786 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
787 memset (val, 0xff, osize + XMALLOC_OVERRUN_CHECK_OVERHEAD);
788 #else
789 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
790 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
791 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
792 #endif
795 free (val);
798 #undef malloc
799 #undef realloc
800 #undef free
801 #define malloc overrun_check_malloc
802 #define realloc overrun_check_realloc
803 #define free overrun_check_free
804 #endif
806 /* If compiled with XMALLOC_BLOCK_INPUT_CHECK, define a symbol
807 BLOCK_INPUT_IN_MEMORY_ALLOCATORS that is visible to the debugger.
808 If that variable is set, block input while in one of Emacs's memory
809 allocation functions. There should be no need for this debugging
810 option, since signal handlers do not allocate memory, but Emacs
811 formerly allocated memory in signal handlers and this compile-time
812 option remains as a way to help debug the issue should it rear its
813 ugly head again. */
814 #ifdef XMALLOC_BLOCK_INPUT_CHECK
815 bool block_input_in_memory_allocators EXTERNALLY_VISIBLE;
816 static void
817 malloc_block_input (void)
819 if (block_input_in_memory_allocators)
820 block_input ();
822 static void
823 malloc_unblock_input (void)
825 if (block_input_in_memory_allocators)
826 unblock_input ();
828 # define MALLOC_BLOCK_INPUT malloc_block_input ()
829 # define MALLOC_UNBLOCK_INPUT malloc_unblock_input ()
830 #else
831 # define MALLOC_BLOCK_INPUT ((void) 0)
832 # define MALLOC_UNBLOCK_INPUT ((void) 0)
833 #endif
835 #define MALLOC_PROBE(size) \
836 do { \
837 if (profiler_memory_running) \
838 malloc_probe (size); \
839 } while (0)
841 static void *lmalloc (size_t) ATTRIBUTE_MALLOC_SIZE ((1));
842 static void *lrealloc (void *, size_t);
844 /* Like malloc but check for no memory and block interrupt input. */
846 void *
847 xmalloc (size_t size)
849 void *val;
851 MALLOC_BLOCK_INPUT;
852 val = lmalloc (size);
853 MALLOC_UNBLOCK_INPUT;
855 if (!val && size)
856 memory_full (size);
857 MALLOC_PROBE (size);
858 return val;
861 /* Like the above, but zeroes out the memory just allocated. */
863 void *
864 xzalloc (size_t size)
866 void *val;
868 MALLOC_BLOCK_INPUT;
869 val = lmalloc (size);
870 MALLOC_UNBLOCK_INPUT;
872 if (!val && size)
873 memory_full (size);
874 memset (val, 0, size);
875 MALLOC_PROBE (size);
876 return val;
879 /* Like realloc but check for no memory and block interrupt input.. */
881 void *
882 xrealloc (void *block, size_t size)
884 void *val;
886 MALLOC_BLOCK_INPUT;
887 /* We must call malloc explicitly when BLOCK is 0, since some
888 reallocs don't do this. */
889 if (! block)
890 val = lmalloc (size);
891 else
892 val = lrealloc (block, size);
893 MALLOC_UNBLOCK_INPUT;
895 if (!val && size)
896 memory_full (size);
897 MALLOC_PROBE (size);
898 return val;
902 /* Like free but block interrupt input. */
904 void
905 xfree (void *block)
907 if (!block)
908 return;
909 MALLOC_BLOCK_INPUT;
910 free (block);
911 MALLOC_UNBLOCK_INPUT;
912 /* We don't call refill_memory_reserve here
913 because in practice the call in r_alloc_free seems to suffice. */
917 /* Other parts of Emacs pass large int values to allocator functions
918 expecting ptrdiff_t. This is portable in practice, but check it to
919 be safe. */
920 verify (INT_MAX <= PTRDIFF_MAX);
923 /* Allocate an array of NITEMS items, each of size ITEM_SIZE.
924 Signal an error on memory exhaustion, and block interrupt input. */
926 void *
927 xnmalloc (ptrdiff_t nitems, ptrdiff_t item_size)
929 eassert (0 <= nitems && 0 < item_size);
930 ptrdiff_t nbytes;
931 if (INT_MULTIPLY_WRAPV (nitems, item_size, &nbytes) || SIZE_MAX < nbytes)
932 memory_full (SIZE_MAX);
933 return xmalloc (nbytes);
937 /* Reallocate an array PA to make it of NITEMS items, each of size ITEM_SIZE.
938 Signal an error on memory exhaustion, and block interrupt input. */
940 void *
941 xnrealloc (void *pa, ptrdiff_t nitems, ptrdiff_t item_size)
943 eassert (0 <= nitems && 0 < item_size);
944 ptrdiff_t nbytes;
945 if (INT_MULTIPLY_WRAPV (nitems, item_size, &nbytes) || SIZE_MAX < nbytes)
946 memory_full (SIZE_MAX);
947 return xrealloc (pa, nbytes);
951 /* Grow PA, which points to an array of *NITEMS items, and return the
952 location of the reallocated array, updating *NITEMS to reflect its
953 new size. The new array will contain at least NITEMS_INCR_MIN more
954 items, but will not contain more than NITEMS_MAX items total.
955 ITEM_SIZE is the size of each item, in bytes.
957 ITEM_SIZE and NITEMS_INCR_MIN must be positive. *NITEMS must be
958 nonnegative. If NITEMS_MAX is -1, it is treated as if it were
959 infinity.
961 If PA is null, then allocate a new array instead of reallocating
962 the old one.
964 Block interrupt input as needed. If memory exhaustion occurs, set
965 *NITEMS to zero if PA is null, and signal an error (i.e., do not
966 return).
968 Thus, to grow an array A without saving its old contents, do
969 { xfree (A); A = NULL; A = xpalloc (NULL, &AITEMS, ...); }.
970 The A = NULL avoids a dangling pointer if xpalloc exhausts memory
971 and signals an error, and later this code is reexecuted and
972 attempts to free A. */
974 void *
975 xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
976 ptrdiff_t nitems_max, ptrdiff_t item_size)
978 ptrdiff_t n0 = *nitems;
979 eassume (0 < item_size && 0 < nitems_incr_min && 0 <= n0 && -1 <= nitems_max);
981 /* The approximate size to use for initial small allocation
982 requests. This is the largest "small" request for the GNU C
983 library malloc. */
984 enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
986 /* If the array is tiny, grow it to about (but no greater than)
987 DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%.
988 Adjust the growth according to three constraints: NITEMS_INCR_MIN,
989 NITEMS_MAX, and what the C language can represent safely. */
991 ptrdiff_t n, nbytes;
992 if (INT_ADD_WRAPV (n0, n0 >> 1, &n))
993 n = PTRDIFF_MAX;
994 if (0 <= nitems_max && nitems_max < n)
995 n = nitems_max;
997 ptrdiff_t adjusted_nbytes
998 = ((INT_MULTIPLY_WRAPV (n, item_size, &nbytes) || SIZE_MAX < nbytes)
999 ? min (PTRDIFF_MAX, SIZE_MAX)
1000 : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0);
1001 if (adjusted_nbytes)
1003 n = adjusted_nbytes / item_size;
1004 nbytes = adjusted_nbytes - adjusted_nbytes % item_size;
1007 if (! pa)
1008 *nitems = 0;
1009 if (n - n0 < nitems_incr_min
1010 && (INT_ADD_WRAPV (n0, nitems_incr_min, &n)
1011 || (0 <= nitems_max && nitems_max < n)
1012 || INT_MULTIPLY_WRAPV (n, item_size, &nbytes)))
1013 memory_full (SIZE_MAX);
1014 pa = xrealloc (pa, nbytes);
1015 *nitems = n;
1016 return pa;
1020 /* Like strdup, but uses xmalloc. */
1022 char *
1023 xstrdup (const char *s)
1025 ptrdiff_t size;
1026 eassert (s);
1027 size = strlen (s) + 1;
1028 return memcpy (xmalloc (size), s, size);
1031 /* Like above, but duplicates Lisp string to C string. */
1033 char *
1034 xlispstrdup (Lisp_Object string)
1036 ptrdiff_t size = SBYTES (string) + 1;
1037 return memcpy (xmalloc (size), SSDATA (string), size);
1040 /* Assign to *PTR a copy of STRING, freeing any storage *PTR formerly
1041 pointed to. If STRING is null, assign it without copying anything.
1042 Allocate before freeing, to avoid a dangling pointer if allocation
1043 fails. */
1045 void
1046 dupstring (char **ptr, char const *string)
1048 char *old = *ptr;
1049 *ptr = string ? xstrdup (string) : 0;
1050 xfree (old);
1054 /* Like putenv, but (1) use the equivalent of xmalloc and (2) the
1055 argument is a const pointer. */
1057 void
1058 xputenv (char const *string)
1060 if (putenv ((char *) string) != 0)
1061 memory_full (0);
1064 /* Return a newly allocated memory block of SIZE bytes, remembering
1065 to free it when unwinding. */
1066 void *
1067 record_xmalloc (size_t size)
1069 void *p = xmalloc (size);
1070 record_unwind_protect_ptr (xfree, p);
1071 return p;
1075 /* Like malloc but used for allocating Lisp data. NBYTES is the
1076 number of bytes to allocate, TYPE describes the intended use of the
1077 allocated memory block (for strings, for conses, ...). */
1079 #if ! USE_LSB_TAG
1080 void *lisp_malloc_loser EXTERNALLY_VISIBLE;
1081 #endif
1083 static void *
1084 lisp_malloc (size_t nbytes, enum mem_type type)
1086 register void *val;
1088 MALLOC_BLOCK_INPUT;
1090 #ifdef GC_MALLOC_CHECK
1091 allocated_mem_type = type;
1092 #endif
1094 val = lmalloc (nbytes);
1096 #if ! USE_LSB_TAG
1097 /* If the memory just allocated cannot be addressed thru a Lisp
1098 object's pointer, and it needs to be,
1099 that's equivalent to running out of memory. */
1100 if (val && type != MEM_TYPE_NON_LISP)
1102 Lisp_Object tem;
1103 XSETCONS (tem, (char *) val + nbytes - 1);
1104 if ((char *) XCONS (tem) != (char *) val + nbytes - 1)
1106 lisp_malloc_loser = val;
1107 free (val);
1108 val = 0;
1111 #endif
1113 #ifndef GC_MALLOC_CHECK
1114 if (val && type != MEM_TYPE_NON_LISP)
1115 mem_insert (val, (char *) val + nbytes, type);
1116 #endif
1118 MALLOC_UNBLOCK_INPUT;
1119 if (!val && nbytes)
1120 memory_full (nbytes);
1121 MALLOC_PROBE (nbytes);
1122 return val;
1125 /* Free BLOCK. This must be called to free memory allocated with a
1126 call to lisp_malloc. */
1128 static void
1129 lisp_free (void *block)
1131 MALLOC_BLOCK_INPUT;
1132 free (block);
1133 #ifndef GC_MALLOC_CHECK
1134 mem_delete (mem_find (block));
1135 #endif
1136 MALLOC_UNBLOCK_INPUT;
1139 /***** Allocation of aligned blocks of memory to store Lisp data. *****/
1141 /* The entry point is lisp_align_malloc which returns blocks of at most
1142 BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */
1144 /* Byte alignment of storage blocks. */
1145 #define BLOCK_ALIGN (1 << 10)
1146 verify (POWER_OF_2 (BLOCK_ALIGN));
1148 /* Use aligned_alloc if it or a simple substitute is available.
1149 Address sanitization breaks aligned allocation, as of gcc 4.8.2 and
1150 clang 3.3 anyway. Aligned allocation is incompatible with
1151 unexmacosx.c, so don't use it on Darwin. */
1153 #if ! ADDRESS_SANITIZER && !defined DARWIN_OS
1154 # if (defined HAVE_ALIGNED_ALLOC \
1155 || (defined HYBRID_MALLOC \
1156 ? defined HAVE_POSIX_MEMALIGN \
1157 : !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC))
1158 # define USE_ALIGNED_ALLOC 1
1159 # elif !defined HYBRID_MALLOC && defined HAVE_POSIX_MEMALIGN
1160 # define USE_ALIGNED_ALLOC 1
1161 # define aligned_alloc my_aligned_alloc /* Avoid collision with lisp.h. */
1162 static void *
1163 aligned_alloc (size_t alignment, size_t size)
1165 /* POSIX says the alignment must be a power-of-2 multiple of sizeof (void *).
1166 Verify this for all arguments this function is given. */
1167 verify (BLOCK_ALIGN % sizeof (void *) == 0
1168 && POWER_OF_2 (BLOCK_ALIGN / sizeof (void *)));
1169 verify (GCALIGNMENT % sizeof (void *) == 0
1170 && POWER_OF_2 (GCALIGNMENT / sizeof (void *)));
1171 eassert (alignment == BLOCK_ALIGN || alignment == GCALIGNMENT);
1173 void *p;
1174 return posix_memalign (&p, alignment, size) == 0 ? p : 0;
1176 # endif
1177 #endif
1179 /* Padding to leave at the end of a malloc'd block. This is to give
1180 malloc a chance to minimize the amount of memory wasted to alignment.
1181 It should be tuned to the particular malloc library used.
1182 On glibc-2.3.2, malloc never tries to align, so a padding of 0 is best.
1183 aligned_alloc on the other hand would ideally prefer a value of 4
1184 because otherwise, there's 1020 bytes wasted between each ablocks.
1185 In Emacs, testing shows that those 1020 can most of the time be
1186 efficiently used by malloc to place other objects, so a value of 0 can
1187 still preferable unless you have a lot of aligned blocks and virtually
1188 nothing else. */
1189 #define BLOCK_PADDING 0
1190 #define BLOCK_BYTES \
1191 (BLOCK_ALIGN - sizeof (struct ablocks *) - BLOCK_PADDING)
1193 /* Internal data structures and constants. */
1195 #define ABLOCKS_SIZE 16
1197 /* An aligned block of memory. */
1198 struct ablock
1200 union
1202 char payload[BLOCK_BYTES];
1203 struct ablock *next_free;
1204 } x;
1206 /* ABASE is the aligned base of the ablocks. It is overloaded to
1207 hold a virtual "busy" field that counts twice the number of used
1208 ablock values in the parent ablocks, plus one if the real base of
1209 the parent ablocks is ABASE (if the "busy" field is even, the
1210 word before the first ablock holds a pointer to the real base).
1211 The first ablock has a "busy" ABASE, and the others have an
1212 ordinary pointer ABASE. To tell the difference, the code assumes
1213 that pointers, when cast to uintptr_t, are at least 2 *
1214 ABLOCKS_SIZE + 1. */
1215 struct ablocks *abase;
1217 /* The padding of all but the last ablock is unused. The padding of
1218 the last ablock in an ablocks is not allocated. */
1219 #if BLOCK_PADDING
1220 char padding[BLOCK_PADDING];
1221 #endif
1224 /* A bunch of consecutive aligned blocks. */
1225 struct ablocks
1227 struct ablock blocks[ABLOCKS_SIZE];
1230 /* Size of the block requested from malloc or aligned_alloc. */
1231 #define ABLOCKS_BYTES (sizeof (struct ablocks) - BLOCK_PADDING)
1233 #define ABLOCK_ABASE(block) \
1234 (((uintptr_t) (block)->abase) <= (1 + 2 * ABLOCKS_SIZE) \
1235 ? (struct ablocks *) (block) \
1236 : (block)->abase)
1238 /* Virtual `busy' field. */
1239 #define ABLOCKS_BUSY(a_base) ((a_base)->blocks[0].abase)
1241 /* Pointer to the (not necessarily aligned) malloc block. */
1242 #ifdef USE_ALIGNED_ALLOC
1243 #define ABLOCKS_BASE(abase) (abase)
1244 #else
1245 #define ABLOCKS_BASE(abase) \
1246 (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void **) (abase))[-1])
1247 #endif
1249 /* The list of free ablock. */
1250 static struct ablock *free_ablock;
1252 /* Allocate an aligned block of nbytes.
1253 Alignment is on a multiple of BLOCK_ALIGN and `nbytes' has to be
1254 smaller or equal to BLOCK_BYTES. */
1255 static void *
1256 lisp_align_malloc (size_t nbytes, enum mem_type type)
1258 void *base, *val;
1259 struct ablocks *abase;
1261 eassert (nbytes <= BLOCK_BYTES);
1263 MALLOC_BLOCK_INPUT;
1265 #ifdef GC_MALLOC_CHECK
1266 allocated_mem_type = type;
1267 #endif
1269 if (!free_ablock)
1271 int i;
1272 bool aligned;
1274 #ifdef DOUG_LEA_MALLOC
1275 if (!mmap_lisp_allowed_p ())
1276 mallopt (M_MMAP_MAX, 0);
1277 #endif
1279 #ifdef USE_ALIGNED_ALLOC
1280 verify (ABLOCKS_BYTES % BLOCK_ALIGN == 0);
1281 abase = base = aligned_alloc (BLOCK_ALIGN, ABLOCKS_BYTES);
1282 #else
1283 base = malloc (ABLOCKS_BYTES);
1284 abase = pointer_align (base, BLOCK_ALIGN);
1285 #endif
1287 if (base == 0)
1289 MALLOC_UNBLOCK_INPUT;
1290 memory_full (ABLOCKS_BYTES);
1293 aligned = (base == abase);
1294 if (!aligned)
1295 ((void **) abase)[-1] = base;
1297 #ifdef DOUG_LEA_MALLOC
1298 if (!mmap_lisp_allowed_p ())
1299 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1300 #endif
1302 #if ! USE_LSB_TAG
1303 /* If the memory just allocated cannot be addressed thru a Lisp
1304 object's pointer, and it needs to be, that's equivalent to
1305 running out of memory. */
1306 if (type != MEM_TYPE_NON_LISP)
1308 Lisp_Object tem;
1309 char *end = (char *) base + ABLOCKS_BYTES - 1;
1310 XSETCONS (tem, end);
1311 if ((char *) XCONS (tem) != end)
1313 lisp_malloc_loser = base;
1314 free (base);
1315 MALLOC_UNBLOCK_INPUT;
1316 memory_full (SIZE_MAX);
1319 #endif
1321 /* Initialize the blocks and put them on the free list.
1322 If `base' was not properly aligned, we can't use the last block. */
1323 for (i = 0; i < (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1); i++)
1325 abase->blocks[i].abase = abase;
1326 abase->blocks[i].x.next_free = free_ablock;
1327 free_ablock = &abase->blocks[i];
1329 intptr_t ialigned = aligned;
1330 ABLOCKS_BUSY (abase) = (struct ablocks *) ialigned;
1332 eassert ((uintptr_t) abase % BLOCK_ALIGN == 0);
1333 eassert (ABLOCK_ABASE (&abase->blocks[3]) == abase); /* 3 is arbitrary */
1334 eassert (ABLOCK_ABASE (&abase->blocks[0]) == abase);
1335 eassert (ABLOCKS_BASE (abase) == base);
1336 eassert ((intptr_t) ABLOCKS_BUSY (abase) == aligned);
1339 abase = ABLOCK_ABASE (free_ablock);
1340 ABLOCKS_BUSY (abase)
1341 = (struct ablocks *) (2 + (intptr_t) ABLOCKS_BUSY (abase));
1342 val = free_ablock;
1343 free_ablock = free_ablock->x.next_free;
1345 #ifndef GC_MALLOC_CHECK
1346 if (type != MEM_TYPE_NON_LISP)
1347 mem_insert (val, (char *) val + nbytes, type);
1348 #endif
1350 MALLOC_UNBLOCK_INPUT;
1352 MALLOC_PROBE (nbytes);
1354 eassert (0 == ((uintptr_t) val) % BLOCK_ALIGN);
1355 return val;
1358 static void
1359 lisp_align_free (void *block)
1361 struct ablock *ablock = block;
1362 struct ablocks *abase = ABLOCK_ABASE (ablock);
1364 MALLOC_BLOCK_INPUT;
1365 #ifndef GC_MALLOC_CHECK
1366 mem_delete (mem_find (block));
1367 #endif
1368 /* Put on free list. */
1369 ablock->x.next_free = free_ablock;
1370 free_ablock = ablock;
1371 /* Update busy count. */
1372 intptr_t busy = (intptr_t) ABLOCKS_BUSY (abase) - 2;
1373 eassume (0 <= busy && busy <= 2 * ABLOCKS_SIZE - 1);
1374 ABLOCKS_BUSY (abase) = (struct ablocks *) busy;
1376 if (busy < 2)
1377 { /* All the blocks are free. */
1378 int i = 0;
1379 bool aligned = busy;
1380 struct ablock **tem = &free_ablock;
1381 struct ablock *atop = &abase->blocks[aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1];
1383 while (*tem)
1385 if (*tem >= (struct ablock *) abase && *tem < atop)
1387 i++;
1388 *tem = (*tem)->x.next_free;
1390 else
1391 tem = &(*tem)->x.next_free;
1393 eassert ((aligned & 1) == aligned);
1394 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1395 #ifdef USE_POSIX_MEMALIGN
1396 eassert ((uintptr_t) ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1397 #endif
1398 free (ABLOCKS_BASE (abase));
1400 MALLOC_UNBLOCK_INPUT;
1403 #if !defined __GNUC__ && !defined __alignof__
1404 # define __alignof__(type) alignof (type)
1405 #endif
1407 /* True if malloc (N) is known to return a multiple of GCALIGNMENT
1408 whenever N is also a multiple. In practice this is true if
1409 __alignof__ (max_align_t) is a multiple as well, assuming
1410 GCALIGNMENT is 8; other values of GCALIGNMENT have not been looked
1411 into. Use __alignof__ if available, as otherwise
1412 MALLOC_IS_GC_ALIGNED would be false on GCC x86 even though the
1413 alignment is OK there.
1415 This is a macro, not an enum constant, for portability to HP-UX
1416 10.20 cc and AIX 3.2.5 xlc. */
1417 #define MALLOC_IS_GC_ALIGNED \
1418 (GCALIGNMENT == 8 && __alignof__ (max_align_t) % GCALIGNMENT == 0)
1420 /* True if a malloc-returned pointer P is suitably aligned for SIZE,
1421 where Lisp alignment may be needed if SIZE is Lisp-aligned. */
1423 static bool
1424 laligned (void *p, size_t size)
1426 return (MALLOC_IS_GC_ALIGNED || (intptr_t) p % GCALIGNMENT == 0
1427 || size % GCALIGNMENT != 0);
1430 /* Like malloc and realloc except that if SIZE is Lisp-aligned, make
1431 sure the result is too, if necessary by reallocating (typically
1432 with larger and larger sizes) until the allocator returns a
1433 Lisp-aligned pointer. Code that needs to allocate C heap memory
1434 for a Lisp object should use one of these functions to obtain a
1435 pointer P; that way, if T is an enum Lisp_Type value and L ==
1436 make_lisp_ptr (P, T), then XPNTR (L) == P and XTYPE (L) == T.
1438 On typical modern platforms these functions' loops do not iterate.
1439 On now-rare (and perhaps nonexistent) platforms, the loops in
1440 theory could repeat forever. If an infinite loop is possible on a
1441 platform, a build would surely loop and the builder can then send
1442 us a bug report. Adding a counter to try to detect any such loop
1443 would complicate the code (and possibly introduce bugs, in code
1444 that's never really exercised) for little benefit. */
1446 static void *
1447 lmalloc (size_t size)
1449 #if USE_ALIGNED_ALLOC
1450 if (! MALLOC_IS_GC_ALIGNED && size % GCALIGNMENT == 0)
1451 return aligned_alloc (GCALIGNMENT, size);
1452 #endif
1454 while (true)
1456 void *p = malloc (size);
1457 if (laligned (p, size))
1458 return p;
1459 free (p);
1460 size_t bigger = size + GCALIGNMENT;
1461 if (size < bigger)
1462 size = bigger;
1466 static void *
1467 lrealloc (void *p, size_t size)
1469 while (true)
1471 p = realloc (p, size);
1472 if (laligned (p, size))
1473 return p;
1474 size_t bigger = size + GCALIGNMENT;
1475 if (size < bigger)
1476 size = bigger;
1481 /***********************************************************************
1482 Interval Allocation
1483 ***********************************************************************/
1485 /* Number of intervals allocated in an interval_block structure.
1486 The 1020 is 1024 minus malloc overhead. */
1488 #define INTERVAL_BLOCK_SIZE \
1489 ((1020 - sizeof (struct interval_block *)) / sizeof (struct interval))
1491 /* Intervals are allocated in chunks in the form of an interval_block
1492 structure. */
1494 struct interval_block
1496 /* Place `intervals' first, to preserve alignment. */
1497 struct interval intervals[INTERVAL_BLOCK_SIZE];
1498 struct interval_block *next;
1501 /* Current interval block. Its `next' pointer points to older
1502 blocks. */
1504 static struct interval_block *interval_block;
1506 /* Index in interval_block above of the next unused interval
1507 structure. */
1509 static int interval_block_index = INTERVAL_BLOCK_SIZE;
1511 /* Number of free and live intervals. */
1513 static EMACS_INT total_free_intervals, total_intervals;
1515 /* List of free intervals. */
1517 static INTERVAL interval_free_list;
1519 /* Return a new interval. */
1521 INTERVAL
1522 make_interval (void)
1524 INTERVAL val;
1526 MALLOC_BLOCK_INPUT;
1528 if (interval_free_list)
1530 val = interval_free_list;
1531 interval_free_list = INTERVAL_PARENT (interval_free_list);
1533 else
1535 if (interval_block_index == INTERVAL_BLOCK_SIZE)
1537 struct interval_block *newi
1538 = lisp_malloc (sizeof *newi, MEM_TYPE_NON_LISP);
1540 newi->next = interval_block;
1541 interval_block = newi;
1542 interval_block_index = 0;
1543 total_free_intervals += INTERVAL_BLOCK_SIZE;
1545 val = &interval_block->intervals[interval_block_index++];
1548 MALLOC_UNBLOCK_INPUT;
1550 consing_since_gc += sizeof (struct interval);
1551 intervals_consed++;
1552 total_free_intervals--;
1553 RESET_INTERVAL (val);
1554 val->gcmarkbit = 0;
1555 return val;
1559 /* Mark Lisp objects in interval I. */
1561 static void
1562 mark_interval (INTERVAL i, void *dummy)
1564 /* Intervals should never be shared. So, if extra internal checking is
1565 enabled, GC aborts if it seems to have visited an interval twice. */
1566 eassert (!i->gcmarkbit);
1567 i->gcmarkbit = 1;
1568 mark_object (i->plist);
1571 /* Mark the interval tree rooted in I. */
1573 #define MARK_INTERVAL_TREE(i) \
1574 do { \
1575 if (i && !i->gcmarkbit) \
1576 traverse_intervals_noorder (i, mark_interval, NULL); \
1577 } while (0)
1579 /***********************************************************************
1580 String Allocation
1581 ***********************************************************************/
1583 /* Lisp_Strings are allocated in string_block structures. When a new
1584 string_block is allocated, all the Lisp_Strings it contains are
1585 added to a free-list string_free_list. When a new Lisp_String is
1586 needed, it is taken from that list. During the sweep phase of GC,
1587 string_blocks that are entirely free are freed, except two which
1588 we keep.
1590 String data is allocated from sblock structures. Strings larger
1591 than LARGE_STRING_BYTES, get their own sblock, data for smaller
1592 strings is sub-allocated out of sblocks of size SBLOCK_SIZE.
1594 Sblocks consist internally of sdata structures, one for each
1595 Lisp_String. The sdata structure points to the Lisp_String it
1596 belongs to. The Lisp_String points back to the `u.data' member of
1597 its sdata structure.
1599 When a Lisp_String is freed during GC, it is put back on
1600 string_free_list, and its `data' member and its sdata's `string'
1601 pointer is set to null. The size of the string is recorded in the
1602 `n.nbytes' member of the sdata. So, sdata structures that are no
1603 longer used, can be easily recognized, and it's easy to compact the
1604 sblocks of small strings which we do in compact_small_strings. */
1606 /* Size in bytes of an sblock structure used for small strings. This
1607 is 8192 minus malloc overhead. */
1609 #define SBLOCK_SIZE 8188
1611 /* Strings larger than this are considered large strings. String data
1612 for large strings is allocated from individual sblocks. */
1614 #define LARGE_STRING_BYTES 1024
1616 /* The SDATA typedef is a struct or union describing string memory
1617 sub-allocated from an sblock. This is where the contents of Lisp
1618 strings are stored. */
1620 struct sdata
1622 /* Back-pointer to the string this sdata belongs to. If null, this
1623 structure is free, and NBYTES (in this structure or in the union below)
1624 contains the string's byte size (the same value that STRING_BYTES
1625 would return if STRING were non-null). If non-null, STRING_BYTES
1626 (STRING) is the size of the data, and DATA contains the string's
1627 contents. */
1628 struct Lisp_String *string;
1630 #ifdef GC_CHECK_STRING_BYTES
1631 ptrdiff_t nbytes;
1632 #endif
1634 unsigned char data[FLEXIBLE_ARRAY_MEMBER];
1637 #ifdef GC_CHECK_STRING_BYTES
1639 typedef struct sdata sdata;
1640 #define SDATA_NBYTES(S) (S)->nbytes
1641 #define SDATA_DATA(S) (S)->data
1643 #else
1645 typedef union
1647 struct Lisp_String *string;
1649 /* When STRING is nonnull, this union is actually of type 'struct sdata',
1650 which has a flexible array member. However, if implemented by
1651 giving this union a member of type 'struct sdata', the union
1652 could not be the last (flexible) member of 'struct sblock',
1653 because C99 prohibits a flexible array member from having a type
1654 that is itself a flexible array. So, comment this member out here,
1655 but remember that the option's there when using this union. */
1656 #if 0
1657 struct sdata u;
1658 #endif
1660 /* When STRING is null. */
1661 struct
1663 struct Lisp_String *string;
1664 ptrdiff_t nbytes;
1665 } n;
1666 } sdata;
1668 #define SDATA_NBYTES(S) (S)->n.nbytes
1669 #define SDATA_DATA(S) ((struct sdata *) (S))->data
1671 #endif /* not GC_CHECK_STRING_BYTES */
1673 enum { SDATA_DATA_OFFSET = offsetof (struct sdata, data) };
1675 /* Structure describing a block of memory which is sub-allocated to
1676 obtain string data memory for strings. Blocks for small strings
1677 are of fixed size SBLOCK_SIZE. Blocks for large strings are made
1678 as large as needed. */
1680 struct sblock
1682 /* Next in list. */
1683 struct sblock *next;
1685 /* Pointer to the next free sdata block. This points past the end
1686 of the sblock if there isn't any space left in this block. */
1687 sdata *next_free;
1689 /* String data. */
1690 sdata data[FLEXIBLE_ARRAY_MEMBER];
1693 /* Number of Lisp strings in a string_block structure. The 1020 is
1694 1024 minus malloc overhead. */
1696 #define STRING_BLOCK_SIZE \
1697 ((1020 - sizeof (struct string_block *)) / sizeof (struct Lisp_String))
1699 /* Structure describing a block from which Lisp_String structures
1700 are allocated. */
1702 struct string_block
1704 /* Place `strings' first, to preserve alignment. */
1705 struct Lisp_String strings[STRING_BLOCK_SIZE];
1706 struct string_block *next;
1709 /* Head and tail of the list of sblock structures holding Lisp string
1710 data. We always allocate from current_sblock. The NEXT pointers
1711 in the sblock structures go from oldest_sblock to current_sblock. */
1713 static struct sblock *oldest_sblock, *current_sblock;
1715 /* List of sblocks for large strings. */
1717 static struct sblock *large_sblocks;
1719 /* List of string_block structures. */
1721 static struct string_block *string_blocks;
1723 /* Free-list of Lisp_Strings. */
1725 static struct Lisp_String *string_free_list;
1727 /* Number of live and free Lisp_Strings. */
1729 static EMACS_INT total_strings, total_free_strings;
1731 /* Number of bytes used by live strings. */
1733 static EMACS_INT total_string_bytes;
1735 /* Given a pointer to a Lisp_String S which is on the free-list
1736 string_free_list, return a pointer to its successor in the
1737 free-list. */
1739 #define NEXT_FREE_LISP_STRING(S) ((S)->u.next)
1741 /* Return a pointer to the sdata structure belonging to Lisp string S.
1742 S must be live, i.e. S->data must not be null. S->data is actually
1743 a pointer to the `u.data' member of its sdata structure; the
1744 structure starts at a constant offset in front of that. */
1746 #define SDATA_OF_STRING(S) ((sdata *) ptr_bounds_init ((S)->u.s.data \
1747 - SDATA_DATA_OFFSET))
1750 #ifdef GC_CHECK_STRING_OVERRUN
1752 /* We check for overrun in string data blocks by appending a small
1753 "cookie" after each allocated string data block, and check for the
1754 presence of this cookie during GC. */
1756 #define GC_STRING_OVERRUN_COOKIE_SIZE 4
1757 static char const string_overrun_cookie[GC_STRING_OVERRUN_COOKIE_SIZE] =
1758 { '\xde', '\xad', '\xbe', '\xef' };
1760 #else
1761 #define GC_STRING_OVERRUN_COOKIE_SIZE 0
1762 #endif
1764 /* Value is the size of an sdata structure large enough to hold NBYTES
1765 bytes of string data. The value returned includes a terminating
1766 NUL byte, the size of the sdata structure, and padding. */
1768 #ifdef GC_CHECK_STRING_BYTES
1770 #define SDATA_SIZE(NBYTES) FLEXSIZEOF (struct sdata, data, (NBYTES) + 1)
1772 #else /* not GC_CHECK_STRING_BYTES */
1774 /* The 'max' reserves space for the nbytes union member even when NBYTES + 1 is
1775 less than the size of that member. The 'max' is not needed when
1776 SDATA_DATA_OFFSET is a multiple of FLEXALIGNOF (struct sdata),
1777 because then the alignment code reserves enough space. */
1779 #define SDATA_SIZE(NBYTES) \
1780 ((SDATA_DATA_OFFSET \
1781 + (SDATA_DATA_OFFSET % FLEXALIGNOF (struct sdata) == 0 \
1782 ? NBYTES \
1783 : max (NBYTES, FLEXALIGNOF (struct sdata) - 1)) \
1784 + 1 \
1785 + FLEXALIGNOF (struct sdata) - 1) \
1786 & ~(FLEXALIGNOF (struct sdata) - 1))
1788 #endif /* not GC_CHECK_STRING_BYTES */
1790 /* Extra bytes to allocate for each string. */
1792 #define GC_STRING_EXTRA (GC_STRING_OVERRUN_COOKIE_SIZE)
1794 /* Exact bound on the number of bytes in a string, not counting the
1795 terminating null. A string cannot contain more bytes than
1796 STRING_BYTES_BOUND, nor can it be so long that the size_t
1797 arithmetic in allocate_string_data would overflow while it is
1798 calculating a value to be passed to malloc. */
1799 static ptrdiff_t const STRING_BYTES_MAX =
1800 min (STRING_BYTES_BOUND,
1801 ((SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD
1802 - GC_STRING_EXTRA
1803 - offsetof (struct sblock, data)
1804 - SDATA_DATA_OFFSET)
1805 & ~(sizeof (EMACS_INT) - 1)));
1807 /* Initialize string allocation. Called from init_alloc_once. */
1809 static void
1810 init_strings (void)
1812 empty_unibyte_string = make_pure_string ("", 0, 0, 0);
1813 empty_multibyte_string = make_pure_string ("", 0, 0, 1);
1817 #ifdef GC_CHECK_STRING_BYTES
1819 static int check_string_bytes_count;
1821 /* Like STRING_BYTES, but with debugging check. Can be
1822 called during GC, so pay attention to the mark bit. */
1824 ptrdiff_t
1825 string_bytes (struct Lisp_String *s)
1827 ptrdiff_t nbytes =
1828 (s->u.s.size_byte < 0 ? s->u.s.size & ~ARRAY_MARK_FLAG : s->u.s.size_byte);
1830 if (!PURE_P (s) && s->u.s.data
1831 && nbytes != SDATA_NBYTES (SDATA_OF_STRING (s)))
1832 emacs_abort ();
1833 return nbytes;
1836 /* Check validity of Lisp strings' string_bytes member in B. */
1838 static void
1839 check_sblock (struct sblock *b)
1841 sdata *from, *end, *from_end;
1843 end = b->next_free;
1845 for (from = b->data; from < end; from = from_end)
1847 /* Compute the next FROM here because copying below may
1848 overwrite data we need to compute it. */
1849 ptrdiff_t nbytes;
1851 /* Check that the string size recorded in the string is the
1852 same as the one recorded in the sdata structure. */
1853 nbytes = SDATA_SIZE (from->string ? string_bytes (from->string)
1854 : SDATA_NBYTES (from));
1855 from_end = (sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
1860 /* Check validity of Lisp strings' string_bytes member. ALL_P
1861 means check all strings, otherwise check only most
1862 recently allocated strings. Used for hunting a bug. */
1864 static void
1865 check_string_bytes (bool all_p)
1867 if (all_p)
1869 struct sblock *b;
1871 for (b = large_sblocks; b; b = b->next)
1873 struct Lisp_String *s = b->data[0].string;
1874 if (s)
1875 string_bytes (s);
1878 for (b = oldest_sblock; b; b = b->next)
1879 check_sblock (b);
1881 else if (current_sblock)
1882 check_sblock (current_sblock);
1885 #else /* not GC_CHECK_STRING_BYTES */
1887 #define check_string_bytes(all) ((void) 0)
1889 #endif /* GC_CHECK_STRING_BYTES */
1891 #ifdef GC_CHECK_STRING_FREE_LIST
1893 /* Walk through the string free list looking for bogus next pointers.
1894 This may catch buffer overrun from a previous string. */
1896 static void
1897 check_string_free_list (void)
1899 struct Lisp_String *s;
1901 /* Pop a Lisp_String off the free-list. */
1902 s = string_free_list;
1903 while (s != NULL)
1905 if ((uintptr_t) s < 1024)
1906 emacs_abort ();
1907 s = NEXT_FREE_LISP_STRING (s);
1910 #else
1911 #define check_string_free_list()
1912 #endif
1914 /* Return a new Lisp_String. */
1916 static struct Lisp_String *
1917 allocate_string (void)
1919 struct Lisp_String *s;
1921 MALLOC_BLOCK_INPUT;
1923 /* If the free-list is empty, allocate a new string_block, and
1924 add all the Lisp_Strings in it to the free-list. */
1925 if (string_free_list == NULL)
1927 struct string_block *b = lisp_malloc (sizeof *b, MEM_TYPE_STRING);
1928 int i;
1930 b->next = string_blocks;
1931 string_blocks = b;
1933 for (i = STRING_BLOCK_SIZE - 1; i >= 0; --i)
1935 s = b->strings + i;
1936 /* Every string on a free list should have NULL data pointer. */
1937 s->u.s.data = NULL;
1938 NEXT_FREE_LISP_STRING (s) = string_free_list;
1939 string_free_list = ptr_bounds_clip (s, sizeof *s);
1942 total_free_strings += STRING_BLOCK_SIZE;
1945 check_string_free_list ();
1947 /* Pop a Lisp_String off the free-list. */
1948 s = string_free_list;
1949 string_free_list = NEXT_FREE_LISP_STRING (s);
1951 MALLOC_UNBLOCK_INPUT;
1953 --total_free_strings;
1954 ++total_strings;
1955 ++strings_consed;
1956 consing_since_gc += sizeof *s;
1958 #ifdef GC_CHECK_STRING_BYTES
1959 if (!noninteractive)
1961 if (++check_string_bytes_count == 200)
1963 check_string_bytes_count = 0;
1964 check_string_bytes (1);
1966 else
1967 check_string_bytes (0);
1969 #endif /* GC_CHECK_STRING_BYTES */
1971 return s;
1975 /* Set up Lisp_String S for holding NCHARS characters, NBYTES bytes,
1976 plus a NUL byte at the end. Allocate an sdata structure DATA for
1977 S, and set S->u.s.data to SDATA->u.data. Store a NUL byte at the
1978 end of S->u.s.data. Set S->u.s.size to NCHARS and S->u.s.size_byte
1979 to NBYTES. Free S->u.s.data if it was initially non-null. */
1981 void
1982 allocate_string_data (struct Lisp_String *s,
1983 EMACS_INT nchars, EMACS_INT nbytes)
1985 sdata *data, *old_data;
1986 struct sblock *b;
1987 ptrdiff_t needed, old_nbytes;
1989 if (STRING_BYTES_MAX < nbytes)
1990 string_overflow ();
1992 /* Determine the number of bytes needed to store NBYTES bytes
1993 of string data. */
1994 needed = SDATA_SIZE (nbytes);
1995 if (s->u.s.data)
1997 old_data = SDATA_OF_STRING (s);
1998 old_nbytes = STRING_BYTES (s);
2000 else
2001 old_data = NULL;
2003 MALLOC_BLOCK_INPUT;
2005 if (nbytes > LARGE_STRING_BYTES)
2007 size_t size = FLEXSIZEOF (struct sblock, data, needed);
2009 #ifdef DOUG_LEA_MALLOC
2010 if (!mmap_lisp_allowed_p ())
2011 mallopt (M_MMAP_MAX, 0);
2012 #endif
2014 b = lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
2016 #ifdef DOUG_LEA_MALLOC
2017 if (!mmap_lisp_allowed_p ())
2018 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
2019 #endif
2021 data = b->data;
2022 b->next = large_sblocks;
2023 b->next_free = data;
2024 large_sblocks = b;
2026 else if (current_sblock == NULL
2027 || (((char *) current_sblock + SBLOCK_SIZE
2028 - (char *) current_sblock->next_free)
2029 < (needed + GC_STRING_EXTRA)))
2031 /* Not enough room in the current sblock. */
2032 b = lisp_malloc (SBLOCK_SIZE, MEM_TYPE_NON_LISP);
2033 data = b->data;
2034 b->next = NULL;
2035 b->next_free = data;
2037 if (current_sblock)
2038 current_sblock->next = b;
2039 else
2040 oldest_sblock = b;
2041 current_sblock = b;
2043 else
2045 b = current_sblock;
2046 data = b->next_free;
2049 data->string = s;
2050 b->next_free = (sdata *) ((char *) data + needed + GC_STRING_EXTRA);
2052 MALLOC_UNBLOCK_INPUT;
2054 s->u.s.data = ptr_bounds_clip (SDATA_DATA (data), nbytes + 1);
2055 #ifdef GC_CHECK_STRING_BYTES
2056 SDATA_NBYTES (data) = nbytes;
2057 #endif
2058 s->u.s.size = nchars;
2059 s->u.s.size_byte = nbytes;
2060 s->u.s.data[nbytes] = '\0';
2061 #ifdef GC_CHECK_STRING_OVERRUN
2062 memcpy ((char *) data + needed, string_overrun_cookie,
2063 GC_STRING_OVERRUN_COOKIE_SIZE);
2064 #endif
2066 /* Note that Faset may call to this function when S has already data
2067 assigned. In this case, mark data as free by setting it's string
2068 back-pointer to null, and record the size of the data in it. */
2069 if (old_data)
2071 SDATA_NBYTES (old_data) = old_nbytes;
2072 old_data->string = NULL;
2075 consing_since_gc += needed;
2079 /* Sweep and compact strings. */
2081 NO_INLINE /* For better stack traces */
2082 static void
2083 sweep_strings (void)
2085 struct string_block *b, *next;
2086 struct string_block *live_blocks = NULL;
2088 string_free_list = NULL;
2089 total_strings = total_free_strings = 0;
2090 total_string_bytes = 0;
2092 /* Scan strings_blocks, free Lisp_Strings that aren't marked. */
2093 for (b = string_blocks; b; b = next)
2095 int i, nfree = 0;
2096 struct Lisp_String *free_list_before = string_free_list;
2098 next = b->next;
2100 for (i = 0; i < STRING_BLOCK_SIZE; ++i)
2102 struct Lisp_String *s = b->strings + i;
2104 if (s->u.s.data)
2106 /* String was not on free-list before. */
2107 if (STRING_MARKED_P (s))
2109 /* String is live; unmark it and its intervals. */
2110 UNMARK_STRING (s);
2112 /* Do not use string_(set|get)_intervals here. */
2113 s->u.s.intervals = balance_intervals (s->u.s.intervals);
2115 ++total_strings;
2116 total_string_bytes += STRING_BYTES (s);
2118 else
2120 /* String is dead. Put it on the free-list. */
2121 sdata *data = SDATA_OF_STRING (s);
2123 /* Save the size of S in its sdata so that we know
2124 how large that is. Reset the sdata's string
2125 back-pointer so that we know it's free. */
2126 #ifdef GC_CHECK_STRING_BYTES
2127 if (string_bytes (s) != SDATA_NBYTES (data))
2128 emacs_abort ();
2129 #else
2130 data->n.nbytes = STRING_BYTES (s);
2131 #endif
2132 data->string = NULL;
2134 /* Reset the strings's `data' member so that we
2135 know it's free. */
2136 s->u.s.data = NULL;
2138 /* Put the string on the free-list. */
2139 NEXT_FREE_LISP_STRING (s) = string_free_list;
2140 string_free_list = ptr_bounds_clip (s, sizeof *s);
2141 ++nfree;
2144 else
2146 /* S was on the free-list before. Put it there again. */
2147 NEXT_FREE_LISP_STRING (s) = string_free_list;
2148 string_free_list = ptr_bounds_clip (s, sizeof *s);
2149 ++nfree;
2153 /* Free blocks that contain free Lisp_Strings only, except
2154 the first two of them. */
2155 if (nfree == STRING_BLOCK_SIZE
2156 && total_free_strings > STRING_BLOCK_SIZE)
2158 lisp_free (b);
2159 string_free_list = free_list_before;
2161 else
2163 total_free_strings += nfree;
2164 b->next = live_blocks;
2165 live_blocks = b;
2169 check_string_free_list ();
2171 string_blocks = live_blocks;
2172 free_large_strings ();
2173 compact_small_strings ();
2175 check_string_free_list ();
2179 /* Free dead large strings. */
2181 static void
2182 free_large_strings (void)
2184 struct sblock *b, *next;
2185 struct sblock *live_blocks = NULL;
2187 for (b = large_sblocks; b; b = next)
2189 next = b->next;
2191 if (b->data[0].string == NULL)
2192 lisp_free (b);
2193 else
2195 b->next = live_blocks;
2196 live_blocks = b;
2200 large_sblocks = live_blocks;
2204 /* Compact data of small strings. Free sblocks that don't contain
2205 data of live strings after compaction. */
2207 static void
2208 compact_small_strings (void)
2210 /* TB is the sblock we copy to, TO is the sdata within TB we copy
2211 to, and TB_END is the end of TB. */
2212 struct sblock *tb = oldest_sblock;
2213 if (tb)
2215 sdata *tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
2216 sdata *to = tb->data;
2218 /* Step through the blocks from the oldest to the youngest. We
2219 expect that old blocks will stabilize over time, so that less
2220 copying will happen this way. */
2221 struct sblock *b = tb;
2224 sdata *end = b->next_free;
2225 eassert ((char *) end <= (char *) b + SBLOCK_SIZE);
2227 for (sdata *from = b->data; from < end; )
2229 /* Compute the next FROM here because copying below may
2230 overwrite data we need to compute it. */
2231 ptrdiff_t nbytes;
2232 struct Lisp_String *s = from->string;
2234 #ifdef GC_CHECK_STRING_BYTES
2235 /* Check that the string size recorded in the string is the
2236 same as the one recorded in the sdata structure. */
2237 if (s && string_bytes (s) != SDATA_NBYTES (from))
2238 emacs_abort ();
2239 #endif /* GC_CHECK_STRING_BYTES */
2241 nbytes = s ? STRING_BYTES (s) : SDATA_NBYTES (from);
2242 eassert (nbytes <= LARGE_STRING_BYTES);
2244 ptrdiff_t size = SDATA_SIZE (nbytes);
2245 sdata *from_end = (sdata *) ((char *) from
2246 + size + GC_STRING_EXTRA);
2248 #ifdef GC_CHECK_STRING_OVERRUN
2249 if (memcmp (string_overrun_cookie,
2250 (char *) from_end - GC_STRING_OVERRUN_COOKIE_SIZE,
2251 GC_STRING_OVERRUN_COOKIE_SIZE))
2252 emacs_abort ();
2253 #endif
2255 /* Non-NULL S means it's alive. Copy its data. */
2256 if (s)
2258 /* If TB is full, proceed with the next sblock. */
2259 sdata *to_end = (sdata *) ((char *) to
2260 + size + GC_STRING_EXTRA);
2261 if (to_end > tb_end)
2263 tb->next_free = to;
2264 tb = tb->next;
2265 tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
2266 to = tb->data;
2267 to_end = (sdata *) ((char *) to + size + GC_STRING_EXTRA);
2270 /* Copy, and update the string's `data' pointer. */
2271 if (from != to)
2273 eassert (tb != b || to < from);
2274 memmove (to, from, size + GC_STRING_EXTRA);
2275 to->string->u.s.data
2276 = ptr_bounds_clip (SDATA_DATA (to), nbytes + 1);
2279 /* Advance past the sdata we copied to. */
2280 to = to_end;
2282 from = from_end;
2284 b = b->next;
2286 while (b);
2288 /* The rest of the sblocks following TB don't contain live data, so
2289 we can free them. */
2290 for (b = tb->next; b; )
2292 struct sblock *next = b->next;
2293 lisp_free (b);
2294 b = next;
2297 tb->next_free = to;
2298 tb->next = NULL;
2301 current_sblock = tb;
2304 void
2305 string_overflow (void)
2307 error ("Maximum string size exceeded");
2310 DEFUN ("make-string", Fmake_string, Smake_string, 2, 3, 0,
2311 doc: /* Return a newly created string of length LENGTH, with INIT in each element.
2312 LENGTH must be an integer.
2313 INIT must be an integer that represents a character.
2314 If optional argument MULTIBYTE is non-nil, the result will be
2315 a multibyte string even if INIT is an ASCII character. */)
2316 (Lisp_Object length, Lisp_Object init, Lisp_Object multibyte)
2318 register Lisp_Object val;
2319 int c;
2320 EMACS_INT nbytes;
2322 CHECK_NATNUM (length);
2323 CHECK_CHARACTER (init);
2325 c = XFASTINT (init);
2326 if (ASCII_CHAR_P (c) && NILP (multibyte))
2328 nbytes = XINT (length);
2329 val = make_uninit_string (nbytes);
2330 if (nbytes)
2332 memset (SDATA (val), c, nbytes);
2333 SDATA (val)[nbytes] = 0;
2336 else
2338 unsigned char str[MAX_MULTIBYTE_LENGTH];
2339 ptrdiff_t len = CHAR_STRING (c, str);
2340 EMACS_INT string_len = XINT (length);
2341 unsigned char *p, *beg, *end;
2343 if (INT_MULTIPLY_WRAPV (len, string_len, &nbytes))
2344 string_overflow ();
2345 val = make_uninit_multibyte_string (string_len, nbytes);
2346 for (beg = SDATA (val), p = beg, end = beg + nbytes; p < end; p += len)
2348 /* First time we just copy `str' to the data of `val'. */
2349 if (p == beg)
2350 memcpy (p, str, len);
2351 else
2353 /* Next time we copy largest possible chunk from
2354 initialized to uninitialized part of `val'. */
2355 len = min (p - beg, end - p);
2356 memcpy (p, beg, len);
2359 if (nbytes)
2360 *p = 0;
2363 return val;
2366 /* Fill A with 1 bits if INIT is non-nil, and with 0 bits otherwise.
2367 Return A. */
2369 Lisp_Object
2370 bool_vector_fill (Lisp_Object a, Lisp_Object init)
2372 EMACS_INT nbits = bool_vector_size (a);
2373 if (0 < nbits)
2375 unsigned char *data = bool_vector_uchar_data (a);
2376 int pattern = NILP (init) ? 0 : (1 << BOOL_VECTOR_BITS_PER_CHAR) - 1;
2377 ptrdiff_t nbytes = bool_vector_bytes (nbits);
2378 int last_mask = ~ (~0u << ((nbits - 1) % BOOL_VECTOR_BITS_PER_CHAR + 1));
2379 memset (data, pattern, nbytes - 1);
2380 data[nbytes - 1] = pattern & last_mask;
2382 return a;
2385 /* Return a newly allocated, uninitialized bool vector of size NBITS. */
2387 Lisp_Object
2388 make_uninit_bool_vector (EMACS_INT nbits)
2390 Lisp_Object val;
2391 EMACS_INT words = bool_vector_words (nbits);
2392 EMACS_INT word_bytes = words * sizeof (bits_word);
2393 EMACS_INT needed_elements = ((bool_header_size - header_size + word_bytes
2394 + word_size - 1)
2395 / word_size);
2396 struct Lisp_Bool_Vector *p
2397 = (struct Lisp_Bool_Vector *) allocate_vector (needed_elements);
2398 XSETVECTOR (val, p);
2399 XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0);
2400 p->size = nbits;
2402 /* Clear padding at the end. */
2403 if (words)
2404 p->data[words - 1] = 0;
2406 return val;
2409 DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0,
2410 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element.
2411 LENGTH must be a number. INIT matters only in whether it is t or nil. */)
2412 (Lisp_Object length, Lisp_Object init)
2414 Lisp_Object val;
2416 CHECK_NATNUM (length);
2417 val = make_uninit_bool_vector (XFASTINT (length));
2418 return bool_vector_fill (val, init);
2421 DEFUN ("bool-vector", Fbool_vector, Sbool_vector, 0, MANY, 0,
2422 doc: /* Return a new bool-vector with specified arguments as elements.
2423 Any number of arguments, even zero arguments, are allowed.
2424 usage: (bool-vector &rest OBJECTS) */)
2425 (ptrdiff_t nargs, Lisp_Object *args)
2427 ptrdiff_t i;
2428 Lisp_Object vector;
2430 vector = make_uninit_bool_vector (nargs);
2431 for (i = 0; i < nargs; i++)
2432 bool_vector_set (vector, i, !NILP (args[i]));
2434 return vector;
2437 /* Make a string from NBYTES bytes at CONTENTS, and compute the number
2438 of characters from the contents. This string may be unibyte or
2439 multibyte, depending on the contents. */
2441 Lisp_Object
2442 make_string (const char *contents, ptrdiff_t nbytes)
2444 register Lisp_Object val;
2445 ptrdiff_t nchars, multibyte_nbytes;
2447 parse_str_as_multibyte ((const unsigned char *) contents, nbytes,
2448 &nchars, &multibyte_nbytes);
2449 if (nbytes == nchars || nbytes != multibyte_nbytes)
2450 /* CONTENTS contains no multibyte sequences or contains an invalid
2451 multibyte sequence. We must make unibyte string. */
2452 val = make_unibyte_string (contents, nbytes);
2453 else
2454 val = make_multibyte_string (contents, nchars, nbytes);
2455 return val;
2458 /* Make a unibyte string from LENGTH bytes at CONTENTS. */
2460 Lisp_Object
2461 make_unibyte_string (const char *contents, ptrdiff_t length)
2463 register Lisp_Object val;
2464 val = make_uninit_string (length);
2465 memcpy (SDATA (val), contents, length);
2466 return val;
2470 /* Make a multibyte string from NCHARS characters occupying NBYTES
2471 bytes at CONTENTS. */
2473 Lisp_Object
2474 make_multibyte_string (const char *contents,
2475 ptrdiff_t nchars, ptrdiff_t nbytes)
2477 register Lisp_Object val;
2478 val = make_uninit_multibyte_string (nchars, nbytes);
2479 memcpy (SDATA (val), contents, nbytes);
2480 return val;
2484 /* Make a string from NCHARS characters occupying NBYTES bytes at
2485 CONTENTS. It is a multibyte string if NBYTES != NCHARS. */
2487 Lisp_Object
2488 make_string_from_bytes (const char *contents,
2489 ptrdiff_t nchars, ptrdiff_t nbytes)
2491 register Lisp_Object val;
2492 val = make_uninit_multibyte_string (nchars, nbytes);
2493 memcpy (SDATA (val), contents, nbytes);
2494 if (SBYTES (val) == SCHARS (val))
2495 STRING_SET_UNIBYTE (val);
2496 return val;
2500 /* Make a string from NCHARS characters occupying NBYTES bytes at
2501 CONTENTS. The argument MULTIBYTE controls whether to label the
2502 string as multibyte. If NCHARS is negative, it counts the number of
2503 characters by itself. */
2505 Lisp_Object
2506 make_specified_string (const char *contents,
2507 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
2509 Lisp_Object val;
2511 if (nchars < 0)
2513 if (multibyte)
2514 nchars = multibyte_chars_in_text ((const unsigned char *) contents,
2515 nbytes);
2516 else
2517 nchars = nbytes;
2519 val = make_uninit_multibyte_string (nchars, nbytes);
2520 memcpy (SDATA (val), contents, nbytes);
2521 if (!multibyte)
2522 STRING_SET_UNIBYTE (val);
2523 return val;
2527 /* Return a unibyte Lisp_String set up to hold LENGTH characters
2528 occupying LENGTH bytes. */
2530 Lisp_Object
2531 make_uninit_string (EMACS_INT length)
2533 Lisp_Object val;
2535 if (!length)
2536 return empty_unibyte_string;
2537 val = make_uninit_multibyte_string (length, length);
2538 STRING_SET_UNIBYTE (val);
2539 return val;
2543 /* Return a multibyte Lisp_String set up to hold NCHARS characters
2544 which occupy NBYTES bytes. */
2546 Lisp_Object
2547 make_uninit_multibyte_string (EMACS_INT nchars, EMACS_INT nbytes)
2549 Lisp_Object string;
2550 struct Lisp_String *s;
2552 if (nchars < 0)
2553 emacs_abort ();
2554 if (!nbytes)
2555 return empty_multibyte_string;
2557 s = allocate_string ();
2558 s->u.s.intervals = NULL;
2559 allocate_string_data (s, nchars, nbytes);
2560 XSETSTRING (string, s);
2561 string_chars_consed += nbytes;
2562 return string;
2565 /* Print arguments to BUF according to a FORMAT, then return
2566 a Lisp_String initialized with the data from BUF. */
2568 Lisp_Object
2569 make_formatted_string (char *buf, const char *format, ...)
2571 va_list ap;
2572 int length;
2574 va_start (ap, format);
2575 length = vsprintf (buf, format, ap);
2576 va_end (ap);
2577 return make_string (buf, length);
2581 /***********************************************************************
2582 Float Allocation
2583 ***********************************************************************/
2585 /* We store float cells inside of float_blocks, allocating a new
2586 float_block with malloc whenever necessary. Float cells reclaimed
2587 by GC are put on a free list to be reallocated before allocating
2588 any new float cells from the latest float_block. */
2590 #define FLOAT_BLOCK_SIZE \
2591 (((BLOCK_BYTES - sizeof (struct float_block *) \
2592 /* The compiler might add padding at the end. */ \
2593 - (sizeof (struct Lisp_Float) - sizeof (bits_word))) * CHAR_BIT) \
2594 / (sizeof (struct Lisp_Float) * CHAR_BIT + 1))
2596 #define GETMARKBIT(block,n) \
2597 (((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2598 >> ((n) % BITS_PER_BITS_WORD)) \
2599 & 1)
2601 #define SETMARKBIT(block,n) \
2602 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2603 |= (bits_word) 1 << ((n) % BITS_PER_BITS_WORD))
2605 #define UNSETMARKBIT(block,n) \
2606 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2607 &= ~((bits_word) 1 << ((n) % BITS_PER_BITS_WORD)))
2609 #define FLOAT_BLOCK(fptr) \
2610 ((struct float_block *) (((uintptr_t) (fptr)) & ~(BLOCK_ALIGN - 1)))
2612 #define FLOAT_INDEX(fptr) \
2613 ((((uintptr_t) (fptr)) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Float))
2615 struct float_block
2617 /* Place `floats' at the beginning, to ease up FLOAT_INDEX's job. */
2618 struct Lisp_Float floats[FLOAT_BLOCK_SIZE];
2619 bits_word gcmarkbits[1 + FLOAT_BLOCK_SIZE / BITS_PER_BITS_WORD];
2620 struct float_block *next;
2623 #define FLOAT_MARKED_P(fptr) \
2624 GETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2626 #define FLOAT_MARK(fptr) \
2627 SETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2629 #define FLOAT_UNMARK(fptr) \
2630 UNSETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2632 /* Current float_block. */
2634 static struct float_block *float_block;
2636 /* Index of first unused Lisp_Float in the current float_block. */
2638 static int float_block_index = FLOAT_BLOCK_SIZE;
2640 /* Free-list of Lisp_Floats. */
2642 static struct Lisp_Float *float_free_list;
2644 /* Return a new float object with value FLOAT_VALUE. */
2646 Lisp_Object
2647 make_float (double float_value)
2649 register Lisp_Object val;
2651 MALLOC_BLOCK_INPUT;
2653 if (float_free_list)
2655 /* We use the data field for chaining the free list
2656 so that we won't use the same field that has the mark bit. */
2657 XSETFLOAT (val, float_free_list);
2658 float_free_list = float_free_list->u.chain;
2660 else
2662 if (float_block_index == FLOAT_BLOCK_SIZE)
2664 struct float_block *new
2665 = lisp_align_malloc (sizeof *new, MEM_TYPE_FLOAT);
2666 new->next = float_block;
2667 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2668 float_block = new;
2669 float_block_index = 0;
2670 total_free_floats += FLOAT_BLOCK_SIZE;
2672 XSETFLOAT (val, &float_block->floats[float_block_index]);
2673 float_block_index++;
2676 MALLOC_UNBLOCK_INPUT;
2678 XFLOAT_INIT (val, float_value);
2679 eassert (!FLOAT_MARKED_P (XFLOAT (val)));
2680 consing_since_gc += sizeof (struct Lisp_Float);
2681 floats_consed++;
2682 total_free_floats--;
2683 return val;
2688 /***********************************************************************
2689 Cons Allocation
2690 ***********************************************************************/
2692 /* We store cons cells inside of cons_blocks, allocating a new
2693 cons_block with malloc whenever necessary. Cons cells reclaimed by
2694 GC are put on a free list to be reallocated before allocating
2695 any new cons cells from the latest cons_block. */
2697 #define CONS_BLOCK_SIZE \
2698 (((BLOCK_BYTES - sizeof (struct cons_block *) \
2699 /* The compiler might add padding at the end. */ \
2700 - (sizeof (struct Lisp_Cons) - sizeof (bits_word))) * CHAR_BIT) \
2701 / (sizeof (struct Lisp_Cons) * CHAR_BIT + 1))
2703 #define CONS_BLOCK(fptr) \
2704 ((struct cons_block *) ((uintptr_t) (fptr) & ~(BLOCK_ALIGN - 1)))
2706 #define CONS_INDEX(fptr) \
2707 (((uintptr_t) (fptr) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Cons))
2709 struct cons_block
2711 /* Place `conses' at the beginning, to ease up CONS_INDEX's job. */
2712 struct Lisp_Cons conses[CONS_BLOCK_SIZE];
2713 bits_word gcmarkbits[1 + CONS_BLOCK_SIZE / BITS_PER_BITS_WORD];
2714 struct cons_block *next;
2717 #define CONS_MARKED_P(fptr) \
2718 GETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2720 #define CONS_MARK(fptr) \
2721 SETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2723 #define CONS_UNMARK(fptr) \
2724 UNSETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2726 /* Current cons_block. */
2728 static struct cons_block *cons_block;
2730 /* Index of first unused Lisp_Cons in the current block. */
2732 static int cons_block_index = CONS_BLOCK_SIZE;
2734 /* Free-list of Lisp_Cons structures. */
2736 static struct Lisp_Cons *cons_free_list;
2738 /* Explicitly free a cons cell by putting it on the free-list. */
2740 void
2741 free_cons (struct Lisp_Cons *ptr)
2743 ptr->u.s.u.chain = cons_free_list;
2744 ptr->u.s.car = Vdead;
2745 cons_free_list = ptr;
2746 consing_since_gc -= sizeof *ptr;
2747 total_free_conses++;
2750 DEFUN ("cons", Fcons, Scons, 2, 2, 0,
2751 doc: /* Create a new cons, give it CAR and CDR as components, and return it. */)
2752 (Lisp_Object car, Lisp_Object cdr)
2754 register Lisp_Object val;
2756 MALLOC_BLOCK_INPUT;
2758 if (cons_free_list)
2760 /* We use the cdr for chaining the free list
2761 so that we won't use the same field that has the mark bit. */
2762 XSETCONS (val, cons_free_list);
2763 cons_free_list = cons_free_list->u.s.u.chain;
2765 else
2767 if (cons_block_index == CONS_BLOCK_SIZE)
2769 struct cons_block *new
2770 = lisp_align_malloc (sizeof *new, MEM_TYPE_CONS);
2771 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2772 new->next = cons_block;
2773 cons_block = new;
2774 cons_block_index = 0;
2775 total_free_conses += CONS_BLOCK_SIZE;
2777 XSETCONS (val, &cons_block->conses[cons_block_index]);
2778 cons_block_index++;
2781 MALLOC_UNBLOCK_INPUT;
2783 XSETCAR (val, car);
2784 XSETCDR (val, cdr);
2785 eassert (!CONS_MARKED_P (XCONS (val)));
2786 consing_since_gc += sizeof (struct Lisp_Cons);
2787 total_free_conses--;
2788 cons_cells_consed++;
2789 return val;
2792 #ifdef GC_CHECK_CONS_LIST
2793 /* Get an error now if there's any junk in the cons free list. */
2794 void
2795 check_cons_list (void)
2797 struct Lisp_Cons *tail = cons_free_list;
2799 while (tail)
2800 tail = tail->u.s.u.chain;
2802 #endif
2804 /* Make a list of 1, 2, 3, 4 or 5 specified objects. */
2806 Lisp_Object
2807 list1 (Lisp_Object arg1)
2809 return Fcons (arg1, Qnil);
2812 Lisp_Object
2813 list2 (Lisp_Object arg1, Lisp_Object arg2)
2815 return Fcons (arg1, Fcons (arg2, Qnil));
2819 Lisp_Object
2820 list3 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3)
2822 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Qnil)));
2826 Lisp_Object
2827 list4 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4)
2829 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4, Qnil))));
2833 Lisp_Object
2834 list5 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5)
2836 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4,
2837 Fcons (arg5, Qnil)))));
2840 /* Make a list of COUNT Lisp_Objects, where ARG is the
2841 first one. Allocate conses from pure space if TYPE
2842 is CONSTYPE_PURE, or allocate as usual if type is CONSTYPE_HEAP. */
2844 Lisp_Object
2845 listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...)
2847 Lisp_Object (*cons) (Lisp_Object, Lisp_Object);
2848 switch (type)
2850 case CONSTYPE_PURE: cons = pure_cons; break;
2851 case CONSTYPE_HEAP: cons = Fcons; break;
2852 default: emacs_abort ();
2855 eassume (0 < count);
2856 Lisp_Object val = cons (arg, Qnil);
2857 Lisp_Object tail = val;
2859 va_list ap;
2860 va_start (ap, arg);
2861 for (ptrdiff_t i = 1; i < count; i++)
2863 Lisp_Object elem = cons (va_arg (ap, Lisp_Object), Qnil);
2864 XSETCDR (tail, elem);
2865 tail = elem;
2867 va_end (ap);
2869 return val;
2872 DEFUN ("list", Flist, Slist, 0, MANY, 0,
2873 doc: /* Return a newly created list with specified arguments as elements.
2874 Any number of arguments, even zero arguments, are allowed.
2875 usage: (list &rest OBJECTS) */)
2876 (ptrdiff_t nargs, Lisp_Object *args)
2878 register Lisp_Object val;
2879 val = Qnil;
2881 while (nargs > 0)
2883 nargs--;
2884 val = Fcons (args[nargs], val);
2886 return val;
2890 DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
2891 doc: /* Return a newly created list of length LENGTH, with each element being INIT. */)
2892 (Lisp_Object length, Lisp_Object init)
2894 Lisp_Object val = Qnil;
2895 CHECK_NATNUM (length);
2897 for (EMACS_INT size = XFASTINT (length); 0 < size; size--)
2899 val = Fcons (init, val);
2900 rarely_quit (size);
2903 return val;
2908 /***********************************************************************
2909 Vector Allocation
2910 ***********************************************************************/
2912 /* Sometimes a vector's contents are merely a pointer internally used
2913 in vector allocation code. On the rare platforms where a null
2914 pointer cannot be tagged, represent it with a Lisp 0.
2915 Usually you don't want to touch this. */
2917 static struct Lisp_Vector *
2918 next_vector (struct Lisp_Vector *v)
2920 return XUNTAG (v->contents[0], Lisp_Int0);
2923 static void
2924 set_next_vector (struct Lisp_Vector *v, struct Lisp_Vector *p)
2926 v->contents[0] = make_lisp_ptr (p, Lisp_Int0);
2929 /* This value is balanced well enough to avoid too much internal overhead
2930 for the most common cases; it's not required to be a power of two, but
2931 it's expected to be a mult-of-ROUNDUP_SIZE (see below). */
2933 #define VECTOR_BLOCK_SIZE 4096
2935 /* Alignment of struct Lisp_Vector objects. Because pseudovectors
2936 can contain any C type, align at least as strictly as
2937 max_align_t. On x86 and x86-64 this can waste up to 8 bytes
2938 for typical vectors, since alignof (max_align_t) is 16 but
2939 typical vectors need only an alignment of 8. However, it is
2940 not worth the hassle to avoid wasting those bytes. */
2941 enum {vector_alignment = COMMON_MULTIPLE (alignof (max_align_t), GCALIGNMENT)};
2943 /* Vector size requests are a multiple of this. */
2944 enum { roundup_size = COMMON_MULTIPLE (vector_alignment, word_size) };
2946 /* Verify assumptions described above. */
2947 verify (VECTOR_BLOCK_SIZE % roundup_size == 0);
2948 verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS));
2950 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */
2951 #define vroundup_ct(x) ROUNDUP (x, roundup_size)
2952 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */
2953 #define vroundup(x) (eassume ((x) >= 0), vroundup_ct (x))
2955 /* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */
2957 #define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup_ct (sizeof (void *)))
2959 /* Size of the minimal vector allocated from block. */
2961 #define VBLOCK_BYTES_MIN vroundup_ct (header_size + sizeof (Lisp_Object))
2963 /* Size of the largest vector allocated from block. */
2965 #define VBLOCK_BYTES_MAX \
2966 vroundup ((VECTOR_BLOCK_BYTES / 2) - word_size)
2968 /* We maintain one free list for each possible block-allocated
2969 vector size, and this is the number of free lists we have. */
2971 #define VECTOR_MAX_FREE_LIST_INDEX \
2972 ((VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN) / roundup_size + 1)
2974 /* Common shortcut to advance vector pointer over a block data. */
2976 static struct Lisp_Vector *
2977 ADVANCE (struct Lisp_Vector *v, ptrdiff_t nbytes)
2979 void *vv = v;
2980 char *cv = vv;
2981 void *p = cv + nbytes;
2982 return p;
2985 /* Common shortcut to calculate NBYTES-vector index in VECTOR_FREE_LISTS. */
2987 static ptrdiff_t
2988 VINDEX (ptrdiff_t nbytes)
2990 eassume (VBLOCK_BYTES_MIN <= nbytes);
2991 return (nbytes - VBLOCK_BYTES_MIN) / roundup_size;
2994 /* This internal type is used to maintain the list of large vectors
2995 which are allocated at their own, e.g. outside of vector blocks.
2997 struct large_vector itself cannot contain a struct Lisp_Vector, as
2998 the latter contains a flexible array member and C99 does not allow
2999 such structs to be nested. Instead, each struct large_vector
3000 object LV is followed by a struct Lisp_Vector, which is at offset
3001 large_vector_offset from LV, and whose address is therefore
3002 large_vector_vec (&LV). */
3004 struct large_vector
3006 struct large_vector *next;
3009 enum
3011 large_vector_offset = ROUNDUP (sizeof (struct large_vector), vector_alignment)
3014 static struct Lisp_Vector *
3015 large_vector_vec (struct large_vector *p)
3017 return (struct Lisp_Vector *) ((char *) p + large_vector_offset);
3020 /* This internal type is used to maintain an underlying storage
3021 for small vectors. */
3023 struct vector_block
3025 char data[VECTOR_BLOCK_BYTES];
3026 struct vector_block *next;
3029 /* Chain of vector blocks. */
3031 static struct vector_block *vector_blocks;
3033 /* Vector free lists, where NTH item points to a chain of free
3034 vectors of the same NBYTES size, so NTH == VINDEX (NBYTES). */
3036 static struct Lisp_Vector *vector_free_lists[VECTOR_MAX_FREE_LIST_INDEX];
3038 /* Singly-linked list of large vectors. */
3040 static struct large_vector *large_vectors;
3042 /* The only vector with 0 slots, allocated from pure space. */
3044 Lisp_Object zero_vector;
3046 /* Number of live vectors. */
3048 static EMACS_INT total_vectors;
3050 /* Total size of live and free vectors, in Lisp_Object units. */
3052 static EMACS_INT total_vector_slots, total_free_vector_slots;
3054 /* Common shortcut to setup vector on a free list. */
3056 static void
3057 setup_on_free_list (struct Lisp_Vector *v, ptrdiff_t nbytes)
3059 v = ptr_bounds_clip (v, nbytes);
3060 eassume (header_size <= nbytes);
3061 ptrdiff_t nwords = (nbytes - header_size) / word_size;
3062 XSETPVECTYPESIZE (v, PVEC_FREE, 0, nwords);
3063 eassert (nbytes % roundup_size == 0);
3064 ptrdiff_t vindex = VINDEX (nbytes);
3065 eassert (vindex < VECTOR_MAX_FREE_LIST_INDEX);
3066 set_next_vector (v, vector_free_lists[vindex]);
3067 vector_free_lists[vindex] = v;
3068 total_free_vector_slots += nbytes / word_size;
3071 /* Get a new vector block. */
3073 static struct vector_block *
3074 allocate_vector_block (void)
3076 struct vector_block *block = xmalloc (sizeof *block);
3078 #ifndef GC_MALLOC_CHECK
3079 mem_insert (block->data, block->data + VECTOR_BLOCK_BYTES,
3080 MEM_TYPE_VECTOR_BLOCK);
3081 #endif
3083 block->next = vector_blocks;
3084 vector_blocks = block;
3085 return block;
3088 /* Called once to initialize vector allocation. */
3090 static void
3091 init_vectors (void)
3093 zero_vector = make_pure_vector (0);
3096 /* Allocate vector from a vector block. */
3098 static struct Lisp_Vector *
3099 allocate_vector_from_block (size_t nbytes)
3101 struct Lisp_Vector *vector;
3102 struct vector_block *block;
3103 size_t index, restbytes;
3105 eassert (VBLOCK_BYTES_MIN <= nbytes && nbytes <= VBLOCK_BYTES_MAX);
3106 eassert (nbytes % roundup_size == 0);
3108 /* First, try to allocate from a free list
3109 containing vectors of the requested size. */
3110 index = VINDEX (nbytes);
3111 if (vector_free_lists[index])
3113 vector = vector_free_lists[index];
3114 vector_free_lists[index] = next_vector (vector);
3115 total_free_vector_slots -= nbytes / word_size;
3116 return vector;
3119 /* Next, check free lists containing larger vectors. Since
3120 we will split the result, we should have remaining space
3121 large enough to use for one-slot vector at least. */
3122 for (index = VINDEX (nbytes + VBLOCK_BYTES_MIN);
3123 index < VECTOR_MAX_FREE_LIST_INDEX; index++)
3124 if (vector_free_lists[index])
3126 /* This vector is larger than requested. */
3127 vector = vector_free_lists[index];
3128 vector_free_lists[index] = next_vector (vector);
3129 total_free_vector_slots -= nbytes / word_size;
3131 /* Excess bytes are used for the smaller vector,
3132 which should be set on an appropriate free list. */
3133 restbytes = index * roundup_size + VBLOCK_BYTES_MIN - nbytes;
3134 eassert (restbytes % roundup_size == 0);
3135 setup_on_free_list (ADVANCE (vector, nbytes), restbytes);
3136 return vector;
3139 /* Finally, need a new vector block. */
3140 block = allocate_vector_block ();
3142 /* New vector will be at the beginning of this block. */
3143 vector = (struct Lisp_Vector *) block->data;
3145 /* If the rest of space from this block is large enough
3146 for one-slot vector at least, set up it on a free list. */
3147 restbytes = VECTOR_BLOCK_BYTES - nbytes;
3148 if (restbytes >= VBLOCK_BYTES_MIN)
3150 eassert (restbytes % roundup_size == 0);
3151 setup_on_free_list (ADVANCE (vector, nbytes), restbytes);
3153 return vector;
3156 /* Nonzero if VECTOR pointer is valid pointer inside BLOCK. */
3158 #define VECTOR_IN_BLOCK(vector, block) \
3159 ((char *) (vector) <= (block)->data \
3160 + VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN)
3162 /* Return the memory footprint of V in bytes. */
3164 static ptrdiff_t
3165 vector_nbytes (struct Lisp_Vector *v)
3167 ptrdiff_t size = v->header.size & ~ARRAY_MARK_FLAG;
3168 ptrdiff_t nwords;
3170 if (size & PSEUDOVECTOR_FLAG)
3172 if (PSEUDOVECTOR_TYPEP (&v->header, PVEC_BOOL_VECTOR))
3174 struct Lisp_Bool_Vector *bv = (struct Lisp_Bool_Vector *) v;
3175 ptrdiff_t word_bytes = (bool_vector_words (bv->size)
3176 * sizeof (bits_word));
3177 ptrdiff_t boolvec_bytes = bool_header_size + word_bytes;
3178 verify (header_size <= bool_header_size);
3179 nwords = (boolvec_bytes - header_size + word_size - 1) / word_size;
3181 else
3182 nwords = ((size & PSEUDOVECTOR_SIZE_MASK)
3183 + ((size & PSEUDOVECTOR_REST_MASK)
3184 >> PSEUDOVECTOR_SIZE_BITS));
3186 else
3187 nwords = size;
3188 return vroundup (header_size + word_size * nwords);
3191 /* Release extra resources still in use by VECTOR, which may be any
3192 vector-like object. */
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 const *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);
3214 if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_THREAD))
3215 finalize_one_thread ((struct thread_state *) vector);
3216 else if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_MUTEX))
3217 finalize_one_mutex ((struct Lisp_Mutex *) vector);
3218 else if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_CONDVAR))
3219 finalize_one_condvar ((struct Lisp_CondVar *) vector);
3222 /* Reclaim space used by unmarked vectors. */
3224 NO_INLINE /* For better stack traces */
3225 static void
3226 sweep_vectors (void)
3228 struct vector_block *block, **bprev = &vector_blocks;
3229 struct large_vector *lv, **lvprev = &large_vectors;
3230 struct Lisp_Vector *vector, *next;
3232 total_vectors = total_vector_slots = total_free_vector_slots = 0;
3233 memset (vector_free_lists, 0, sizeof (vector_free_lists));
3235 /* Looking through vector blocks. */
3237 for (block = vector_blocks; block; block = *bprev)
3239 bool free_this_block = 0;
3240 ptrdiff_t nbytes;
3242 for (vector = (struct Lisp_Vector *) block->data;
3243 VECTOR_IN_BLOCK (vector, block); vector = next)
3245 if (VECTOR_MARKED_P (vector))
3247 VECTOR_UNMARK (vector);
3248 total_vectors++;
3249 nbytes = vector_nbytes (vector);
3250 total_vector_slots += nbytes / word_size;
3251 next = ADVANCE (vector, nbytes);
3253 else
3255 ptrdiff_t total_bytes;
3257 cleanup_vector (vector);
3258 nbytes = vector_nbytes (vector);
3259 total_bytes = nbytes;
3260 next = ADVANCE (vector, nbytes);
3262 /* While NEXT is not marked, try to coalesce with VECTOR,
3263 thus making VECTOR of the largest possible size. */
3265 while (VECTOR_IN_BLOCK (next, block))
3267 if (VECTOR_MARKED_P (next))
3268 break;
3269 cleanup_vector (next);
3270 nbytes = vector_nbytes (next);
3271 total_bytes += nbytes;
3272 next = ADVANCE (next, nbytes);
3275 eassert (total_bytes % roundup_size == 0);
3277 if (vector == (struct Lisp_Vector *) block->data
3278 && !VECTOR_IN_BLOCK (next, block))
3279 /* This block should be freed because all of its
3280 space was coalesced into the only free vector. */
3281 free_this_block = 1;
3282 else
3283 setup_on_free_list (vector, total_bytes);
3287 if (free_this_block)
3289 *bprev = block->next;
3290 #ifndef GC_MALLOC_CHECK
3291 mem_delete (mem_find (block->data));
3292 #endif
3293 xfree (block);
3295 else
3296 bprev = &block->next;
3299 /* Sweep large vectors. */
3301 for (lv = large_vectors; lv; lv = *lvprev)
3303 vector = large_vector_vec (lv);
3304 if (VECTOR_MARKED_P (vector))
3306 VECTOR_UNMARK (vector);
3307 total_vectors++;
3308 if (vector->header.size & PSEUDOVECTOR_FLAG)
3309 total_vector_slots += vector_nbytes (vector) / word_size;
3310 else
3311 total_vector_slots
3312 += header_size / word_size + vector->header.size;
3313 lvprev = &lv->next;
3315 else
3317 *lvprev = lv->next;
3318 lisp_free (lv);
3323 /* Value is a pointer to a newly allocated Lisp_Vector structure
3324 with room for LEN Lisp_Objects. */
3326 static struct Lisp_Vector *
3327 allocate_vectorlike (ptrdiff_t len)
3329 if (len == 0)
3330 return XVECTOR (zero_vector);
3331 else
3333 size_t nbytes = header_size + len * word_size;
3334 struct Lisp_Vector *p;
3336 MALLOC_BLOCK_INPUT;
3338 #ifdef DOUG_LEA_MALLOC
3339 if (!mmap_lisp_allowed_p ())
3340 mallopt (M_MMAP_MAX, 0);
3341 #endif
3343 if (nbytes <= VBLOCK_BYTES_MAX)
3344 p = allocate_vector_from_block (vroundup (nbytes));
3345 else
3347 struct large_vector *lv
3348 = lisp_malloc ((large_vector_offset + header_size
3349 + len * word_size),
3350 MEM_TYPE_VECTORLIKE);
3351 lv->next = large_vectors;
3352 large_vectors = lv;
3353 p = large_vector_vec (lv);
3356 #ifdef DOUG_LEA_MALLOC
3357 if (!mmap_lisp_allowed_p ())
3358 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
3359 #endif
3361 if (find_suspicious_object_in_range (p, (char *) p + nbytes))
3362 emacs_abort ();
3364 consing_since_gc += nbytes;
3365 vector_cells_consed += len;
3367 MALLOC_UNBLOCK_INPUT;
3369 return ptr_bounds_clip (p, nbytes);
3374 /* Allocate a vector with LEN slots. */
3376 struct Lisp_Vector *
3377 allocate_vector (EMACS_INT len)
3379 struct Lisp_Vector *v;
3380 ptrdiff_t nbytes_max = min (PTRDIFF_MAX, SIZE_MAX);
3382 if (min ((nbytes_max - header_size) / word_size, MOST_POSITIVE_FIXNUM) < len)
3383 memory_full (SIZE_MAX);
3384 v = allocate_vectorlike (len);
3385 if (len)
3386 v->header.size = len;
3387 return v;
3391 /* Allocate other vector-like structures. */
3393 struct Lisp_Vector *
3394 allocate_pseudovector (int memlen, int lisplen,
3395 int zerolen, enum pvec_type tag)
3397 struct Lisp_Vector *v = allocate_vectorlike (memlen);
3399 /* Catch bogus values. */
3400 eassert (0 <= tag && tag <= PVEC_FONT);
3401 eassert (0 <= lisplen && lisplen <= zerolen && zerolen <= memlen);
3402 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
3403 eassert (lisplen <= PSEUDOVECTOR_SIZE_MASK);
3405 /* Only the first LISPLEN slots will be traced normally by the GC. */
3406 memclear (v->contents, zerolen * word_size);
3407 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
3408 return v;
3411 struct buffer *
3412 allocate_buffer (void)
3414 struct buffer *b = lisp_malloc (sizeof *b, MEM_TYPE_BUFFER);
3416 BUFFER_PVEC_INIT (b);
3417 /* Put B on the chain of all buffers including killed ones. */
3418 b->next = all_buffers;
3419 all_buffers = b;
3420 /* Note that the rest fields of B are not initialized. */
3421 return b;
3425 /* Allocate a record with COUNT slots. COUNT must be positive, and
3426 includes the type slot. */
3428 static struct Lisp_Vector *
3429 allocate_record (EMACS_INT count)
3431 if (count > PSEUDOVECTOR_SIZE_MASK)
3432 error ("Attempt to allocate a record of %"pI"d slots; max is %d",
3433 count, PSEUDOVECTOR_SIZE_MASK);
3434 struct Lisp_Vector *p = allocate_vectorlike (count);
3435 p->header.size = count;
3436 XSETPVECTYPE (p, PVEC_RECORD);
3437 return p;
3441 DEFUN ("make-record", Fmake_record, Smake_record, 3, 3, 0,
3442 doc: /* Create a new record.
3443 TYPE is its type as returned by `type-of'; it should be either a
3444 symbol or a type descriptor. SLOTS is the number of non-type slots,
3445 each initialized to INIT. */)
3446 (Lisp_Object type, Lisp_Object slots, Lisp_Object init)
3448 CHECK_NATNUM (slots);
3449 EMACS_INT size = XFASTINT (slots) + 1;
3450 struct Lisp_Vector *p = allocate_record (size);
3451 p->contents[0] = type;
3452 for (ptrdiff_t i = 1; i < size; i++)
3453 p->contents[i] = init;
3454 return make_lisp_ptr (p, Lisp_Vectorlike);
3458 DEFUN ("record", Frecord, Srecord, 1, MANY, 0,
3459 doc: /* Create a new record.
3460 TYPE is its type as returned by `type-of'; it should be either a
3461 symbol or a type descriptor. SLOTS is used to initialize the record
3462 slots with shallow copies of the arguments.
3463 usage: (record TYPE &rest SLOTS) */)
3464 (ptrdiff_t nargs, Lisp_Object *args)
3466 struct Lisp_Vector *p = allocate_record (nargs);
3467 memcpy (p->contents, args, nargs * sizeof *args);
3468 return make_lisp_ptr (p, Lisp_Vectorlike);
3472 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
3473 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
3474 See also the function `vector'. */)
3475 (Lisp_Object length, Lisp_Object init)
3477 CHECK_NATNUM (length);
3478 struct Lisp_Vector *p = allocate_vector (XFASTINT (length));
3479 for (ptrdiff_t i = 0; i < XFASTINT (length); i++)
3480 p->contents[i] = init;
3481 return make_lisp_ptr (p, Lisp_Vectorlike);
3484 DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
3485 doc: /* Return a newly created vector with specified arguments as elements.
3486 Any number of arguments, even zero arguments, are allowed.
3487 usage: (vector &rest OBJECTS) */)
3488 (ptrdiff_t nargs, Lisp_Object *args)
3490 Lisp_Object val = make_uninit_vector (nargs);
3491 struct Lisp_Vector *p = XVECTOR (val);
3492 memcpy (p->contents, args, nargs * sizeof *args);
3493 return val;
3496 void
3497 make_byte_code (struct Lisp_Vector *v)
3499 /* Don't allow the global zero_vector to become a byte code object. */
3500 eassert (0 < v->header.size);
3502 if (v->header.size > 1 && STRINGP (v->contents[1])
3503 && STRING_MULTIBYTE (v->contents[1]))
3504 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the
3505 earlier because they produced a raw 8-bit string for byte-code
3506 and now such a byte-code string is loaded as multibyte while
3507 raw 8-bit characters converted to multibyte form. Thus, now we
3508 must convert them back to the original unibyte form. */
3509 v->contents[1] = Fstring_as_unibyte (v->contents[1]);
3510 XSETPVECTYPE (v, PVEC_COMPILED);
3513 DEFUN ("make-byte-code", Fmake_byte_code, Smake_byte_code, 4, MANY, 0,
3514 doc: /* Create a byte-code object with specified arguments as elements.
3515 The arguments should be the ARGLIST, bytecode-string BYTE-CODE, constant
3516 vector CONSTANTS, maximum stack size DEPTH, (optional) DOCSTRING,
3517 and (optional) INTERACTIVE-SPEC.
3518 The first four arguments are required; at most six have any
3519 significance.
3520 The ARGLIST can be either like the one of `lambda', in which case the arguments
3521 will be dynamically bound before executing the byte code, or it can be an
3522 integer of the form NNNNNNNRMMMMMMM where the 7bit MMMMMMM specifies the
3523 minimum number of arguments, the 7-bit NNNNNNN specifies the maximum number
3524 of arguments (ignoring &rest) and the R bit specifies whether there is a &rest
3525 argument to catch the left-over arguments. If such an integer is used, the
3526 arguments will not be dynamically bound but will be instead pushed on the
3527 stack before executing the byte-code.
3528 usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS) */)
3529 (ptrdiff_t nargs, Lisp_Object *args)
3531 Lisp_Object val = make_uninit_vector (nargs);
3532 struct Lisp_Vector *p = XVECTOR (val);
3534 /* We used to purecopy everything here, if purify-flag was set. This worked
3535 OK for Emacs-23, but with Emacs-24's lexical binding code, it can be
3536 dangerous, since make-byte-code is used during execution to build
3537 closures, so any closure built during the preload phase would end up
3538 copied into pure space, including its free variables, which is sometimes
3539 just wasteful and other times plainly wrong (e.g. those free vars may want
3540 to be setcar'd). */
3542 memcpy (p->contents, args, nargs * sizeof *args);
3543 make_byte_code (p);
3544 XSETCOMPILED (val, p);
3545 return val;
3550 /***********************************************************************
3551 Symbol Allocation
3552 ***********************************************************************/
3554 /* Each symbol_block is just under 1020 bytes long, since malloc
3555 really allocates in units of powers of two and uses 4 bytes for its
3556 own overhead. */
3558 #define SYMBOL_BLOCK_SIZE \
3559 ((1020 - sizeof (struct symbol_block *)) / sizeof (struct Lisp_Symbol))
3561 struct symbol_block
3563 /* Place `symbols' first, to preserve alignment. */
3564 struct Lisp_Symbol symbols[SYMBOL_BLOCK_SIZE];
3565 struct symbol_block *next;
3568 /* Current symbol block and index of first unused Lisp_Symbol
3569 structure in it. */
3571 static struct symbol_block *symbol_block;
3572 static int symbol_block_index = SYMBOL_BLOCK_SIZE;
3573 /* Pointer to the first symbol_block that contains pinned symbols.
3574 Tests for 24.4 showed that at dump-time, Emacs contains about 15K symbols,
3575 10K of which are pinned (and all but 250 of them are interned in obarray),
3576 whereas a "typical session" has in the order of 30K symbols.
3577 `symbol_block_pinned' lets mark_pinned_symbols scan only 15K symbols rather
3578 than 30K to find the 10K symbols we need to mark. */
3579 static struct symbol_block *symbol_block_pinned;
3581 /* List of free symbols. */
3583 static struct Lisp_Symbol *symbol_free_list;
3585 static void
3586 set_symbol_name (Lisp_Object sym, Lisp_Object name)
3588 XSYMBOL (sym)->u.s.name = name;
3591 void
3592 init_symbol (Lisp_Object val, Lisp_Object name)
3594 struct Lisp_Symbol *p = XSYMBOL (val);
3595 set_symbol_name (val, name);
3596 set_symbol_plist (val, Qnil);
3597 p->u.s.redirect = SYMBOL_PLAINVAL;
3598 SET_SYMBOL_VAL (p, Qunbound);
3599 set_symbol_function (val, Qnil);
3600 set_symbol_next (val, NULL);
3601 p->u.s.gcmarkbit = false;
3602 p->u.s.interned = SYMBOL_UNINTERNED;
3603 p->u.s.trapped_write = SYMBOL_UNTRAPPED_WRITE;
3604 p->u.s.declared_special = false;
3605 p->u.s.pinned = false;
3608 DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0,
3609 doc: /* Return a newly allocated uninterned symbol whose name is NAME.
3610 Its value is void, and its function definition and property list are nil. */)
3611 (Lisp_Object name)
3613 Lisp_Object val;
3615 CHECK_STRING (name);
3617 MALLOC_BLOCK_INPUT;
3619 if (symbol_free_list)
3621 XSETSYMBOL (val, symbol_free_list);
3622 symbol_free_list = symbol_free_list->u.s.next;
3624 else
3626 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
3628 struct symbol_block *new
3629 = lisp_malloc (sizeof *new, MEM_TYPE_SYMBOL);
3630 new->next = symbol_block;
3631 symbol_block = new;
3632 symbol_block_index = 0;
3633 total_free_symbols += SYMBOL_BLOCK_SIZE;
3635 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index]);
3636 symbol_block_index++;
3639 MALLOC_UNBLOCK_INPUT;
3641 init_symbol (val, name);
3642 consing_since_gc += sizeof (struct Lisp_Symbol);
3643 symbols_consed++;
3644 total_free_symbols--;
3645 return val;
3650 /***********************************************************************
3651 Marker (Misc) Allocation
3652 ***********************************************************************/
3654 /* Like union Lisp_Misc, but padded so that its size is a multiple of
3655 the required alignment. */
3657 union aligned_Lisp_Misc
3659 union Lisp_Misc m;
3660 unsigned char c[(sizeof (union Lisp_Misc) + GCALIGNMENT - 1)
3661 & -GCALIGNMENT];
3664 /* Allocation of markers and other objects that share that structure.
3665 Works like allocation of conses. */
3667 #define MARKER_BLOCK_SIZE \
3668 ((1020 - sizeof (struct marker_block *)) / sizeof (union aligned_Lisp_Misc))
3670 struct marker_block
3672 /* Place `markers' first, to preserve alignment. */
3673 union aligned_Lisp_Misc markers[MARKER_BLOCK_SIZE];
3674 struct marker_block *next;
3677 static struct marker_block *marker_block;
3678 static int marker_block_index = MARKER_BLOCK_SIZE;
3680 static union Lisp_Misc *misc_free_list;
3682 /* Return a newly allocated Lisp_Misc object of specified TYPE. */
3684 static Lisp_Object
3685 allocate_misc (enum Lisp_Misc_Type type)
3687 Lisp_Object val;
3689 MALLOC_BLOCK_INPUT;
3691 if (misc_free_list)
3693 XSETMISC (val, misc_free_list);
3694 misc_free_list = misc_free_list->u_free.chain;
3696 else
3698 if (marker_block_index == MARKER_BLOCK_SIZE)
3700 struct marker_block *new = lisp_malloc (sizeof *new, MEM_TYPE_MISC);
3701 new->next = marker_block;
3702 marker_block = new;
3703 marker_block_index = 0;
3704 total_free_markers += MARKER_BLOCK_SIZE;
3706 XSETMISC (val, &marker_block->markers[marker_block_index].m);
3707 marker_block_index++;
3710 MALLOC_UNBLOCK_INPUT;
3712 --total_free_markers;
3713 consing_since_gc += sizeof (union Lisp_Misc);
3714 misc_objects_consed++;
3715 XMISCANY (val)->type = type;
3716 XMISCANY (val)->gcmarkbit = 0;
3717 return val;
3720 /* Free a Lisp_Misc object. */
3722 void
3723 free_misc (Lisp_Object misc)
3725 XMISCANY (misc)->type = Lisp_Misc_Free;
3726 XMISC (misc)->u_free.chain = misc_free_list;
3727 misc_free_list = XMISC (misc);
3728 consing_since_gc -= sizeof (union Lisp_Misc);
3729 total_free_markers++;
3732 /* Verify properties of Lisp_Save_Value's representation
3733 that are assumed here and elsewhere. */
3735 verify (SAVE_UNUSED == 0);
3736 verify (((SAVE_INTEGER | SAVE_POINTER | SAVE_FUNCPOINTER | SAVE_OBJECT)
3737 >> SAVE_SLOT_BITS)
3738 == 0);
3740 /* Return Lisp_Save_Value objects for the various combinations
3741 that callers need. */
3743 Lisp_Object
3744 make_save_int_int_int (ptrdiff_t a, ptrdiff_t b, ptrdiff_t c)
3746 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3747 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3748 p->save_type = SAVE_TYPE_INT_INT_INT;
3749 p->data[0].integer = a;
3750 p->data[1].integer = b;
3751 p->data[2].integer = c;
3752 return val;
3755 Lisp_Object
3756 make_save_obj_obj_obj_obj (Lisp_Object a, Lisp_Object b, Lisp_Object c,
3757 Lisp_Object d)
3759 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3760 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3761 p->save_type = SAVE_TYPE_OBJ_OBJ_OBJ_OBJ;
3762 p->data[0].object = a;
3763 p->data[1].object = b;
3764 p->data[2].object = c;
3765 p->data[3].object = d;
3766 return val;
3769 Lisp_Object
3770 make_save_ptr (void *a)
3772 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3773 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3774 p->save_type = SAVE_POINTER;
3775 p->data[0].pointer = a;
3776 return val;
3779 Lisp_Object
3780 make_save_ptr_int (void *a, ptrdiff_t b)
3782 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3783 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3784 p->save_type = SAVE_TYPE_PTR_INT;
3785 p->data[0].pointer = a;
3786 p->data[1].integer = b;
3787 return val;
3790 Lisp_Object
3791 make_save_ptr_ptr (void *a, void *b)
3793 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3794 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3795 p->save_type = SAVE_TYPE_PTR_PTR;
3796 p->data[0].pointer = a;
3797 p->data[1].pointer = b;
3798 return val;
3801 Lisp_Object
3802 make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c)
3804 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3805 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3806 p->save_type = SAVE_TYPE_FUNCPTR_PTR_OBJ;
3807 p->data[0].funcpointer = a;
3808 p->data[1].pointer = b;
3809 p->data[2].object = c;
3810 return val;
3813 /* Return a Lisp_Save_Value object that represents an array A
3814 of N Lisp objects. */
3816 Lisp_Object
3817 make_save_memory (Lisp_Object *a, ptrdiff_t n)
3819 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3820 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3821 p->save_type = SAVE_TYPE_MEMORY;
3822 p->data[0].pointer = a;
3823 p->data[1].integer = n;
3824 return val;
3827 /* Free a Lisp_Save_Value object. Do not use this function
3828 if SAVE contains pointer other than returned by xmalloc. */
3830 void
3831 free_save_value (Lisp_Object save)
3833 xfree (XSAVE_POINTER (save, 0));
3834 free_misc (save);
3837 /* Return a Lisp_Misc_Overlay object with specified START, END and PLIST. */
3839 Lisp_Object
3840 build_overlay (Lisp_Object start, Lisp_Object end, Lisp_Object plist)
3842 register Lisp_Object overlay;
3844 overlay = allocate_misc (Lisp_Misc_Overlay);
3845 OVERLAY_START (overlay) = start;
3846 OVERLAY_END (overlay) = end;
3847 set_overlay_plist (overlay, plist);
3848 XOVERLAY (overlay)->next = NULL;
3849 return overlay;
3852 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3853 doc: /* Return a newly allocated marker which does not point at any place. */)
3854 (void)
3856 register Lisp_Object val;
3857 register struct Lisp_Marker *p;
3859 val = allocate_misc (Lisp_Misc_Marker);
3860 p = XMARKER (val);
3861 p->buffer = 0;
3862 p->bytepos = 0;
3863 p->charpos = 0;
3864 p->next = NULL;
3865 p->insertion_type = 0;
3866 p->need_adjustment = 0;
3867 return val;
3870 /* Return a newly allocated marker which points into BUF
3871 at character position CHARPOS and byte position BYTEPOS. */
3873 Lisp_Object
3874 build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos)
3876 Lisp_Object obj;
3877 struct Lisp_Marker *m;
3879 /* No dead buffers here. */
3880 eassert (BUFFER_LIVE_P (buf));
3882 /* Every character is at least one byte. */
3883 eassert (charpos <= bytepos);
3885 obj = allocate_misc (Lisp_Misc_Marker);
3886 m = XMARKER (obj);
3887 m->buffer = buf;
3888 m->charpos = charpos;
3889 m->bytepos = bytepos;
3890 m->insertion_type = 0;
3891 m->need_adjustment = 0;
3892 m->next = BUF_MARKERS (buf);
3893 BUF_MARKERS (buf) = m;
3894 return obj;
3898 /* Return a newly created vector or string with specified arguments as
3899 elements. If all the arguments are characters that can fit
3900 in a string of events, make a string; otherwise, make a vector.
3902 Any number of arguments, even zero arguments, are allowed. */
3904 Lisp_Object
3905 make_event_array (ptrdiff_t nargs, Lisp_Object *args)
3907 ptrdiff_t i;
3909 for (i = 0; i < nargs; i++)
3910 /* The things that fit in a string
3911 are characters that are in 0...127,
3912 after discarding the meta bit and all the bits above it. */
3913 if (!INTEGERP (args[i])
3914 || (XINT (args[i]) & ~(-CHAR_META)) >= 0200)
3915 return Fvector (nargs, args);
3917 /* Since the loop exited, we know that all the things in it are
3918 characters, so we can make a string. */
3920 Lisp_Object result;
3922 result = Fmake_string (make_number (nargs), make_number (0), Qnil);
3923 for (i = 0; i < nargs; i++)
3925 SSET (result, i, XINT (args[i]));
3926 /* Move the meta bit to the right place for a string char. */
3927 if (XINT (args[i]) & CHAR_META)
3928 SSET (result, i, SREF (result, i) | 0x80);
3931 return result;
3935 #ifdef HAVE_MODULES
3936 /* Create a new module user ptr object. */
3937 Lisp_Object
3938 make_user_ptr (void (*finalizer) (void *), void *p)
3940 Lisp_Object obj;
3941 struct Lisp_User_Ptr *uptr;
3943 obj = allocate_misc (Lisp_Misc_User_Ptr);
3944 uptr = XUSER_PTR (obj);
3945 uptr->finalizer = finalizer;
3946 uptr->p = p;
3947 return obj;
3949 #endif
3951 static void
3952 init_finalizer_list (struct Lisp_Finalizer *head)
3954 head->prev = head->next = head;
3957 /* Insert FINALIZER before ELEMENT. */
3959 static void
3960 finalizer_insert (struct Lisp_Finalizer *element,
3961 struct Lisp_Finalizer *finalizer)
3963 eassert (finalizer->prev == NULL);
3964 eassert (finalizer->next == NULL);
3965 finalizer->next = element;
3966 finalizer->prev = element->prev;
3967 finalizer->prev->next = finalizer;
3968 element->prev = finalizer;
3971 static void
3972 unchain_finalizer (struct Lisp_Finalizer *finalizer)
3974 if (finalizer->prev != NULL)
3976 eassert (finalizer->next != NULL);
3977 finalizer->prev->next = finalizer->next;
3978 finalizer->next->prev = finalizer->prev;
3979 finalizer->prev = finalizer->next = NULL;
3983 static void
3984 mark_finalizer_list (struct Lisp_Finalizer *head)
3986 for (struct Lisp_Finalizer *finalizer = head->next;
3987 finalizer != head;
3988 finalizer = finalizer->next)
3990 finalizer->base.gcmarkbit = true;
3991 mark_object (finalizer->function);
3995 /* Move doomed finalizers to list DEST from list SRC. A doomed
3996 finalizer is one that is not GC-reachable and whose
3997 finalizer->function is non-nil. */
3999 static void
4000 queue_doomed_finalizers (struct Lisp_Finalizer *dest,
4001 struct Lisp_Finalizer *src)
4003 struct Lisp_Finalizer *finalizer = src->next;
4004 while (finalizer != src)
4006 struct Lisp_Finalizer *next = finalizer->next;
4007 if (!finalizer->base.gcmarkbit && !NILP (finalizer->function))
4009 unchain_finalizer (finalizer);
4010 finalizer_insert (dest, finalizer);
4013 finalizer = next;
4017 static Lisp_Object
4018 run_finalizer_handler (Lisp_Object args)
4020 add_to_log ("finalizer failed: %S", args);
4021 return Qnil;
4024 static void
4025 run_finalizer_function (Lisp_Object function)
4027 ptrdiff_t count = SPECPDL_INDEX ();
4029 specbind (Qinhibit_quit, Qt);
4030 internal_condition_case_1 (call0, function, Qt, run_finalizer_handler);
4031 unbind_to (count, Qnil);
4034 static void
4035 run_finalizers (struct Lisp_Finalizer *finalizers)
4037 struct Lisp_Finalizer *finalizer;
4038 Lisp_Object function;
4040 while (finalizers->next != finalizers)
4042 finalizer = finalizers->next;
4043 eassert (finalizer->base.type == Lisp_Misc_Finalizer);
4044 unchain_finalizer (finalizer);
4045 function = finalizer->function;
4046 if (!NILP (function))
4048 finalizer->function = Qnil;
4049 run_finalizer_function (function);
4054 DEFUN ("make-finalizer", Fmake_finalizer, Smake_finalizer, 1, 1, 0,
4055 doc: /* Make a finalizer that will run FUNCTION.
4056 FUNCTION will be called after garbage collection when the returned
4057 finalizer object becomes unreachable. If the finalizer object is
4058 reachable only through references from finalizer objects, it does not
4059 count as reachable for the purpose of deciding whether to run
4060 FUNCTION. FUNCTION will be run once per finalizer object. */)
4061 (Lisp_Object function)
4063 Lisp_Object val = allocate_misc (Lisp_Misc_Finalizer);
4064 struct Lisp_Finalizer *finalizer = XFINALIZER (val);
4065 finalizer->function = function;
4066 finalizer->prev = finalizer->next = NULL;
4067 finalizer_insert (&finalizers, finalizer);
4068 return val;
4072 /************************************************************************
4073 Memory Full Handling
4074 ************************************************************************/
4077 /* Called if malloc (NBYTES) returns zero. If NBYTES == SIZE_MAX,
4078 there may have been size_t overflow so that malloc was never
4079 called, or perhaps malloc was invoked successfully but the
4080 resulting pointer had problems fitting into a tagged EMACS_INT. In
4081 either case this counts as memory being full even though malloc did
4082 not fail. */
4084 void
4085 memory_full (size_t nbytes)
4087 /* Do not go into hysterics merely because a large request failed. */
4088 bool enough_free_memory = 0;
4089 if (SPARE_MEMORY < nbytes)
4091 void *p;
4093 MALLOC_BLOCK_INPUT;
4094 p = malloc (SPARE_MEMORY);
4095 if (p)
4097 free (p);
4098 enough_free_memory = 1;
4100 MALLOC_UNBLOCK_INPUT;
4103 if (! enough_free_memory)
4105 int i;
4107 Vmemory_full = Qt;
4109 memory_full_cons_threshold = sizeof (struct cons_block);
4111 /* The first time we get here, free the spare memory. */
4112 for (i = 0; i < ARRAYELTS (spare_memory); i++)
4113 if (spare_memory[i])
4115 if (i == 0)
4116 free (spare_memory[i]);
4117 else if (i >= 1 && i <= 4)
4118 lisp_align_free (spare_memory[i]);
4119 else
4120 lisp_free (spare_memory[i]);
4121 spare_memory[i] = 0;
4125 /* This used to call error, but if we've run out of memory, we could
4126 get infinite recursion trying to build the string. */
4127 xsignal (Qnil, Vmemory_signal_data);
4130 /* If we released our reserve (due to running out of memory),
4131 and we have a fair amount free once again,
4132 try to set aside another reserve in case we run out once more.
4134 This is called when a relocatable block is freed in ralloc.c,
4135 and also directly from this file, in case we're not using ralloc.c. */
4137 void
4138 refill_memory_reserve (void)
4140 #if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
4141 if (spare_memory[0] == 0)
4142 spare_memory[0] = malloc (SPARE_MEMORY);
4143 if (spare_memory[1] == 0)
4144 spare_memory[1] = lisp_align_malloc (sizeof (struct cons_block),
4145 MEM_TYPE_SPARE);
4146 if (spare_memory[2] == 0)
4147 spare_memory[2] = lisp_align_malloc (sizeof (struct cons_block),
4148 MEM_TYPE_SPARE);
4149 if (spare_memory[3] == 0)
4150 spare_memory[3] = lisp_align_malloc (sizeof (struct cons_block),
4151 MEM_TYPE_SPARE);
4152 if (spare_memory[4] == 0)
4153 spare_memory[4] = lisp_align_malloc (sizeof (struct cons_block),
4154 MEM_TYPE_SPARE);
4155 if (spare_memory[5] == 0)
4156 spare_memory[5] = lisp_malloc (sizeof (struct string_block),
4157 MEM_TYPE_SPARE);
4158 if (spare_memory[6] == 0)
4159 spare_memory[6] = lisp_malloc (sizeof (struct string_block),
4160 MEM_TYPE_SPARE);
4161 if (spare_memory[0] && spare_memory[1] && spare_memory[5])
4162 Vmemory_full = Qnil;
4163 #endif
4166 /************************************************************************
4167 C Stack Marking
4168 ************************************************************************/
4170 /* Conservative C stack marking requires a method to identify possibly
4171 live Lisp objects given a pointer value. We do this by keeping
4172 track of blocks of Lisp data that are allocated in a red-black tree
4173 (see also the comment of mem_node which is the type of nodes in
4174 that tree). Function lisp_malloc adds information for an allocated
4175 block to the red-black tree with calls to mem_insert, and function
4176 lisp_free removes it with mem_delete. Functions live_string_p etc
4177 call mem_find to lookup information about a given pointer in the
4178 tree, and use that to determine if the pointer points into a Lisp
4179 object or not. */
4181 /* Initialize this part of alloc.c. */
4183 static void
4184 mem_init (void)
4186 mem_z.left = mem_z.right = MEM_NIL;
4187 mem_z.parent = NULL;
4188 mem_z.color = MEM_BLACK;
4189 mem_z.start = mem_z.end = NULL;
4190 mem_root = MEM_NIL;
4194 /* Value is a pointer to the mem_node containing START. Value is
4195 MEM_NIL if there is no node in the tree containing START. */
4197 static struct mem_node *
4198 mem_find (void *start)
4200 struct mem_node *p;
4202 if (start < min_heap_address || start > max_heap_address)
4203 return MEM_NIL;
4205 /* Make the search always successful to speed up the loop below. */
4206 mem_z.start = start;
4207 mem_z.end = (char *) start + 1;
4209 p = mem_root;
4210 while (start < p->start || start >= p->end)
4211 p = start < p->start ? p->left : p->right;
4212 return p;
4216 /* Insert a new node into the tree for a block of memory with start
4217 address START, end address END, and type TYPE. Value is a
4218 pointer to the node that was inserted. */
4220 static struct mem_node *
4221 mem_insert (void *start, void *end, enum mem_type type)
4223 struct mem_node *c, *parent, *x;
4225 if (min_heap_address == NULL || start < min_heap_address)
4226 min_heap_address = start;
4227 if (max_heap_address == NULL || end > max_heap_address)
4228 max_heap_address = end;
4230 /* See where in the tree a node for START belongs. In this
4231 particular application, it shouldn't happen that a node is already
4232 present. For debugging purposes, let's check that. */
4233 c = mem_root;
4234 parent = NULL;
4236 while (c != MEM_NIL)
4238 parent = c;
4239 c = start < c->start ? c->left : c->right;
4242 /* Create a new node. */
4243 #ifdef GC_MALLOC_CHECK
4244 x = malloc (sizeof *x);
4245 if (x == NULL)
4246 emacs_abort ();
4247 #else
4248 x = xmalloc (sizeof *x);
4249 #endif
4250 x->start = start;
4251 x->end = end;
4252 x->type = type;
4253 x->parent = parent;
4254 x->left = x->right = MEM_NIL;
4255 x->color = MEM_RED;
4257 /* Insert it as child of PARENT or install it as root. */
4258 if (parent)
4260 if (start < parent->start)
4261 parent->left = x;
4262 else
4263 parent->right = x;
4265 else
4266 mem_root = x;
4268 /* Re-establish red-black tree properties. */
4269 mem_insert_fixup (x);
4271 return x;
4275 /* Re-establish the red-black properties of the tree, and thereby
4276 balance the tree, after node X has been inserted; X is always red. */
4278 static void
4279 mem_insert_fixup (struct mem_node *x)
4281 while (x != mem_root && x->parent->color == MEM_RED)
4283 /* X is red and its parent is red. This is a violation of
4284 red-black tree property #3. */
4286 if (x->parent == x->parent->parent->left)
4288 /* We're on the left side of our grandparent, and Y is our
4289 "uncle". */
4290 struct mem_node *y = x->parent->parent->right;
4292 if (y->color == MEM_RED)
4294 /* Uncle and parent are red but should be black because
4295 X is red. Change the colors accordingly and proceed
4296 with the grandparent. */
4297 x->parent->color = MEM_BLACK;
4298 y->color = MEM_BLACK;
4299 x->parent->parent->color = MEM_RED;
4300 x = x->parent->parent;
4302 else
4304 /* Parent and uncle have different colors; parent is
4305 red, uncle is black. */
4306 if (x == x->parent->right)
4308 x = x->parent;
4309 mem_rotate_left (x);
4312 x->parent->color = MEM_BLACK;
4313 x->parent->parent->color = MEM_RED;
4314 mem_rotate_right (x->parent->parent);
4317 else
4319 /* This is the symmetrical case of above. */
4320 struct mem_node *y = x->parent->parent->left;
4322 if (y->color == MEM_RED)
4324 x->parent->color = MEM_BLACK;
4325 y->color = MEM_BLACK;
4326 x->parent->parent->color = MEM_RED;
4327 x = x->parent->parent;
4329 else
4331 if (x == x->parent->left)
4333 x = x->parent;
4334 mem_rotate_right (x);
4337 x->parent->color = MEM_BLACK;
4338 x->parent->parent->color = MEM_RED;
4339 mem_rotate_left (x->parent->parent);
4344 /* The root may have been changed to red due to the algorithm. Set
4345 it to black so that property #5 is satisfied. */
4346 mem_root->color = MEM_BLACK;
4350 /* (x) (y)
4351 / \ / \
4352 a (y) ===> (x) c
4353 / \ / \
4354 b c a b */
4356 static void
4357 mem_rotate_left (struct mem_node *x)
4359 struct mem_node *y;
4361 /* Turn y's left sub-tree into x's right sub-tree. */
4362 y = x->right;
4363 x->right = y->left;
4364 if (y->left != MEM_NIL)
4365 y->left->parent = x;
4367 /* Y's parent was x's parent. */
4368 if (y != MEM_NIL)
4369 y->parent = x->parent;
4371 /* Get the parent to point to y instead of x. */
4372 if (x->parent)
4374 if (x == x->parent->left)
4375 x->parent->left = y;
4376 else
4377 x->parent->right = y;
4379 else
4380 mem_root = y;
4382 /* Put x on y's left. */
4383 y->left = x;
4384 if (x != MEM_NIL)
4385 x->parent = y;
4389 /* (x) (Y)
4390 / \ / \
4391 (y) c ===> a (x)
4392 / \ / \
4393 a b b c */
4395 static void
4396 mem_rotate_right (struct mem_node *x)
4398 struct mem_node *y = x->left;
4400 x->left = y->right;
4401 if (y->right != MEM_NIL)
4402 y->right->parent = x;
4404 if (y != MEM_NIL)
4405 y->parent = x->parent;
4406 if (x->parent)
4408 if (x == x->parent->right)
4409 x->parent->right = y;
4410 else
4411 x->parent->left = y;
4413 else
4414 mem_root = y;
4416 y->right = x;
4417 if (x != MEM_NIL)
4418 x->parent = y;
4422 /* Delete node Z from the tree. If Z is null or MEM_NIL, do nothing. */
4424 static void
4425 mem_delete (struct mem_node *z)
4427 struct mem_node *x, *y;
4429 if (!z || z == MEM_NIL)
4430 return;
4432 if (z->left == MEM_NIL || z->right == MEM_NIL)
4433 y = z;
4434 else
4436 y = z->right;
4437 while (y->left != MEM_NIL)
4438 y = y->left;
4441 if (y->left != MEM_NIL)
4442 x = y->left;
4443 else
4444 x = y->right;
4446 x->parent = y->parent;
4447 if (y->parent)
4449 if (y == y->parent->left)
4450 y->parent->left = x;
4451 else
4452 y->parent->right = x;
4454 else
4455 mem_root = x;
4457 if (y != z)
4459 z->start = y->start;
4460 z->end = y->end;
4461 z->type = y->type;
4464 if (y->color == MEM_BLACK)
4465 mem_delete_fixup (x);
4467 #ifdef GC_MALLOC_CHECK
4468 free (y);
4469 #else
4470 xfree (y);
4471 #endif
4475 /* Re-establish the red-black properties of the tree, after a
4476 deletion. */
4478 static void
4479 mem_delete_fixup (struct mem_node *x)
4481 while (x != mem_root && x->color == MEM_BLACK)
4483 if (x == x->parent->left)
4485 struct mem_node *w = x->parent->right;
4487 if (w->color == MEM_RED)
4489 w->color = MEM_BLACK;
4490 x->parent->color = MEM_RED;
4491 mem_rotate_left (x->parent);
4492 w = x->parent->right;
4495 if (w->left->color == MEM_BLACK && w->right->color == MEM_BLACK)
4497 w->color = MEM_RED;
4498 x = x->parent;
4500 else
4502 if (w->right->color == MEM_BLACK)
4504 w->left->color = MEM_BLACK;
4505 w->color = MEM_RED;
4506 mem_rotate_right (w);
4507 w = x->parent->right;
4509 w->color = x->parent->color;
4510 x->parent->color = MEM_BLACK;
4511 w->right->color = MEM_BLACK;
4512 mem_rotate_left (x->parent);
4513 x = mem_root;
4516 else
4518 struct mem_node *w = x->parent->left;
4520 if (w->color == MEM_RED)
4522 w->color = MEM_BLACK;
4523 x->parent->color = MEM_RED;
4524 mem_rotate_right (x->parent);
4525 w = x->parent->left;
4528 if (w->right->color == MEM_BLACK && w->left->color == MEM_BLACK)
4530 w->color = MEM_RED;
4531 x = x->parent;
4533 else
4535 if (w->left->color == MEM_BLACK)
4537 w->right->color = MEM_BLACK;
4538 w->color = MEM_RED;
4539 mem_rotate_left (w);
4540 w = x->parent->left;
4543 w->color = x->parent->color;
4544 x->parent->color = MEM_BLACK;
4545 w->left->color = MEM_BLACK;
4546 mem_rotate_right (x->parent);
4547 x = mem_root;
4552 x->color = MEM_BLACK;
4556 /* If P is a pointer into a live Lisp string object on the heap,
4557 return the object. Otherwise, return nil. M is a pointer to the
4558 mem_block for P.
4560 This and other *_holding functions look for a pointer anywhere into
4561 the object, not merely for a pointer to the start of the object,
4562 because some compilers sometimes optimize away the latter. See
4563 Bug#28213. */
4565 static Lisp_Object
4566 live_string_holding (struct mem_node *m, void *p)
4568 if (m->type == MEM_TYPE_STRING)
4570 struct string_block *b = m->start;
4571 char *cp = p;
4572 ptrdiff_t offset = cp - (char *) &b->strings[0];
4574 /* P must point into a Lisp_String structure, and it
4575 must not be on the free-list. */
4576 if (0 <= offset && offset < STRING_BLOCK_SIZE * sizeof b->strings[0])
4578 cp = ptr_bounds_copy (cp, b);
4579 struct Lisp_String *s = p = cp -= offset % sizeof b->strings[0];
4580 if (s->u.s.data)
4581 return make_lisp_ptr (s, Lisp_String);
4584 return Qnil;
4587 static bool
4588 live_string_p (struct mem_node *m, void *p)
4590 return !NILP (live_string_holding (m, p));
4593 /* If P is a pointer into a live Lisp cons object on the heap, return
4594 the object. Otherwise, return nil. M is a pointer to the
4595 mem_block for P. */
4597 static Lisp_Object
4598 live_cons_holding (struct mem_node *m, void *p)
4600 if (m->type == MEM_TYPE_CONS)
4602 struct cons_block *b = m->start;
4603 char *cp = p;
4604 ptrdiff_t offset = cp - (char *) &b->conses[0];
4606 /* P must point into a Lisp_Cons, not be
4607 one of the unused cells in the current cons block,
4608 and not be on the free-list. */
4609 if (0 <= offset && offset < CONS_BLOCK_SIZE * sizeof b->conses[0]
4610 && (b != cons_block
4611 || offset / sizeof b->conses[0] < cons_block_index))
4613 cp = ptr_bounds_copy (cp, b);
4614 struct Lisp_Cons *s = p = cp -= offset % sizeof b->conses[0];
4615 if (!EQ (s->u.s.car, Vdead))
4616 return make_lisp_ptr (s, Lisp_Cons);
4619 return Qnil;
4622 static bool
4623 live_cons_p (struct mem_node *m, void *p)
4625 return !NILP (live_cons_holding (m, p));
4629 /* If P is a pointer into a live Lisp symbol object on the heap,
4630 return the object. Otherwise, return nil. M is a pointer to the
4631 mem_block for P. */
4633 static Lisp_Object
4634 live_symbol_holding (struct mem_node *m, void *p)
4636 if (m->type == MEM_TYPE_SYMBOL)
4638 struct symbol_block *b = m->start;
4639 char *cp = p;
4640 ptrdiff_t offset = cp - (char *) &b->symbols[0];
4642 /* P must point into the Lisp_Symbol, not be
4643 one of the unused cells in the current symbol block,
4644 and not be on the free-list. */
4645 if (0 <= offset && offset < SYMBOL_BLOCK_SIZE * sizeof b->symbols[0]
4646 && (b != symbol_block
4647 || offset / sizeof b->symbols[0] < symbol_block_index))
4649 cp = ptr_bounds_copy (cp, b);
4650 struct Lisp_Symbol *s = p = cp -= offset % sizeof b->symbols[0];
4651 if (!EQ (s->u.s.function, Vdead))
4652 return make_lisp_symbol (s);
4655 return Qnil;
4658 static bool
4659 live_symbol_p (struct mem_node *m, void *p)
4661 return !NILP (live_symbol_holding (m, p));
4665 /* Return true if P is a pointer to a live Lisp float on
4666 the heap. M is a pointer to the mem_block for P. */
4668 static bool
4669 live_float_p (struct mem_node *m, void *p)
4671 if (m->type == MEM_TYPE_FLOAT)
4673 struct float_block *b = m->start;
4674 char *cp = p;
4675 ptrdiff_t offset = cp - (char *) &b->floats[0];
4677 /* P must point to the start of a Lisp_Float and not be
4678 one of the unused cells in the current float block. */
4679 return (offset >= 0
4680 && offset % sizeof b->floats[0] == 0
4681 && offset < (FLOAT_BLOCK_SIZE * sizeof b->floats[0])
4682 && (b != float_block
4683 || offset / sizeof b->floats[0] < float_block_index));
4685 else
4686 return 0;
4690 /* If P is a pointer to a live Lisp Misc on the heap, return the object.
4691 Otherwise, return nil. M is a pointer to the mem_block for P. */
4693 static Lisp_Object
4694 live_misc_holding (struct mem_node *m, void *p)
4696 if (m->type == MEM_TYPE_MISC)
4698 struct marker_block *b = m->start;
4699 char *cp = p;
4700 ptrdiff_t offset = cp - (char *) &b->markers[0];
4702 /* P must point into a Lisp_Misc, not be
4703 one of the unused cells in the current misc block,
4704 and not be on the free-list. */
4705 if (0 <= offset && offset < MARKER_BLOCK_SIZE * sizeof b->markers[0]
4706 && (b != marker_block
4707 || offset / sizeof b->markers[0] < marker_block_index))
4709 cp = ptr_bounds_copy (cp, b);
4710 union Lisp_Misc *s = p = cp -= offset % sizeof b->markers[0];
4711 if (s->u_any.type != Lisp_Misc_Free)
4712 return make_lisp_ptr (s, Lisp_Misc);
4715 return Qnil;
4718 static bool
4719 live_misc_p (struct mem_node *m, void *p)
4721 return !NILP (live_misc_holding (m, p));
4724 /* If P is a pointer to a live vector-like object, return the object.
4725 Otherwise, return nil.
4726 M is a pointer to the mem_block for P. */
4728 static Lisp_Object
4729 live_vector_holding (struct mem_node *m, void *p)
4731 struct Lisp_Vector *vp = p;
4733 if (m->type == MEM_TYPE_VECTOR_BLOCK)
4735 /* This memory node corresponds to a vector block. */
4736 struct vector_block *block = m->start;
4737 struct Lisp_Vector *vector = (struct Lisp_Vector *) block->data;
4739 /* P is in the block's allocation range. Scan the block
4740 up to P and see whether P points to the start of some
4741 vector which is not on a free list. FIXME: check whether
4742 some allocation patterns (probably a lot of short vectors)
4743 may cause a substantial overhead of this loop. */
4744 while (VECTOR_IN_BLOCK (vector, block) && vector <= vp)
4746 struct Lisp_Vector *next = ADVANCE (vector, vector_nbytes (vector));
4747 if (vp < next && !PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE))
4748 return make_lisp_ptr (vector, Lisp_Vectorlike);
4749 vector = next;
4752 else if (m->type == MEM_TYPE_VECTORLIKE)
4754 /* This memory node corresponds to a large vector. */
4755 struct Lisp_Vector *vector = large_vector_vec (m->start);
4756 struct Lisp_Vector *next = ADVANCE (vector, vector_nbytes (vector));
4757 if (vector <= vp && vp < next)
4758 return make_lisp_ptr (vector, Lisp_Vectorlike);
4760 return Qnil;
4763 static bool
4764 live_vector_p (struct mem_node *m, void *p)
4766 return !NILP (live_vector_holding (m, p));
4769 /* If P is a pointer into a live buffer, return the buffer.
4770 Otherwise, return nil. M is a pointer to the mem_block for P. */
4772 static Lisp_Object
4773 live_buffer_holding (struct mem_node *m, void *p)
4775 /* P must point into the block, and the buffer
4776 must not have been killed. */
4777 if (m->type == MEM_TYPE_BUFFER)
4779 struct buffer *b = m->start;
4780 char *cb = m->start;
4781 char *cp = p;
4782 ptrdiff_t offset = cp - cb;
4783 if (0 <= offset && offset < sizeof *b && !NILP (b->name_))
4785 Lisp_Object obj;
4786 XSETBUFFER (obj, b);
4787 return obj;
4790 return Qnil;
4793 static bool
4794 live_buffer_p (struct mem_node *m, void *p)
4796 return !NILP (live_buffer_holding (m, p));
4799 /* Mark OBJ if we can prove it's a Lisp_Object. */
4801 static void
4802 mark_maybe_object (Lisp_Object obj)
4804 #if USE_VALGRIND
4805 if (valgrind_p)
4806 VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
4807 #endif
4809 if (INTEGERP (obj))
4810 return;
4812 void *po = XPNTR (obj);
4813 struct mem_node *m = mem_find (po);
4815 if (m != MEM_NIL)
4817 bool mark_p = false;
4819 switch (XTYPE (obj))
4821 case Lisp_String:
4822 mark_p = EQ (obj, live_string_holding (m, po));
4823 break;
4825 case Lisp_Cons:
4826 mark_p = EQ (obj, live_cons_holding (m, po));
4827 break;
4829 case Lisp_Symbol:
4830 mark_p = EQ (obj, live_symbol_holding (m, po));
4831 break;
4833 case Lisp_Float:
4834 mark_p = live_float_p (m, po);
4835 break;
4837 case Lisp_Vectorlike:
4838 mark_p = (EQ (obj, live_vector_holding (m, po))
4839 || EQ (obj, live_buffer_holding (m, po)));
4840 break;
4842 case Lisp_Misc:
4843 mark_p = EQ (obj, live_misc_holding (m, po));
4844 break;
4846 default:
4847 break;
4850 if (mark_p)
4851 mark_object (obj);
4855 /* Return true if P can point to Lisp data, and false otherwise.
4856 Symbols are implemented via offsets not pointers, but the offsets
4857 are also multiples of GCALIGNMENT. */
4859 static bool
4860 maybe_lisp_pointer (void *p)
4862 return (uintptr_t) p % GCALIGNMENT == 0;
4865 #ifndef HAVE_MODULES
4866 enum { HAVE_MODULES = false };
4867 #endif
4869 /* If P points to Lisp data, mark that as live if it isn't already
4870 marked. */
4872 static void
4873 mark_maybe_pointer (void *p)
4875 struct mem_node *m;
4877 #if USE_VALGRIND
4878 if (valgrind_p)
4879 VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
4880 #endif
4882 if (sizeof (Lisp_Object) == sizeof (void *) || !HAVE_MODULES)
4884 if (!maybe_lisp_pointer (p))
4885 return;
4887 else
4889 /* For the wide-int case, also mark emacs_value tagged pointers,
4890 which can be generated by emacs-module.c's value_to_lisp. */
4891 p = (void *) ((uintptr_t) p & ~(GCALIGNMENT - 1));
4894 m = mem_find (p);
4895 if (m != MEM_NIL)
4897 Lisp_Object obj = Qnil;
4899 switch (m->type)
4901 case MEM_TYPE_NON_LISP:
4902 case MEM_TYPE_SPARE:
4903 /* Nothing to do; not a pointer to Lisp memory. */
4904 break;
4906 case MEM_TYPE_BUFFER:
4907 obj = live_buffer_holding (m, p);
4908 break;
4910 case MEM_TYPE_CONS:
4911 obj = live_cons_holding (m, p);
4912 break;
4914 case MEM_TYPE_STRING:
4915 obj = live_string_holding (m, p);
4916 break;
4918 case MEM_TYPE_MISC:
4919 obj = live_misc_holding (m, p);
4920 break;
4922 case MEM_TYPE_SYMBOL:
4923 obj = live_symbol_holding (m, p);
4924 break;
4926 case MEM_TYPE_FLOAT:
4927 if (live_float_p (m, p))
4928 obj = make_lisp_ptr (p, Lisp_Float);
4929 break;
4931 case MEM_TYPE_VECTORLIKE:
4932 case MEM_TYPE_VECTOR_BLOCK:
4933 obj = live_vector_holding (m, p);
4934 break;
4936 default:
4937 emacs_abort ();
4940 if (!NILP (obj))
4941 mark_object (obj);
4946 /* Alignment of pointer values. Use alignof, as it sometimes returns
4947 a smaller alignment than GCC's __alignof__ and mark_memory might
4948 miss objects if __alignof__ were used. */
4949 #define GC_POINTER_ALIGNMENT alignof (void *)
4951 /* Mark Lisp objects referenced from the address range START+OFFSET..END
4952 or END+OFFSET..START. */
4954 static void ATTRIBUTE_NO_SANITIZE_ADDRESS
4955 mark_memory (void *start, void *end)
4957 char *pp;
4959 /* Make START the pointer to the start of the memory region,
4960 if it isn't already. */
4961 if (end < start)
4963 void *tem = start;
4964 start = end;
4965 end = tem;
4968 eassert (((uintptr_t) start) % GC_POINTER_ALIGNMENT == 0);
4970 /* Mark Lisp data pointed to. This is necessary because, in some
4971 situations, the C compiler optimizes Lisp objects away, so that
4972 only a pointer to them remains. Example:
4974 DEFUN ("testme", Ftestme, Stestme, 0, 0, 0, "")
4977 Lisp_Object obj = build_string ("test");
4978 struct Lisp_String *s = XSTRING (obj);
4979 Fgarbage_collect ();
4980 fprintf (stderr, "test '%s'\n", s->u.s.data);
4981 return Qnil;
4984 Here, `obj' isn't really used, and the compiler optimizes it
4985 away. The only reference to the life string is through the
4986 pointer `s'. */
4988 for (pp = start; (void *) pp < end; pp += GC_POINTER_ALIGNMENT)
4990 mark_maybe_pointer (*(void **) pp);
4992 verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0);
4993 if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT
4994 || (uintptr_t) pp % alignof (Lisp_Object) == 0)
4995 mark_maybe_object (*(Lisp_Object *) pp);
4999 #ifndef HAVE___BUILTIN_UNWIND_INIT
5001 # ifdef GC_SETJMP_WORKS
5002 static void
5003 test_setjmp (void)
5006 # else
5008 static bool setjmp_tested_p;
5009 static int longjmps_done;
5011 # define SETJMP_WILL_LIKELY_WORK "\
5013 Emacs garbage collector has been changed to use conservative stack\n\
5014 marking. Emacs has determined that the method it uses to do the\n\
5015 marking will likely work on your system, but this isn't sure.\n\
5017 If you are a system-programmer, or can get the help of a local wizard\n\
5018 who is, please take a look at the function mark_stack in alloc.c, and\n\
5019 verify that the methods used are appropriate for your system.\n\
5021 Please mail the result to <emacs-devel@gnu.org>.\n\
5024 # define SETJMP_WILL_NOT_WORK "\
5026 Emacs garbage collector has been changed to use conservative stack\n\
5027 marking. Emacs has determined that the default method it uses to do the\n\
5028 marking will not work on your system. We will need a system-dependent\n\
5029 solution for your system.\n\
5031 Please take a look at the function mark_stack in alloc.c, and\n\
5032 try to find a way to make it work on your system.\n\
5034 Note that you may get false negatives, depending on the compiler.\n\
5035 In particular, you need to use -O with GCC for this test.\n\
5037 Please mail the result to <emacs-devel@gnu.org>.\n\
5041 /* Perform a quick check if it looks like setjmp saves registers in a
5042 jmp_buf. Print a message to stderr saying so. When this test
5043 succeeds, this is _not_ a proof that setjmp is sufficient for
5044 conservative stack marking. Only the sources or a disassembly
5045 can prove that. */
5047 static void
5048 test_setjmp (void)
5050 if (setjmp_tested_p)
5051 return;
5052 setjmp_tested_p = true;
5053 char buf[10];
5054 register int x;
5055 sys_jmp_buf jbuf;
5057 /* Arrange for X to be put in a register. */
5058 sprintf (buf, "1");
5059 x = strlen (buf);
5060 x = 2 * x - 1;
5062 sys_setjmp (jbuf);
5063 if (longjmps_done == 1)
5065 /* Came here after the longjmp at the end of the function.
5067 If x == 1, the longjmp has restored the register to its
5068 value before the setjmp, and we can hope that setjmp
5069 saves all such registers in the jmp_buf, although that
5070 isn't sure.
5072 For other values of X, either something really strange is
5073 taking place, or the setjmp just didn't save the register. */
5075 if (x == 1)
5076 fprintf (stderr, SETJMP_WILL_LIKELY_WORK);
5077 else
5079 fprintf (stderr, SETJMP_WILL_NOT_WORK);
5080 exit (1);
5084 ++longjmps_done;
5085 x = 2;
5086 if (longjmps_done == 1)
5087 sys_longjmp (jbuf, 1);
5089 # endif /* ! GC_SETJMP_WORKS */
5090 #endif /* ! HAVE___BUILTIN_UNWIND_INIT */
5092 /* The type of an object near the stack top, whose address can be used
5093 as a stack scan limit. */
5094 typedef union
5096 /* Align the stack top properly. Even if !HAVE___BUILTIN_UNWIND_INIT,
5097 jmp_buf may not be aligned enough on darwin-ppc64. */
5098 max_align_t o;
5099 #ifndef HAVE___BUILTIN_UNWIND_INIT
5100 sys_jmp_buf j;
5101 char c;
5102 #endif
5103 } stacktop_sentry;
5105 /* Force callee-saved registers and register windows onto the stack.
5106 Use the platform-defined __builtin_unwind_init if available,
5107 obviating the need for machine dependent methods. */
5108 #ifndef HAVE___BUILTIN_UNWIND_INIT
5109 # ifdef __sparc__
5110 /* This trick flushes the register windows so that all the state of
5111 the process is contained in the stack.
5112 FreeBSD does not have a ta 3 handler, so handle it specially.
5113 FIXME: Code in the Boehm GC suggests flushing (with 'flushrs') is
5114 needed on ia64 too. See mach_dep.c, where it also says inline
5115 assembler doesn't work with relevant proprietary compilers. */
5116 # if defined __sparc64__ && defined __FreeBSD__
5117 # define __builtin_unwind_init() asm ("flushw")
5118 # else
5119 # define __builtin_unwind_init() asm ("ta 3")
5120 # endif
5121 # else
5122 # define __builtin_unwind_init() ((void) 0)
5123 # endif
5124 #endif
5126 /* Yield an address close enough to the top of the stack that the
5127 garbage collector need not scan above it. Callers should be
5128 declared NO_INLINE. */
5129 #ifdef HAVE___BUILTIN_FRAME_ADDRESS
5130 # define NEAR_STACK_TOP(addr) ((void) (addr), __builtin_frame_address (0))
5131 #else
5132 # define NEAR_STACK_TOP(addr) (addr)
5133 #endif
5135 /* Set *P to the address of the top of the stack. This must be a
5136 macro, not a function, so that it is executed in the caller's
5137 environment. It is not inside a do-while so that its storage
5138 survives the macro. Callers should be declared NO_INLINE. */
5139 #ifdef HAVE___BUILTIN_UNWIND_INIT
5140 # define SET_STACK_TOP_ADDRESS(p) \
5141 stacktop_sentry sentry; \
5142 __builtin_unwind_init (); \
5143 *(p) = NEAR_STACK_TOP (&sentry)
5144 #else
5145 # define SET_STACK_TOP_ADDRESS(p) \
5146 stacktop_sentry sentry; \
5147 __builtin_unwind_init (); \
5148 test_setjmp (); \
5149 sys_setjmp (sentry.j); \
5150 *(p) = NEAR_STACK_TOP (&sentry + (stack_bottom < &sentry.c))
5151 #endif
5153 /* Mark live Lisp objects on the C stack.
5155 There are several system-dependent problems to consider when
5156 porting this to new architectures:
5158 Processor Registers
5160 We have to mark Lisp objects in CPU registers that can hold local
5161 variables or are used to pass parameters.
5163 This code assumes that calling setjmp saves registers we need
5164 to see in a jmp_buf which itself lies on the stack. This doesn't
5165 have to be true! It must be verified for each system, possibly
5166 by taking a look at the source code of setjmp.
5168 If __builtin_unwind_init is available (defined by GCC >= 2.8) we
5169 can use it as a machine independent method to store all registers
5170 to the stack. In this case the macros described in the previous
5171 two paragraphs are not used.
5173 Stack Layout
5175 Architectures differ in the way their processor stack is organized.
5176 For example, the stack might look like this
5178 +----------------+
5179 | Lisp_Object | size = 4
5180 +----------------+
5181 | something else | size = 2
5182 +----------------+
5183 | Lisp_Object | size = 4
5184 +----------------+
5185 | ... |
5187 In such a case, not every Lisp_Object will be aligned equally. To
5188 find all Lisp_Object on the stack it won't be sufficient to walk
5189 the stack in steps of 4 bytes. Instead, two passes will be
5190 necessary, one starting at the start of the stack, and a second
5191 pass starting at the start of the stack + 2. Likewise, if the
5192 minimal alignment of Lisp_Objects on the stack is 1, four passes
5193 would be necessary, each one starting with one byte more offset
5194 from the stack start. */
5196 void
5197 mark_stack (char *bottom, char *end)
5199 /* This assumes that the stack is a contiguous region in memory. If
5200 that's not the case, something has to be done here to iterate
5201 over the stack segments. */
5202 mark_memory (bottom, end);
5204 /* Allow for marking a secondary stack, like the register stack on the
5205 ia64. */
5206 #ifdef GC_MARK_SECONDARY_STACK
5207 GC_MARK_SECONDARY_STACK ();
5208 #endif
5211 /* This is a trampoline function that flushes registers to the stack,
5212 and then calls FUNC. ARG is passed through to FUNC verbatim.
5214 This function must be called whenever Emacs is about to release the
5215 global interpreter lock. This lets the garbage collector easily
5216 find roots in registers on threads that are not actively running
5217 Lisp.
5219 It is invalid to run any Lisp code or to allocate any GC memory
5220 from FUNC. */
5222 NO_INLINE void
5223 flush_stack_call_func (void (*func) (void *arg), void *arg)
5225 void *end;
5226 struct thread_state *self = current_thread;
5227 SET_STACK_TOP_ADDRESS (&end);
5228 self->stack_top = end;
5229 func (arg);
5230 eassert (current_thread == self);
5233 static bool
5234 c_symbol_p (struct Lisp_Symbol *sym)
5236 char *lispsym_ptr = (char *) lispsym;
5237 char *sym_ptr = (char *) sym;
5238 ptrdiff_t lispsym_offset = sym_ptr - lispsym_ptr;
5239 return 0 <= lispsym_offset && lispsym_offset < sizeof lispsym;
5242 /* Determine whether it is safe to access memory at address P. */
5243 static int
5244 valid_pointer_p (void *p)
5246 #ifdef WINDOWSNT
5247 return w32_valid_pointer_p (p, 16);
5248 #else
5250 if (ADDRESS_SANITIZER)
5251 return p ? -1 : 0;
5253 int fd[2];
5255 /* Obviously, we cannot just access it (we would SEGV trying), so we
5256 trick the o/s to tell us whether p is a valid pointer.
5257 Unfortunately, we cannot use NULL_DEVICE here, as emacs_write may
5258 not validate p in that case. */
5260 if (emacs_pipe (fd) == 0)
5262 bool valid = emacs_write (fd[1], p, 16) == 16;
5263 emacs_close (fd[1]);
5264 emacs_close (fd[0]);
5265 return valid;
5268 return -1;
5269 #endif
5272 /* Return 2 if OBJ is a killed or special buffer object, 1 if OBJ is a
5273 valid lisp object, 0 if OBJ is NOT a valid lisp object, or -1 if we
5274 cannot validate OBJ. This function can be quite slow, so its primary
5275 use is the manual debugging. The only exception is print_object, where
5276 we use it to check whether the memory referenced by the pointer of
5277 Lisp_Save_Value object contains valid objects. */
5280 valid_lisp_object_p (Lisp_Object obj)
5282 if (INTEGERP (obj))
5283 return 1;
5285 void *p = XPNTR (obj);
5286 if (PURE_P (p))
5287 return 1;
5289 if (SYMBOLP (obj) && c_symbol_p (p))
5290 return ((char *) p - (char *) lispsym) % sizeof lispsym[0] == 0;
5292 if (p == &buffer_defaults || p == &buffer_local_symbols)
5293 return 2;
5295 struct mem_node *m = mem_find (p);
5297 if (m == MEM_NIL)
5299 int valid = valid_pointer_p (p);
5300 if (valid <= 0)
5301 return valid;
5303 if (SUBRP (obj))
5304 return 1;
5306 return 0;
5309 switch (m->type)
5311 case MEM_TYPE_NON_LISP:
5312 case MEM_TYPE_SPARE:
5313 return 0;
5315 case MEM_TYPE_BUFFER:
5316 return live_buffer_p (m, p) ? 1 : 2;
5318 case MEM_TYPE_CONS:
5319 return live_cons_p (m, p);
5321 case MEM_TYPE_STRING:
5322 return live_string_p (m, p);
5324 case MEM_TYPE_MISC:
5325 return live_misc_p (m, p);
5327 case MEM_TYPE_SYMBOL:
5328 return live_symbol_p (m, p);
5330 case MEM_TYPE_FLOAT:
5331 return live_float_p (m, p);
5333 case MEM_TYPE_VECTORLIKE:
5334 case MEM_TYPE_VECTOR_BLOCK:
5335 return live_vector_p (m, p);
5337 default:
5338 break;
5341 return 0;
5344 /***********************************************************************
5345 Pure Storage Management
5346 ***********************************************************************/
5348 /* Allocate room for SIZE bytes from pure Lisp storage and return a
5349 pointer to it. TYPE is the Lisp type for which the memory is
5350 allocated. TYPE < 0 means it's not used for a Lisp object. */
5352 static void *
5353 pure_alloc (size_t size, int type)
5355 void *result;
5357 again:
5358 if (type >= 0)
5360 /* Allocate space for a Lisp object from the beginning of the free
5361 space with taking account of alignment. */
5362 result = pointer_align (purebeg + pure_bytes_used_lisp, GCALIGNMENT);
5363 pure_bytes_used_lisp = ((char *)result - (char *)purebeg) + size;
5365 else
5367 /* Allocate space for a non-Lisp object from the end of the free
5368 space. */
5369 pure_bytes_used_non_lisp += size;
5370 result = purebeg + pure_size - pure_bytes_used_non_lisp;
5372 pure_bytes_used = pure_bytes_used_lisp + pure_bytes_used_non_lisp;
5374 if (pure_bytes_used <= pure_size)
5375 return ptr_bounds_clip (result, size);
5377 /* Don't allocate a large amount here,
5378 because it might get mmap'd and then its address
5379 might not be usable. */
5380 purebeg = xmalloc (10000);
5381 pure_size = 10000;
5382 pure_bytes_used_before_overflow += pure_bytes_used - size;
5383 pure_bytes_used = 0;
5384 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
5385 goto again;
5389 #ifndef CANNOT_DUMP
5391 /* Print a warning if PURESIZE is too small. */
5393 void
5394 check_pure_size (void)
5396 if (pure_bytes_used_before_overflow)
5397 message (("emacs:0:Pure Lisp storage overflow (approx. %"pI"d"
5398 " bytes needed)"),
5399 pure_bytes_used + pure_bytes_used_before_overflow);
5401 #endif
5404 /* Find the byte sequence {DATA[0], ..., DATA[NBYTES-1], '\0'} from
5405 the non-Lisp data pool of the pure storage, and return its start
5406 address. Return NULL if not found. */
5408 static char *
5409 find_string_data_in_pure (const char *data, ptrdiff_t nbytes)
5411 int i;
5412 ptrdiff_t skip, bm_skip[256], last_char_skip, infinity, start, start_max;
5413 const unsigned char *p;
5414 char *non_lisp_beg;
5416 if (pure_bytes_used_non_lisp <= nbytes)
5417 return NULL;
5419 /* Set up the Boyer-Moore table. */
5420 skip = nbytes + 1;
5421 for (i = 0; i < 256; i++)
5422 bm_skip[i] = skip;
5424 p = (const unsigned char *) data;
5425 while (--skip > 0)
5426 bm_skip[*p++] = skip;
5428 last_char_skip = bm_skip['\0'];
5430 non_lisp_beg = purebeg + pure_size - pure_bytes_used_non_lisp;
5431 start_max = pure_bytes_used_non_lisp - (nbytes + 1);
5433 /* See the comments in the function `boyer_moore' (search.c) for the
5434 use of `infinity'. */
5435 infinity = pure_bytes_used_non_lisp + 1;
5436 bm_skip['\0'] = infinity;
5438 p = (const unsigned char *) non_lisp_beg + nbytes;
5439 start = 0;
5442 /* Check the last character (== '\0'). */
5445 start += bm_skip[*(p + start)];
5447 while (start <= start_max);
5449 if (start < infinity)
5450 /* Couldn't find the last character. */
5451 return NULL;
5453 /* No less than `infinity' means we could find the last
5454 character at `p[start - infinity]'. */
5455 start -= infinity;
5457 /* Check the remaining characters. */
5458 if (memcmp (data, non_lisp_beg + start, nbytes) == 0)
5459 /* Found. */
5460 return ptr_bounds_clip (non_lisp_beg + start, nbytes + 1);
5462 start += last_char_skip;
5464 while (start <= start_max);
5466 return NULL;
5470 /* Return a string allocated in pure space. DATA is a buffer holding
5471 NCHARS characters, and NBYTES bytes of string data. MULTIBYTE
5472 means make the result string multibyte.
5474 Must get an error if pure storage is full, since if it cannot hold
5475 a large string it may be able to hold conses that point to that
5476 string; then the string is not protected from gc. */
5478 Lisp_Object
5479 make_pure_string (const char *data,
5480 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
5482 Lisp_Object string;
5483 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5484 s->u.s.data = (unsigned char *) find_string_data_in_pure (data, nbytes);
5485 if (s->u.s.data == NULL)
5487 s->u.s.data = pure_alloc (nbytes + 1, -1);
5488 memcpy (s->u.s.data, data, nbytes);
5489 s->u.s.data[nbytes] = '\0';
5491 s->u.s.size = nchars;
5492 s->u.s.size_byte = multibyte ? nbytes : -1;
5493 s->u.s.intervals = NULL;
5494 XSETSTRING (string, s);
5495 return string;
5498 /* Return a string allocated in pure space. Do not
5499 allocate the string data, just point to DATA. */
5501 Lisp_Object
5502 make_pure_c_string (const char *data, ptrdiff_t nchars)
5504 Lisp_Object string;
5505 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5506 s->u.s.size = nchars;
5507 s->u.s.size_byte = -1;
5508 s->u.s.data = (unsigned char *) data;
5509 s->u.s.intervals = NULL;
5510 XSETSTRING (string, s);
5511 return string;
5514 static Lisp_Object purecopy (Lisp_Object obj);
5516 /* Return a cons allocated from pure space. Give it pure copies
5517 of CAR as car and CDR as cdr. */
5519 Lisp_Object
5520 pure_cons (Lisp_Object car, Lisp_Object cdr)
5522 Lisp_Object new;
5523 struct Lisp_Cons *p = pure_alloc (sizeof *p, Lisp_Cons);
5524 XSETCONS (new, p);
5525 XSETCAR (new, purecopy (car));
5526 XSETCDR (new, purecopy (cdr));
5527 return new;
5531 /* Value is a float object with value NUM allocated from pure space. */
5533 static Lisp_Object
5534 make_pure_float (double num)
5536 Lisp_Object new;
5537 struct Lisp_Float *p = pure_alloc (sizeof *p, Lisp_Float);
5538 XSETFLOAT (new, p);
5539 XFLOAT_INIT (new, num);
5540 return new;
5544 /* Return a vector with room for LEN Lisp_Objects allocated from
5545 pure space. */
5547 static Lisp_Object
5548 make_pure_vector (ptrdiff_t len)
5550 Lisp_Object new;
5551 size_t size = header_size + len * word_size;
5552 struct Lisp_Vector *p = pure_alloc (size, Lisp_Vectorlike);
5553 XSETVECTOR (new, p);
5554 XVECTOR (new)->header.size = len;
5555 return new;
5558 /* Copy all contents and parameters of TABLE to a new table allocated
5559 from pure space, return the purified table. */
5560 static struct Lisp_Hash_Table *
5561 purecopy_hash_table (struct Lisp_Hash_Table *table)
5563 eassert (NILP (table->weak));
5564 eassert (table->pure);
5566 struct Lisp_Hash_Table *pure = pure_alloc (sizeof *pure, Lisp_Vectorlike);
5567 struct hash_table_test pure_test = table->test;
5569 /* Purecopy the hash table test. */
5570 pure_test.name = purecopy (table->test.name);
5571 pure_test.user_hash_function = purecopy (table->test.user_hash_function);
5572 pure_test.user_cmp_function = purecopy (table->test.user_cmp_function);
5574 pure->header = table->header;
5575 pure->weak = purecopy (Qnil);
5576 pure->hash = purecopy (table->hash);
5577 pure->next = purecopy (table->next);
5578 pure->index = purecopy (table->index);
5579 pure->count = table->count;
5580 pure->next_free = table->next_free;
5581 pure->pure = table->pure;
5582 pure->rehash_threshold = table->rehash_threshold;
5583 pure->rehash_size = table->rehash_size;
5584 pure->key_and_value = purecopy (table->key_and_value);
5585 pure->test = pure_test;
5587 return pure;
5590 DEFUN ("purecopy", Fpurecopy, Spurecopy, 1, 1, 0,
5591 doc: /* Make a copy of object OBJ in pure storage.
5592 Recursively copies contents of vectors and cons cells.
5593 Does not copy symbols. Copies strings without text properties. */)
5594 (register Lisp_Object obj)
5596 if (NILP (Vpurify_flag))
5597 return obj;
5598 else if (MARKERP (obj) || OVERLAYP (obj) || SYMBOLP (obj))
5599 /* Can't purify those. */
5600 return obj;
5601 else
5602 return purecopy (obj);
5605 /* Pinned objects are marked before every GC cycle. */
5606 static struct pinned_object
5608 Lisp_Object object;
5609 struct pinned_object *next;
5610 } *pinned_objects;
5612 static Lisp_Object
5613 purecopy (Lisp_Object obj)
5615 if (INTEGERP (obj)
5616 || (! SYMBOLP (obj) && PURE_P (XPNTR (obj)))
5617 || SUBRP (obj))
5618 return obj; /* Already pure. */
5620 if (STRINGP (obj) && XSTRING (obj)->u.s.intervals)
5621 message_with_string ("Dropping text-properties while making string `%s' pure",
5622 obj, true);
5624 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5626 Lisp_Object tmp = Fgethash (obj, Vpurify_flag, Qnil);
5627 if (!NILP (tmp))
5628 return tmp;
5631 if (CONSP (obj))
5632 obj = pure_cons (XCAR (obj), XCDR (obj));
5633 else if (FLOATP (obj))
5634 obj = make_pure_float (XFLOAT_DATA (obj));
5635 else if (STRINGP (obj))
5636 obj = make_pure_string (SSDATA (obj), SCHARS (obj),
5637 SBYTES (obj),
5638 STRING_MULTIBYTE (obj));
5639 else if (HASH_TABLE_P (obj))
5641 struct Lisp_Hash_Table *table = XHASH_TABLE (obj);
5642 /* Do not purify hash tables which haven't been defined with
5643 :purecopy as non-nil or are weak - they aren't guaranteed to
5644 not change. */
5645 if (!NILP (table->weak) || !table->pure)
5647 /* Instead, add the hash table to the list of pinned objects,
5648 so that it will be marked during GC. */
5649 struct pinned_object *o = xmalloc (sizeof *o);
5650 o->object = obj;
5651 o->next = pinned_objects;
5652 pinned_objects = o;
5653 return obj; /* Don't hash cons it. */
5656 struct Lisp_Hash_Table *h = purecopy_hash_table (table);
5657 XSET_HASH_TABLE (obj, h);
5659 else if (COMPILEDP (obj) || VECTORP (obj) || RECORDP (obj))
5661 struct Lisp_Vector *objp = XVECTOR (obj);
5662 ptrdiff_t nbytes = vector_nbytes (objp);
5663 struct Lisp_Vector *vec = pure_alloc (nbytes, Lisp_Vectorlike);
5664 register ptrdiff_t i;
5665 ptrdiff_t size = ASIZE (obj);
5666 if (size & PSEUDOVECTOR_FLAG)
5667 size &= PSEUDOVECTOR_SIZE_MASK;
5668 memcpy (vec, objp, nbytes);
5669 for (i = 0; i < size; i++)
5670 vec->contents[i] = purecopy (vec->contents[i]);
5671 XSETVECTOR (obj, vec);
5673 else if (SYMBOLP (obj))
5675 if (!XSYMBOL (obj)->u.s.pinned && !c_symbol_p (XSYMBOL (obj)))
5676 { /* We can't purify them, but they appear in many pure objects.
5677 Mark them as `pinned' so we know to mark them at every GC cycle. */
5678 XSYMBOL (obj)->u.s.pinned = true;
5679 symbol_block_pinned = symbol_block;
5681 /* Don't hash-cons it. */
5682 return obj;
5684 else
5686 AUTO_STRING (fmt, "Don't know how to purify: %S");
5687 Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj)));
5690 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5691 Fputhash (obj, obj, Vpurify_flag);
5693 return obj;
5698 /***********************************************************************
5699 Protection from GC
5700 ***********************************************************************/
5702 /* Put an entry in staticvec, pointing at the variable with address
5703 VARADDRESS. */
5705 void
5706 staticpro (Lisp_Object *varaddress)
5708 if (staticidx >= NSTATICS)
5709 fatal ("NSTATICS too small; try increasing and recompiling Emacs.");
5710 staticvec[staticidx++] = varaddress;
5714 /***********************************************************************
5715 Protection from GC
5716 ***********************************************************************/
5718 /* Temporarily prevent garbage collection. */
5720 ptrdiff_t
5721 inhibit_garbage_collection (void)
5723 ptrdiff_t count = SPECPDL_INDEX ();
5725 specbind (Qgc_cons_threshold, make_number (MOST_POSITIVE_FIXNUM));
5726 return count;
5729 /* Used to avoid possible overflows when
5730 converting from C to Lisp integers. */
5732 static Lisp_Object
5733 bounded_number (EMACS_INT number)
5735 return make_number (min (MOST_POSITIVE_FIXNUM, number));
5738 /* Calculate total bytes of live objects. */
5740 static size_t
5741 total_bytes_of_live_objects (void)
5743 size_t tot = 0;
5744 tot += total_conses * sizeof (struct Lisp_Cons);
5745 tot += total_symbols * sizeof (struct Lisp_Symbol);
5746 tot += total_markers * sizeof (union Lisp_Misc);
5747 tot += total_string_bytes;
5748 tot += total_vector_slots * word_size;
5749 tot += total_floats * sizeof (struct Lisp_Float);
5750 tot += total_intervals * sizeof (struct interval);
5751 tot += total_strings * sizeof (struct Lisp_String);
5752 return tot;
5755 #ifdef HAVE_WINDOW_SYSTEM
5757 /* Remove unmarked font-spec and font-entity objects from ENTRY, which is
5758 (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...), and return changed entry. */
5760 static Lisp_Object
5761 compact_font_cache_entry (Lisp_Object entry)
5763 Lisp_Object tail, *prev = &entry;
5765 for (tail = entry; CONSP (tail); tail = XCDR (tail))
5767 bool drop = 0;
5768 Lisp_Object obj = XCAR (tail);
5770 /* Consider OBJ if it is (font-spec . [font-entity font-entity ...]). */
5771 if (CONSP (obj) && GC_FONT_SPEC_P (XCAR (obj))
5772 && !VECTOR_MARKED_P (GC_XFONT_SPEC (XCAR (obj)))
5773 /* Don't use VECTORP here, as that calls ASIZE, which could
5774 hit assertion violation during GC. */
5775 && (VECTORLIKEP (XCDR (obj))
5776 && ! (gc_asize (XCDR (obj)) & PSEUDOVECTOR_FLAG)))
5778 ptrdiff_t i, size = gc_asize (XCDR (obj));
5779 Lisp_Object obj_cdr = XCDR (obj);
5781 /* If font-spec is not marked, most likely all font-entities
5782 are not marked too. But we must be sure that nothing is
5783 marked within OBJ before we really drop it. */
5784 for (i = 0; i < size; i++)
5786 Lisp_Object objlist;
5788 if (VECTOR_MARKED_P (GC_XFONT_ENTITY (AREF (obj_cdr, i))))
5789 break;
5791 objlist = AREF (AREF (obj_cdr, i), FONT_OBJLIST_INDEX);
5792 for (; CONSP (objlist); objlist = XCDR (objlist))
5794 Lisp_Object val = XCAR (objlist);
5795 struct font *font = GC_XFONT_OBJECT (val);
5797 if (!NILP (AREF (val, FONT_TYPE_INDEX))
5798 && VECTOR_MARKED_P(font))
5799 break;
5801 if (CONSP (objlist))
5803 /* Found a marked font, bail out. */
5804 break;
5808 if (i == size)
5810 /* No marked fonts were found, so this entire font
5811 entity can be dropped. */
5812 drop = 1;
5815 if (drop)
5816 *prev = XCDR (tail);
5817 else
5818 prev = xcdr_addr (tail);
5820 return entry;
5823 /* Compact font caches on all terminals and mark
5824 everything which is still here after compaction. */
5826 static void
5827 compact_font_caches (void)
5829 struct terminal *t;
5831 for (t = terminal_list; t; t = t->next_terminal)
5833 Lisp_Object cache = TERMINAL_FONT_CACHE (t);
5834 /* Inhibit compacting the caches if the user so wishes. Some of
5835 the users don't mind a larger memory footprint, but do mind
5836 slower redisplay. */
5837 if (!inhibit_compacting_font_caches
5838 && CONSP (cache))
5840 Lisp_Object entry;
5842 for (entry = XCDR (cache); CONSP (entry); entry = XCDR (entry))
5843 XSETCAR (entry, compact_font_cache_entry (XCAR (entry)));
5845 mark_object (cache);
5849 #else /* not HAVE_WINDOW_SYSTEM */
5851 #define compact_font_caches() (void)(0)
5853 #endif /* HAVE_WINDOW_SYSTEM */
5855 /* Remove (MARKER . DATA) entries with unmarked MARKER
5856 from buffer undo LIST and return changed list. */
5858 static Lisp_Object
5859 compact_undo_list (Lisp_Object list)
5861 Lisp_Object tail, *prev = &list;
5863 for (tail = list; CONSP (tail); tail = XCDR (tail))
5865 if (CONSP (XCAR (tail))
5866 && MARKERP (XCAR (XCAR (tail)))
5867 && !XMARKER (XCAR (XCAR (tail)))->gcmarkbit)
5868 *prev = XCDR (tail);
5869 else
5870 prev = xcdr_addr (tail);
5872 return list;
5875 static void
5876 mark_pinned_objects (void)
5878 for (struct pinned_object *pobj = pinned_objects; pobj; pobj = pobj->next)
5879 mark_object (pobj->object);
5882 static void
5883 mark_pinned_symbols (void)
5885 struct symbol_block *sblk;
5886 int lim = (symbol_block_pinned == symbol_block
5887 ? symbol_block_index : SYMBOL_BLOCK_SIZE);
5889 for (sblk = symbol_block_pinned; sblk; sblk = sblk->next)
5891 struct Lisp_Symbol *sym = sblk->symbols, *end = sym + lim;
5892 for (; sym < end; ++sym)
5893 if (sym->u.s.pinned)
5894 mark_object (make_lisp_symbol (sym));
5896 lim = SYMBOL_BLOCK_SIZE;
5900 /* Subroutine of Fgarbage_collect that does most of the work. It is a
5901 separate function so that we could limit mark_stack in searching
5902 the stack frames below this function, thus avoiding the rare cases
5903 where mark_stack finds values that look like live Lisp objects on
5904 portions of stack that couldn't possibly contain such live objects.
5905 For more details of this, see the discussion at
5906 https://lists.gnu.org/r/emacs-devel/2014-05/msg00270.html. */
5907 static Lisp_Object
5908 garbage_collect_1 (void *end)
5910 struct buffer *nextb;
5911 char stack_top_variable;
5912 ptrdiff_t i;
5913 bool message_p;
5914 ptrdiff_t count = SPECPDL_INDEX ();
5915 struct timespec start;
5916 Lisp_Object retval = Qnil;
5917 size_t tot_before = 0;
5919 /* Can't GC if pure storage overflowed because we can't determine
5920 if something is a pure object or not. */
5921 if (pure_bytes_used_before_overflow)
5922 return Qnil;
5924 /* Record this function, so it appears on the profiler's backtraces. */
5925 record_in_backtrace (QAutomatic_GC, 0, 0);
5927 check_cons_list ();
5929 /* Don't keep undo information around forever.
5930 Do this early on, so it is no problem if the user quits. */
5931 FOR_EACH_BUFFER (nextb)
5932 compact_buffer (nextb);
5934 if (profiler_memory_running)
5935 tot_before = total_bytes_of_live_objects ();
5937 start = current_timespec ();
5939 /* In case user calls debug_print during GC,
5940 don't let that cause a recursive GC. */
5941 consing_since_gc = 0;
5943 /* Save what's currently displayed in the echo area. Don't do that
5944 if we are GC'ing because we've run out of memory, since
5945 push_message will cons, and we might have no memory for that. */
5946 if (NILP (Vmemory_full))
5948 message_p = push_message ();
5949 record_unwind_protect_void (pop_message_unwind);
5951 else
5952 message_p = false;
5954 /* Save a copy of the contents of the stack, for debugging. */
5955 #if MAX_SAVE_STACK > 0
5956 if (NILP (Vpurify_flag))
5958 char *stack;
5959 ptrdiff_t stack_size;
5960 if (&stack_top_variable < stack_bottom)
5962 stack = &stack_top_variable;
5963 stack_size = stack_bottom - &stack_top_variable;
5965 else
5967 stack = stack_bottom;
5968 stack_size = &stack_top_variable - stack_bottom;
5970 if (stack_size <= MAX_SAVE_STACK)
5972 if (stack_copy_size < stack_size)
5974 stack_copy = xrealloc (stack_copy, stack_size);
5975 stack_copy_size = stack_size;
5977 stack = ptr_bounds_set (stack, stack_size);
5978 no_sanitize_memcpy (stack_copy, stack, stack_size);
5981 #endif /* MAX_SAVE_STACK > 0 */
5983 if (garbage_collection_messages)
5984 message1_nolog ("Garbage collecting...");
5986 block_input ();
5988 shrink_regexp_cache ();
5990 gc_in_progress = 1;
5992 /* Mark all the special slots that serve as the roots of accessibility. */
5994 mark_buffer (&buffer_defaults);
5995 mark_buffer (&buffer_local_symbols);
5997 for (i = 0; i < ARRAYELTS (lispsym); i++)
5998 mark_object (builtin_lisp_symbol (i));
6000 for (i = 0; i < staticidx; i++)
6001 mark_object (*staticvec[i]);
6003 mark_pinned_objects ();
6004 mark_pinned_symbols ();
6005 mark_terminals ();
6006 mark_kboards ();
6007 mark_threads ();
6009 #ifdef USE_GTK
6010 xg_mark_data ();
6011 #endif
6013 #ifdef HAVE_WINDOW_SYSTEM
6014 mark_fringe_data ();
6015 #endif
6017 #ifdef HAVE_MODULES
6018 mark_modules ();
6019 #endif
6021 /* Everything is now marked, except for the data in font caches,
6022 undo lists, and finalizers. The first two are compacted by
6023 removing an items which aren't reachable otherwise. */
6025 compact_font_caches ();
6027 FOR_EACH_BUFFER (nextb)
6029 if (!EQ (BVAR (nextb, undo_list), Qt))
6030 bset_undo_list (nextb, compact_undo_list (BVAR (nextb, undo_list)));
6031 /* Now that we have stripped the elements that need not be
6032 in the undo_list any more, we can finally mark the list. */
6033 mark_object (BVAR (nextb, undo_list));
6036 /* Now pre-sweep finalizers. Here, we add any unmarked finalizers
6037 to doomed_finalizers so we can run their associated functions
6038 after GC. It's important to scan finalizers at this stage so
6039 that we can be sure that unmarked finalizers are really
6040 unreachable except for references from their associated functions
6041 and from other finalizers. */
6043 queue_doomed_finalizers (&doomed_finalizers, &finalizers);
6044 mark_finalizer_list (&doomed_finalizers);
6046 gc_sweep ();
6048 /* Clear the mark bits that we set in certain root slots. */
6049 VECTOR_UNMARK (&buffer_defaults);
6050 VECTOR_UNMARK (&buffer_local_symbols);
6052 check_cons_list ();
6054 gc_in_progress = 0;
6056 unblock_input ();
6058 consing_since_gc = 0;
6059 if (gc_cons_threshold < GC_DEFAULT_THRESHOLD / 10)
6060 gc_cons_threshold = GC_DEFAULT_THRESHOLD / 10;
6062 gc_relative_threshold = 0;
6063 if (FLOATP (Vgc_cons_percentage))
6064 { /* Set gc_cons_combined_threshold. */
6065 double tot = total_bytes_of_live_objects ();
6067 tot *= XFLOAT_DATA (Vgc_cons_percentage);
6068 if (0 < tot)
6070 if (tot < TYPE_MAXIMUM (EMACS_INT))
6071 gc_relative_threshold = tot;
6072 else
6073 gc_relative_threshold = TYPE_MAXIMUM (EMACS_INT);
6077 if (garbage_collection_messages && NILP (Vmemory_full))
6079 if (message_p || minibuf_level > 0)
6080 restore_message ();
6081 else
6082 message1_nolog ("Garbage collecting...done");
6085 unbind_to (count, Qnil);
6087 Lisp_Object total[] = {
6088 list4 (Qconses, make_number (sizeof (struct Lisp_Cons)),
6089 bounded_number (total_conses),
6090 bounded_number (total_free_conses)),
6091 list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)),
6092 bounded_number (total_symbols),
6093 bounded_number (total_free_symbols)),
6094 list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)),
6095 bounded_number (total_markers),
6096 bounded_number (total_free_markers)),
6097 list4 (Qstrings, make_number (sizeof (struct Lisp_String)),
6098 bounded_number (total_strings),
6099 bounded_number (total_free_strings)),
6100 list3 (Qstring_bytes, make_number (1),
6101 bounded_number (total_string_bytes)),
6102 list3 (Qvectors,
6103 make_number (header_size + sizeof (Lisp_Object)),
6104 bounded_number (total_vectors)),
6105 list4 (Qvector_slots, make_number (word_size),
6106 bounded_number (total_vector_slots),
6107 bounded_number (total_free_vector_slots)),
6108 list4 (Qfloats, make_number (sizeof (struct Lisp_Float)),
6109 bounded_number (total_floats),
6110 bounded_number (total_free_floats)),
6111 list4 (Qintervals, make_number (sizeof (struct interval)),
6112 bounded_number (total_intervals),
6113 bounded_number (total_free_intervals)),
6114 list3 (Qbuffers, make_number (sizeof (struct buffer)),
6115 bounded_number (total_buffers)),
6117 #ifdef DOUG_LEA_MALLOC
6118 list4 (Qheap, make_number (1024),
6119 bounded_number ((mallinfo ().uordblks + 1023) >> 10),
6120 bounded_number ((mallinfo ().fordblks + 1023) >> 10)),
6121 #endif
6123 retval = CALLMANY (Flist, total);
6125 /* GC is complete: now we can run our finalizer callbacks. */
6126 run_finalizers (&doomed_finalizers);
6128 if (!NILP (Vpost_gc_hook))
6130 ptrdiff_t gc_count = inhibit_garbage_collection ();
6131 safe_run_hooks (Qpost_gc_hook);
6132 unbind_to (gc_count, Qnil);
6135 /* Accumulate statistics. */
6136 if (FLOATP (Vgc_elapsed))
6138 struct timespec since_start = timespec_sub (current_timespec (), start);
6139 Vgc_elapsed = make_float (XFLOAT_DATA (Vgc_elapsed)
6140 + timespectod (since_start));
6143 gcs_done++;
6145 /* Collect profiling data. */
6146 if (profiler_memory_running)
6148 size_t swept = 0;
6149 size_t tot_after = total_bytes_of_live_objects ();
6150 if (tot_before > tot_after)
6151 swept = tot_before - tot_after;
6152 malloc_probe (swept);
6155 return retval;
6158 DEFUN ("garbage-collect", Fgarbage_collect, Sgarbage_collect, 0, 0, "",
6159 doc: /* Reclaim storage for Lisp objects no longer needed.
6160 Garbage collection happens automatically if you cons more than
6161 `gc-cons-threshold' bytes of Lisp data since previous garbage collection.
6162 `garbage-collect' normally returns a list with info on amount of space in use,
6163 where each entry has the form (NAME SIZE USED FREE), where:
6164 - NAME is a symbol describing the kind of objects this entry represents,
6165 - SIZE is the number of bytes used by each one,
6166 - USED is the number of those objects that were found live in the heap,
6167 - FREE is the number of those objects that are not live but that Emacs
6168 keeps around for future allocations (maybe because it does not know how
6169 to return them to the OS).
6170 However, if there was overflow in pure space, `garbage-collect'
6171 returns nil, because real GC can't be done.
6172 See Info node `(elisp)Garbage Collection'. */
6173 attributes: noinline)
6174 (void)
6176 void *end;
6177 SET_STACK_TOP_ADDRESS (&end);
6178 return garbage_collect_1 (end);
6181 /* Mark Lisp objects in glyph matrix MATRIX. Currently the
6182 only interesting objects referenced from glyphs are strings. */
6184 static void
6185 mark_glyph_matrix (struct glyph_matrix *matrix)
6187 struct glyph_row *row = matrix->rows;
6188 struct glyph_row *end = row + matrix->nrows;
6190 for (; row < end; ++row)
6191 if (row->enabled_p)
6193 int area;
6194 for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
6196 struct glyph *glyph = row->glyphs[area];
6197 struct glyph *end_glyph = glyph + row->used[area];
6199 for (; glyph < end_glyph; ++glyph)
6200 if (STRINGP (glyph->object)
6201 && !STRING_MARKED_P (XSTRING (glyph->object)))
6202 mark_object (glyph->object);
6207 enum { LAST_MARKED_SIZE = 1 << 9 }; /* Must be a power of 2. */
6208 Lisp_Object last_marked[LAST_MARKED_SIZE] EXTERNALLY_VISIBLE;
6209 static int last_marked_index;
6211 /* For debugging--call abort when we cdr down this many
6212 links of a list, in mark_object. In debugging,
6213 the call to abort will hit a breakpoint.
6214 Normally this is zero and the check never goes off. */
6215 ptrdiff_t mark_object_loop_halt EXTERNALLY_VISIBLE;
6217 static void
6218 mark_vectorlike (struct Lisp_Vector *ptr)
6220 ptrdiff_t size = ptr->header.size;
6221 ptrdiff_t i;
6223 eassert (!VECTOR_MARKED_P (ptr));
6224 VECTOR_MARK (ptr); /* Else mark it. */
6225 if (size & PSEUDOVECTOR_FLAG)
6226 size &= PSEUDOVECTOR_SIZE_MASK;
6228 /* Note that this size is not the memory-footprint size, but only
6229 the number of Lisp_Object fields that we should trace.
6230 The distinction is used e.g. by Lisp_Process which places extra
6231 non-Lisp_Object fields at the end of the structure... */
6232 for (i = 0; i < size; i++) /* ...and then mark its elements. */
6233 mark_object (ptr->contents[i]);
6236 /* Like mark_vectorlike but optimized for char-tables (and
6237 sub-char-tables) assuming that the contents are mostly integers or
6238 symbols. */
6240 static void
6241 mark_char_table (struct Lisp_Vector *ptr, enum pvec_type pvectype)
6243 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6244 /* Consult the Lisp_Sub_Char_Table layout before changing this. */
6245 int i, idx = (pvectype == PVEC_SUB_CHAR_TABLE ? SUB_CHAR_TABLE_OFFSET : 0);
6247 eassert (!VECTOR_MARKED_P (ptr));
6248 VECTOR_MARK (ptr);
6249 for (i = idx; i < size; i++)
6251 Lisp_Object val = ptr->contents[i];
6253 if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->u.s.gcmarkbit))
6254 continue;
6255 if (SUB_CHAR_TABLE_P (val))
6257 if (! VECTOR_MARKED_P (XVECTOR (val)))
6258 mark_char_table (XVECTOR (val), PVEC_SUB_CHAR_TABLE);
6260 else
6261 mark_object (val);
6265 NO_INLINE /* To reduce stack depth in mark_object. */
6266 static Lisp_Object
6267 mark_compiled (struct Lisp_Vector *ptr)
6269 int i, size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6271 VECTOR_MARK (ptr);
6272 for (i = 0; i < size; i++)
6273 if (i != COMPILED_CONSTANTS)
6274 mark_object (ptr->contents[i]);
6275 return size > COMPILED_CONSTANTS ? ptr->contents[COMPILED_CONSTANTS] : Qnil;
6278 /* Mark the chain of overlays starting at PTR. */
6280 static void
6281 mark_overlay (struct Lisp_Overlay *ptr)
6283 for (; ptr && !ptr->gcmarkbit; ptr = ptr->next)
6285 ptr->gcmarkbit = 1;
6286 /* These two are always markers and can be marked fast. */
6287 XMARKER (ptr->start)->gcmarkbit = 1;
6288 XMARKER (ptr->end)->gcmarkbit = 1;
6289 mark_object (ptr->plist);
6293 /* Mark Lisp_Objects and special pointers in BUFFER. */
6295 static void
6296 mark_buffer (struct buffer *buffer)
6298 /* This is handled much like other pseudovectors... */
6299 mark_vectorlike ((struct Lisp_Vector *) buffer);
6301 /* ...but there are some buffer-specific things. */
6303 MARK_INTERVAL_TREE (buffer_intervals (buffer));
6305 /* For now, we just don't mark the undo_list. It's done later in
6306 a special way just before the sweep phase, and after stripping
6307 some of its elements that are not needed any more. */
6309 mark_overlay (buffer->overlays_before);
6310 mark_overlay (buffer->overlays_after);
6312 /* If this is an indirect buffer, mark its base buffer. */
6313 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
6314 mark_buffer (buffer->base_buffer);
6317 /* Mark Lisp faces in the face cache C. */
6319 NO_INLINE /* To reduce stack depth in mark_object. */
6320 static void
6321 mark_face_cache (struct face_cache *c)
6323 if (c)
6325 int i, j;
6326 for (i = 0; i < c->used; ++i)
6328 struct face *face = FACE_FROM_ID_OR_NULL (c->f, i);
6330 if (face)
6332 if (face->font && !VECTOR_MARKED_P (face->font))
6333 mark_vectorlike ((struct Lisp_Vector *) face->font);
6335 for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
6336 mark_object (face->lface[j]);
6342 NO_INLINE /* To reduce stack depth in mark_object. */
6343 static void
6344 mark_localized_symbol (struct Lisp_Symbol *ptr)
6346 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
6347 Lisp_Object where = blv->where;
6348 /* If the value is set up for a killed buffer restore its global binding. */
6349 if ((BUFFERP (where) && !BUFFER_LIVE_P (XBUFFER (where))))
6350 swap_in_global_binding (ptr);
6351 mark_object (blv->where);
6352 mark_object (blv->valcell);
6353 mark_object (blv->defcell);
6356 NO_INLINE /* To reduce stack depth in mark_object. */
6357 static void
6358 mark_save_value (struct Lisp_Save_Value *ptr)
6360 /* If `save_type' is zero, `data[0].pointer' is the address
6361 of a memory area containing `data[1].integer' potential
6362 Lisp_Objects. */
6363 if (ptr->save_type == SAVE_TYPE_MEMORY)
6365 Lisp_Object *p = ptr->data[0].pointer;
6366 ptrdiff_t nelt;
6367 for (nelt = ptr->data[1].integer; nelt > 0; nelt--, p++)
6368 mark_maybe_object (*p);
6370 else
6372 /* Find Lisp_Objects in `data[N]' slots and mark them. */
6373 int i;
6374 for (i = 0; i < SAVE_VALUE_SLOTS; i++)
6375 if (save_type (ptr, i) == SAVE_OBJECT)
6376 mark_object (ptr->data[i].object);
6380 /* Remove killed buffers or items whose car is a killed buffer from
6381 LIST, and mark other items. Return changed LIST, which is marked. */
6383 static Lisp_Object
6384 mark_discard_killed_buffers (Lisp_Object list)
6386 Lisp_Object tail, *prev = &list;
6388 for (tail = list; CONSP (tail) && !CONS_MARKED_P (XCONS (tail));
6389 tail = XCDR (tail))
6391 Lisp_Object tem = XCAR (tail);
6392 if (CONSP (tem))
6393 tem = XCAR (tem);
6394 if (BUFFERP (tem) && !BUFFER_LIVE_P (XBUFFER (tem)))
6395 *prev = XCDR (tail);
6396 else
6398 CONS_MARK (XCONS (tail));
6399 mark_object (XCAR (tail));
6400 prev = xcdr_addr (tail);
6403 mark_object (tail);
6404 return list;
6407 /* Determine type of generic Lisp_Object and mark it accordingly.
6409 This function implements a straightforward depth-first marking
6410 algorithm and so the recursion depth may be very high (a few
6411 tens of thousands is not uncommon). To minimize stack usage,
6412 a few cold paths are moved out to NO_INLINE functions above.
6413 In general, inlining them doesn't help you to gain more speed. */
6415 void
6416 mark_object (Lisp_Object arg)
6418 register Lisp_Object obj;
6419 void *po;
6420 #if GC_CHECK_MARKED_OBJECTS
6421 struct mem_node *m;
6422 #endif
6423 ptrdiff_t cdr_count = 0;
6425 obj = arg;
6426 loop:
6428 po = XPNTR (obj);
6429 if (PURE_P (po))
6430 return;
6432 last_marked[last_marked_index++] = obj;
6433 last_marked_index &= LAST_MARKED_SIZE - 1;
6435 /* Perform some sanity checks on the objects marked here. Abort if
6436 we encounter an object we know is bogus. This increases GC time
6437 by ~80%. */
6438 #if GC_CHECK_MARKED_OBJECTS
6440 /* Check that the object pointed to by PO is known to be a Lisp
6441 structure allocated from the heap. */
6442 #define CHECK_ALLOCATED() \
6443 do { \
6444 m = mem_find (po); \
6445 if (m == MEM_NIL) \
6446 emacs_abort (); \
6447 } while (0)
6449 /* Check that the object pointed to by PO is live, using predicate
6450 function LIVEP. */
6451 #define CHECK_LIVE(LIVEP) \
6452 do { \
6453 if (!LIVEP (m, po)) \
6454 emacs_abort (); \
6455 } while (0)
6457 /* Check both of the above conditions, for non-symbols. */
6458 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) \
6459 do { \
6460 CHECK_ALLOCATED (); \
6461 CHECK_LIVE (LIVEP); \
6462 } while (0) \
6464 /* Check both of the above conditions, for symbols. */
6465 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() \
6466 do { \
6467 if (!c_symbol_p (ptr)) \
6469 CHECK_ALLOCATED (); \
6470 CHECK_LIVE (live_symbol_p); \
6472 } while (0) \
6474 #else /* not GC_CHECK_MARKED_OBJECTS */
6476 #define CHECK_LIVE(LIVEP) ((void) 0)
6477 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) ((void) 0)
6478 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() ((void) 0)
6480 #endif /* not GC_CHECK_MARKED_OBJECTS */
6482 switch (XTYPE (obj))
6484 case Lisp_String:
6486 register struct Lisp_String *ptr = XSTRING (obj);
6487 if (STRING_MARKED_P (ptr))
6488 break;
6489 CHECK_ALLOCATED_AND_LIVE (live_string_p);
6490 MARK_STRING (ptr);
6491 MARK_INTERVAL_TREE (ptr->u.s.intervals);
6492 #ifdef GC_CHECK_STRING_BYTES
6493 /* Check that the string size recorded in the string is the
6494 same as the one recorded in the sdata structure. */
6495 string_bytes (ptr);
6496 #endif /* GC_CHECK_STRING_BYTES */
6498 break;
6500 case Lisp_Vectorlike:
6502 register struct Lisp_Vector *ptr = XVECTOR (obj);
6504 if (VECTOR_MARKED_P (ptr))
6505 break;
6507 #if GC_CHECK_MARKED_OBJECTS
6508 m = mem_find (po);
6509 if (m == MEM_NIL && !SUBRP (obj) && !main_thread_p (po))
6510 emacs_abort ();
6511 #endif /* GC_CHECK_MARKED_OBJECTS */
6513 enum pvec_type pvectype
6514 = PSEUDOVECTOR_TYPE (ptr);
6516 if (pvectype != PVEC_SUBR
6517 && pvectype != PVEC_BUFFER
6518 && !main_thread_p (po))
6519 CHECK_LIVE (live_vector_p);
6521 switch (pvectype)
6523 case PVEC_BUFFER:
6524 #if GC_CHECK_MARKED_OBJECTS
6526 struct buffer *b;
6527 FOR_EACH_BUFFER (b)
6528 if (b == po)
6529 break;
6530 if (b == NULL)
6531 emacs_abort ();
6533 #endif /* GC_CHECK_MARKED_OBJECTS */
6534 mark_buffer ((struct buffer *) ptr);
6535 break;
6537 case PVEC_COMPILED:
6538 /* Although we could treat this just like a vector, mark_compiled
6539 returns the COMPILED_CONSTANTS element, which is marked at the
6540 next iteration of goto-loop here. This is done to avoid a few
6541 recursive calls to mark_object. */
6542 obj = mark_compiled (ptr);
6543 if (!NILP (obj))
6544 goto loop;
6545 break;
6547 case PVEC_FRAME:
6549 struct frame *f = (struct frame *) ptr;
6551 mark_vectorlike (ptr);
6552 mark_face_cache (f->face_cache);
6553 #ifdef HAVE_WINDOW_SYSTEM
6554 if (FRAME_WINDOW_P (f) && FRAME_X_OUTPUT (f))
6556 struct font *font = FRAME_FONT (f);
6558 if (font && !VECTOR_MARKED_P (font))
6559 mark_vectorlike ((struct Lisp_Vector *) font);
6561 #endif
6563 break;
6565 case PVEC_WINDOW:
6567 struct window *w = (struct window *) ptr;
6569 mark_vectorlike (ptr);
6571 /* Mark glyph matrices, if any. Marking window
6572 matrices is sufficient because frame matrices
6573 use the same glyph memory. */
6574 if (w->current_matrix)
6576 mark_glyph_matrix (w->current_matrix);
6577 mark_glyph_matrix (w->desired_matrix);
6580 /* Filter out killed buffers from both buffer lists
6581 in attempt to help GC to reclaim killed buffers faster.
6582 We can do it elsewhere for live windows, but this is the
6583 best place to do it for dead windows. */
6584 wset_prev_buffers
6585 (w, mark_discard_killed_buffers (w->prev_buffers));
6586 wset_next_buffers
6587 (w, mark_discard_killed_buffers (w->next_buffers));
6589 break;
6591 case PVEC_HASH_TABLE:
6593 struct Lisp_Hash_Table *h = (struct Lisp_Hash_Table *) ptr;
6595 mark_vectorlike (ptr);
6596 mark_object (h->test.name);
6597 mark_object (h->test.user_hash_function);
6598 mark_object (h->test.user_cmp_function);
6599 /* If hash table is not weak, mark all keys and values.
6600 For weak tables, mark only the vector. */
6601 if (NILP (h->weak))
6602 mark_object (h->key_and_value);
6603 else
6604 VECTOR_MARK (XVECTOR (h->key_and_value));
6606 break;
6608 case PVEC_CHAR_TABLE:
6609 case PVEC_SUB_CHAR_TABLE:
6610 mark_char_table (ptr, (enum pvec_type) pvectype);
6611 break;
6613 case PVEC_BOOL_VECTOR:
6614 /* No Lisp_Objects to mark in a bool vector. */
6615 VECTOR_MARK (ptr);
6616 break;
6618 case PVEC_SUBR:
6619 break;
6621 case PVEC_FREE:
6622 emacs_abort ();
6624 default:
6625 mark_vectorlike (ptr);
6628 break;
6630 case Lisp_Symbol:
6632 struct Lisp_Symbol *ptr = XSYMBOL (obj);
6633 nextsym:
6634 if (ptr->u.s.gcmarkbit)
6635 break;
6636 CHECK_ALLOCATED_AND_LIVE_SYMBOL ();
6637 ptr->u.s.gcmarkbit = 1;
6638 /* Attempt to catch bogus objects. */
6639 eassert (valid_lisp_object_p (ptr->u.s.function));
6640 mark_object (ptr->u.s.function);
6641 mark_object (ptr->u.s.plist);
6642 switch (ptr->u.s.redirect)
6644 case SYMBOL_PLAINVAL: mark_object (SYMBOL_VAL (ptr)); break;
6645 case SYMBOL_VARALIAS:
6647 Lisp_Object tem;
6648 XSETSYMBOL (tem, SYMBOL_ALIAS (ptr));
6649 mark_object (tem);
6650 break;
6652 case SYMBOL_LOCALIZED:
6653 mark_localized_symbol (ptr);
6654 break;
6655 case SYMBOL_FORWARDED:
6656 /* If the value is forwarded to a buffer or keyboard field,
6657 these are marked when we see the corresponding object.
6658 And if it's forwarded to a C variable, either it's not
6659 a Lisp_Object var, or it's staticpro'd already. */
6660 break;
6661 default: emacs_abort ();
6663 if (!PURE_P (XSTRING (ptr->u.s.name)))
6664 MARK_STRING (XSTRING (ptr->u.s.name));
6665 MARK_INTERVAL_TREE (string_intervals (ptr->u.s.name));
6666 /* Inner loop to mark next symbol in this bucket, if any. */
6667 po = ptr = ptr->u.s.next;
6668 if (ptr)
6669 goto nextsym;
6671 break;
6673 case Lisp_Misc:
6674 CHECK_ALLOCATED_AND_LIVE (live_misc_p);
6676 if (XMISCANY (obj)->gcmarkbit)
6677 break;
6679 switch (XMISCTYPE (obj))
6681 case Lisp_Misc_Marker:
6682 /* DO NOT mark thru the marker's chain.
6683 The buffer's markers chain does not preserve markers from gc;
6684 instead, markers are removed from the chain when freed by gc. */
6685 XMISCANY (obj)->gcmarkbit = 1;
6686 break;
6688 case Lisp_Misc_Save_Value:
6689 XMISCANY (obj)->gcmarkbit = 1;
6690 mark_save_value (XSAVE_VALUE (obj));
6691 break;
6693 case Lisp_Misc_Overlay:
6694 mark_overlay (XOVERLAY (obj));
6695 break;
6697 case Lisp_Misc_Finalizer:
6698 XMISCANY (obj)->gcmarkbit = true;
6699 mark_object (XFINALIZER (obj)->function);
6700 break;
6702 #ifdef HAVE_MODULES
6703 case Lisp_Misc_User_Ptr:
6704 XMISCANY (obj)->gcmarkbit = true;
6705 break;
6706 #endif
6708 default:
6709 emacs_abort ();
6711 break;
6713 case Lisp_Cons:
6715 register struct Lisp_Cons *ptr = XCONS (obj);
6716 if (CONS_MARKED_P (ptr))
6717 break;
6718 CHECK_ALLOCATED_AND_LIVE (live_cons_p);
6719 CONS_MARK (ptr);
6720 /* If the cdr is nil, avoid recursion for the car. */
6721 if (EQ (ptr->u.s.u.cdr, Qnil))
6723 obj = ptr->u.s.car;
6724 cdr_count = 0;
6725 goto loop;
6727 mark_object (ptr->u.s.car);
6728 obj = ptr->u.s.u.cdr;
6729 cdr_count++;
6730 if (cdr_count == mark_object_loop_halt)
6731 emacs_abort ();
6732 goto loop;
6735 case Lisp_Float:
6736 CHECK_ALLOCATED_AND_LIVE (live_float_p);
6737 FLOAT_MARK (XFLOAT (obj));
6738 break;
6740 case_Lisp_Int:
6741 break;
6743 default:
6744 emacs_abort ();
6747 #undef CHECK_LIVE
6748 #undef CHECK_ALLOCATED
6749 #undef CHECK_ALLOCATED_AND_LIVE
6751 /* Mark the Lisp pointers in the terminal objects.
6752 Called by Fgarbage_collect. */
6754 static void
6755 mark_terminals (void)
6757 struct terminal *t;
6758 for (t = terminal_list; t; t = t->next_terminal)
6760 eassert (t->name != NULL);
6761 #ifdef HAVE_WINDOW_SYSTEM
6762 /* If a terminal object is reachable from a stacpro'ed object,
6763 it might have been marked already. Make sure the image cache
6764 gets marked. */
6765 mark_image_cache (t->image_cache);
6766 #endif /* HAVE_WINDOW_SYSTEM */
6767 if (!VECTOR_MARKED_P (t))
6768 mark_vectorlike ((struct Lisp_Vector *)t);
6774 /* Value is non-zero if OBJ will survive the current GC because it's
6775 either marked or does not need to be marked to survive. */
6777 bool
6778 survives_gc_p (Lisp_Object obj)
6780 bool survives_p;
6782 switch (XTYPE (obj))
6784 case_Lisp_Int:
6785 survives_p = 1;
6786 break;
6788 case Lisp_Symbol:
6789 survives_p = XSYMBOL (obj)->u.s.gcmarkbit;
6790 break;
6792 case Lisp_Misc:
6793 survives_p = XMISCANY (obj)->gcmarkbit;
6794 break;
6796 case Lisp_String:
6797 survives_p = STRING_MARKED_P (XSTRING (obj));
6798 break;
6800 case Lisp_Vectorlike:
6801 survives_p = SUBRP (obj) || VECTOR_MARKED_P (XVECTOR (obj));
6802 break;
6804 case Lisp_Cons:
6805 survives_p = CONS_MARKED_P (XCONS (obj));
6806 break;
6808 case Lisp_Float:
6809 survives_p = FLOAT_MARKED_P (XFLOAT (obj));
6810 break;
6812 default:
6813 emacs_abort ();
6816 return survives_p || PURE_P (XPNTR (obj));
6822 NO_INLINE /* For better stack traces */
6823 static void
6824 sweep_conses (void)
6826 struct cons_block *cblk;
6827 struct cons_block **cprev = &cons_block;
6828 int lim = cons_block_index;
6829 EMACS_INT num_free = 0, num_used = 0;
6831 cons_free_list = 0;
6833 for (cblk = cons_block; cblk; cblk = *cprev)
6835 int i = 0;
6836 int this_free = 0;
6837 int ilim = (lim + BITS_PER_BITS_WORD - 1) / BITS_PER_BITS_WORD;
6839 /* Scan the mark bits an int at a time. */
6840 for (i = 0; i < ilim; i++)
6842 if (cblk->gcmarkbits[i] == BITS_WORD_MAX)
6844 /* Fast path - all cons cells for this int are marked. */
6845 cblk->gcmarkbits[i] = 0;
6846 num_used += BITS_PER_BITS_WORD;
6848 else
6850 /* Some cons cells for this int are not marked.
6851 Find which ones, and free them. */
6852 int start, pos, stop;
6854 start = i * BITS_PER_BITS_WORD;
6855 stop = lim - start;
6856 if (stop > BITS_PER_BITS_WORD)
6857 stop = BITS_PER_BITS_WORD;
6858 stop += start;
6860 for (pos = start; pos < stop; pos++)
6862 struct Lisp_Cons *acons
6863 = ptr_bounds_copy (&cblk->conses[pos], cblk);
6864 if (!CONS_MARKED_P (acons))
6866 this_free++;
6867 cblk->conses[pos].u.s.u.chain = cons_free_list;
6868 cons_free_list = &cblk->conses[pos];
6869 cons_free_list->u.s.car = Vdead;
6871 else
6873 num_used++;
6874 CONS_UNMARK (acons);
6880 lim = CONS_BLOCK_SIZE;
6881 /* If this block contains only free conses and we have already
6882 seen more than two blocks worth of free conses then deallocate
6883 this block. */
6884 if (this_free == CONS_BLOCK_SIZE && num_free > CONS_BLOCK_SIZE)
6886 *cprev = cblk->next;
6887 /* Unhook from the free list. */
6888 cons_free_list = cblk->conses[0].u.s.u.chain;
6889 lisp_align_free (cblk);
6891 else
6893 num_free += this_free;
6894 cprev = &cblk->next;
6897 total_conses = num_used;
6898 total_free_conses = num_free;
6901 NO_INLINE /* For better stack traces */
6902 static void
6903 sweep_floats (void)
6905 register struct float_block *fblk;
6906 struct float_block **fprev = &float_block;
6907 register int lim = float_block_index;
6908 EMACS_INT num_free = 0, num_used = 0;
6910 float_free_list = 0;
6912 for (fblk = float_block; fblk; fblk = *fprev)
6914 register int i;
6915 int this_free = 0;
6916 for (i = 0; i < lim; i++)
6918 struct Lisp_Float *afloat = ptr_bounds_copy (&fblk->floats[i], fblk);
6919 if (!FLOAT_MARKED_P (afloat))
6921 this_free++;
6922 fblk->floats[i].u.chain = float_free_list;
6923 float_free_list = &fblk->floats[i];
6925 else
6927 num_used++;
6928 FLOAT_UNMARK (afloat);
6931 lim = FLOAT_BLOCK_SIZE;
6932 /* If this block contains only free floats and we have already
6933 seen more than two blocks worth of free floats then deallocate
6934 this block. */
6935 if (this_free == FLOAT_BLOCK_SIZE && num_free > FLOAT_BLOCK_SIZE)
6937 *fprev = fblk->next;
6938 /* Unhook from the free list. */
6939 float_free_list = fblk->floats[0].u.chain;
6940 lisp_align_free (fblk);
6942 else
6944 num_free += this_free;
6945 fprev = &fblk->next;
6948 total_floats = num_used;
6949 total_free_floats = num_free;
6952 NO_INLINE /* For better stack traces */
6953 static void
6954 sweep_intervals (void)
6956 register struct interval_block *iblk;
6957 struct interval_block **iprev = &interval_block;
6958 register int lim = interval_block_index;
6959 EMACS_INT num_free = 0, num_used = 0;
6961 interval_free_list = 0;
6963 for (iblk = interval_block; iblk; iblk = *iprev)
6965 register int i;
6966 int this_free = 0;
6968 for (i = 0; i < lim; i++)
6970 if (!iblk->intervals[i].gcmarkbit)
6972 set_interval_parent (&iblk->intervals[i], interval_free_list);
6973 interval_free_list = &iblk->intervals[i];
6974 this_free++;
6976 else
6978 num_used++;
6979 iblk->intervals[i].gcmarkbit = 0;
6982 lim = INTERVAL_BLOCK_SIZE;
6983 /* If this block contains only free intervals and we have already
6984 seen more than two blocks worth of free intervals then
6985 deallocate this block. */
6986 if (this_free == INTERVAL_BLOCK_SIZE && num_free > INTERVAL_BLOCK_SIZE)
6988 *iprev = iblk->next;
6989 /* Unhook from the free list. */
6990 interval_free_list = INTERVAL_PARENT (&iblk->intervals[0]);
6991 lisp_free (iblk);
6993 else
6995 num_free += this_free;
6996 iprev = &iblk->next;
6999 total_intervals = num_used;
7000 total_free_intervals = num_free;
7003 NO_INLINE /* For better stack traces */
7004 static void
7005 sweep_symbols (void)
7007 struct symbol_block *sblk;
7008 struct symbol_block **sprev = &symbol_block;
7009 int lim = symbol_block_index;
7010 EMACS_INT num_free = 0, num_used = ARRAYELTS (lispsym);
7012 symbol_free_list = NULL;
7014 for (int i = 0; i < ARRAYELTS (lispsym); i++)
7015 lispsym[i].u.s.gcmarkbit = 0;
7017 for (sblk = symbol_block; sblk; sblk = *sprev)
7019 int this_free = 0;
7020 struct Lisp_Symbol *sym = sblk->symbols;
7021 struct Lisp_Symbol *end = sym + lim;
7023 for (; sym < end; ++sym)
7025 if (!sym->u.s.gcmarkbit)
7027 if (sym->u.s.redirect == SYMBOL_LOCALIZED)
7029 xfree (SYMBOL_BLV (sym));
7030 /* At every GC we sweep all symbol_blocks and rebuild the
7031 symbol_free_list, so those symbols which stayed unused
7032 between the two will be re-swept.
7033 So we have to make sure we don't re-free this blv next
7034 time we sweep this symbol_block (bug#29066). */
7035 sym->u.s.redirect = SYMBOL_PLAINVAL;
7037 sym->u.s.next = symbol_free_list;
7038 symbol_free_list = sym;
7039 symbol_free_list->u.s.function = Vdead;
7040 ++this_free;
7042 else
7044 ++num_used;
7045 sym->u.s.gcmarkbit = 0;
7046 /* Attempt to catch bogus objects. */
7047 eassert (valid_lisp_object_p (sym->u.s.function));
7051 lim = SYMBOL_BLOCK_SIZE;
7052 /* If this block contains only free symbols and we have already
7053 seen more than two blocks worth of free symbols then deallocate
7054 this block. */
7055 if (this_free == SYMBOL_BLOCK_SIZE && num_free > SYMBOL_BLOCK_SIZE)
7057 *sprev = sblk->next;
7058 /* Unhook from the free list. */
7059 symbol_free_list = sblk->symbols[0].u.s.next;
7060 lisp_free (sblk);
7062 else
7064 num_free += this_free;
7065 sprev = &sblk->next;
7068 total_symbols = num_used;
7069 total_free_symbols = num_free;
7072 NO_INLINE /* For better stack traces. */
7073 static void
7074 sweep_misc (void)
7076 register struct marker_block *mblk;
7077 struct marker_block **mprev = &marker_block;
7078 register int lim = marker_block_index;
7079 EMACS_INT num_free = 0, num_used = 0;
7081 /* Put all unmarked misc's on free list. For a marker, first
7082 unchain it from the buffer it points into. */
7084 misc_free_list = 0;
7086 for (mblk = marker_block; mblk; mblk = *mprev)
7088 register int i;
7089 int this_free = 0;
7091 for (i = 0; i < lim; i++)
7093 if (!mblk->markers[i].m.u_any.gcmarkbit)
7095 if (mblk->markers[i].m.u_any.type == Lisp_Misc_Marker)
7096 /* Make sure markers have been unchained from their buffer
7097 in sweep_buffer before we collect them. */
7098 eassert (!mblk->markers[i].m.u_marker.buffer);
7099 else if (mblk->markers[i].m.u_any.type == Lisp_Misc_Finalizer)
7100 unchain_finalizer (&mblk->markers[i].m.u_finalizer);
7101 #ifdef HAVE_MODULES
7102 else if (mblk->markers[i].m.u_any.type == Lisp_Misc_User_Ptr)
7104 struct Lisp_User_Ptr *uptr = &mblk->markers[i].m.u_user_ptr;
7105 if (uptr->finalizer)
7106 uptr->finalizer (uptr->p);
7108 #endif
7109 /* Set the type of the freed object to Lisp_Misc_Free.
7110 We could leave the type alone, since nobody checks it,
7111 but this might catch bugs faster. */
7112 mblk->markers[i].m.u_marker.type = Lisp_Misc_Free;
7113 mblk->markers[i].m.u_free.chain = misc_free_list;
7114 misc_free_list = &mblk->markers[i].m;
7115 this_free++;
7117 else
7119 num_used++;
7120 mblk->markers[i].m.u_any.gcmarkbit = 0;
7123 lim = MARKER_BLOCK_SIZE;
7124 /* If this block contains only free markers and we have already
7125 seen more than two blocks worth of free markers then deallocate
7126 this block. */
7127 if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE)
7129 *mprev = mblk->next;
7130 /* Unhook from the free list. */
7131 misc_free_list = mblk->markers[0].m.u_free.chain;
7132 lisp_free (mblk);
7134 else
7136 num_free += this_free;
7137 mprev = &mblk->next;
7141 total_markers = num_used;
7142 total_free_markers = num_free;
7145 /* Remove BUFFER's markers that are due to be swept. This is needed since
7146 we treat BUF_MARKERS and markers's `next' field as weak pointers. */
7147 static void
7148 unchain_dead_markers (struct buffer *buffer)
7150 struct Lisp_Marker *this, **prev = &BUF_MARKERS (buffer);
7152 while ((this = *prev))
7153 if (this->gcmarkbit)
7154 prev = &this->next;
7155 else
7157 this->buffer = NULL;
7158 *prev = this->next;
7162 NO_INLINE /* For better stack traces */
7163 static void
7164 sweep_buffers (void)
7166 register struct buffer *buffer, **bprev = &all_buffers;
7168 total_buffers = 0;
7169 for (buffer = all_buffers; buffer; buffer = *bprev)
7170 if (!VECTOR_MARKED_P (buffer))
7172 *bprev = buffer->next;
7173 lisp_free (buffer);
7175 else
7177 VECTOR_UNMARK (buffer);
7178 /* Do not use buffer_(set|get)_intervals here. */
7179 buffer->text->intervals = balance_intervals (buffer->text->intervals);
7180 unchain_dead_markers (buffer);
7181 total_buffers++;
7182 bprev = &buffer->next;
7186 /* Sweep: find all structures not marked, and free them. */
7187 static void
7188 gc_sweep (void)
7190 /* Remove or mark entries in weak hash tables.
7191 This must be done before any object is unmarked. */
7192 sweep_weak_hash_tables ();
7194 sweep_strings ();
7195 check_string_bytes (!noninteractive);
7196 sweep_conses ();
7197 sweep_floats ();
7198 sweep_intervals ();
7199 sweep_symbols ();
7200 sweep_buffers ();
7201 sweep_misc ();
7202 sweep_vectors ();
7203 check_string_bytes (!noninteractive);
7206 DEFUN ("memory-info", Fmemory_info, Smemory_info, 0, 0, 0,
7207 doc: /* Return a list of (TOTAL-RAM FREE-RAM TOTAL-SWAP FREE-SWAP).
7208 All values are in Kbytes. If there is no swap space,
7209 last two values are zero. If the system is not supported
7210 or memory information can't be obtained, return nil. */)
7211 (void)
7213 #if defined HAVE_LINUX_SYSINFO
7214 struct sysinfo si;
7215 uintmax_t units;
7217 if (sysinfo (&si))
7218 return Qnil;
7219 #ifdef LINUX_SYSINFO_UNIT
7220 units = si.mem_unit;
7221 #else
7222 units = 1;
7223 #endif
7224 return list4i ((uintmax_t) si.totalram * units / 1024,
7225 (uintmax_t) si.freeram * units / 1024,
7226 (uintmax_t) si.totalswap * units / 1024,
7227 (uintmax_t) si.freeswap * units / 1024);
7228 #elif defined WINDOWSNT
7229 unsigned long long totalram, freeram, totalswap, freeswap;
7231 if (w32_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7232 return list4i ((uintmax_t) totalram / 1024,
7233 (uintmax_t) freeram / 1024,
7234 (uintmax_t) totalswap / 1024,
7235 (uintmax_t) freeswap / 1024);
7236 else
7237 return Qnil;
7238 #elif defined MSDOS
7239 unsigned long totalram, freeram, totalswap, freeswap;
7241 if (dos_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7242 return list4i ((uintmax_t) totalram / 1024,
7243 (uintmax_t) freeram / 1024,
7244 (uintmax_t) totalswap / 1024,
7245 (uintmax_t) freeswap / 1024);
7246 else
7247 return Qnil;
7248 #else /* not HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7249 /* FIXME: add more systems. */
7250 return Qnil;
7251 #endif /* HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7254 /* Debugging aids. */
7256 DEFUN ("memory-limit", Fmemory_limit, Smemory_limit, 0, 0, 0,
7257 doc: /* Return the address of the last byte Emacs has allocated, divided by 1024.
7258 This may be helpful in debugging Emacs's memory usage.
7259 We divide the value by 1024 to make sure it fits in a Lisp integer. */)
7260 (void)
7262 Lisp_Object end;
7264 #if defined HAVE_NS || defined __APPLE__ || !HAVE_SBRK
7265 /* Avoid warning. sbrk has no relation to memory allocated anyway. */
7266 XSETINT (end, 0);
7267 #else
7268 XSETINT (end, (intptr_t) (char *) sbrk (0) / 1024);
7269 #endif
7271 return end;
7274 DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0,
7275 doc: /* Return a list of counters that measure how much consing there has been.
7276 Each of these counters increments for a certain kind of object.
7277 The counters wrap around from the largest positive integer to zero.
7278 Garbage collection does not decrease them.
7279 The elements of the value are as follows:
7280 (CONSES FLOATS VECTOR-CELLS SYMBOLS STRING-CHARS MISCS INTERVALS STRINGS)
7281 All are in units of 1 = one object consed
7282 except for VECTOR-CELLS and STRING-CHARS, which count the total length of
7283 objects consed.
7284 MISCS include overlays, markers, and some internal types.
7285 Frames, windows, buffers, and subprocesses count as vectors
7286 (but the contents of a buffer's text do not count here). */)
7287 (void)
7289 return listn (CONSTYPE_HEAP, 8,
7290 bounded_number (cons_cells_consed),
7291 bounded_number (floats_consed),
7292 bounded_number (vector_cells_consed),
7293 bounded_number (symbols_consed),
7294 bounded_number (string_chars_consed),
7295 bounded_number (misc_objects_consed),
7296 bounded_number (intervals_consed),
7297 bounded_number (strings_consed));
7300 static bool
7301 symbol_uses_obj (Lisp_Object symbol, Lisp_Object obj)
7303 struct Lisp_Symbol *sym = XSYMBOL (symbol);
7304 Lisp_Object val = find_symbol_value (symbol);
7305 return (EQ (val, obj)
7306 || EQ (sym->u.s.function, obj)
7307 || (!NILP (sym->u.s.function)
7308 && COMPILEDP (sym->u.s.function)
7309 && EQ (AREF (sym->u.s.function, COMPILED_BYTECODE), obj))
7310 || (!NILP (val)
7311 && COMPILEDP (val)
7312 && EQ (AREF (val, COMPILED_BYTECODE), obj)));
7315 /* Find at most FIND_MAX symbols which have OBJ as their value or
7316 function. This is used in gdbinit's `xwhichsymbols' command. */
7318 Lisp_Object
7319 which_symbols (Lisp_Object obj, EMACS_INT find_max)
7321 struct symbol_block *sblk;
7322 ptrdiff_t gc_count = inhibit_garbage_collection ();
7323 Lisp_Object found = Qnil;
7325 if (! DEADP (obj))
7327 for (int i = 0; i < ARRAYELTS (lispsym); i++)
7329 Lisp_Object sym = builtin_lisp_symbol (i);
7330 if (symbol_uses_obj (sym, obj))
7332 found = Fcons (sym, found);
7333 if (--find_max == 0)
7334 goto out;
7338 for (sblk = symbol_block; sblk; sblk = sblk->next)
7340 struct Lisp_Symbol *asym = sblk->symbols;
7341 int bn;
7343 for (bn = 0; bn < SYMBOL_BLOCK_SIZE; bn++, asym++)
7345 if (sblk == symbol_block && bn >= symbol_block_index)
7346 break;
7348 Lisp_Object sym = make_lisp_symbol (asym);
7349 if (symbol_uses_obj (sym, obj))
7351 found = Fcons (sym, found);
7352 if (--find_max == 0)
7353 goto out;
7359 out:
7360 unbind_to (gc_count, Qnil);
7361 return found;
7364 #ifdef SUSPICIOUS_OBJECT_CHECKING
7366 static void *
7367 find_suspicious_object_in_range (void *begin, void *end)
7369 char *begin_a = begin;
7370 char *end_a = end;
7371 int i;
7373 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7375 char *suspicious_object = suspicious_objects[i];
7376 if (begin_a <= suspicious_object && suspicious_object < end_a)
7377 return suspicious_object;
7380 return NULL;
7383 static void
7384 note_suspicious_free (void *ptr)
7386 struct suspicious_free_record *rec;
7388 rec = &suspicious_free_history[suspicious_free_history_index++];
7389 if (suspicious_free_history_index ==
7390 ARRAYELTS (suspicious_free_history))
7392 suspicious_free_history_index = 0;
7395 memset (rec, 0, sizeof (*rec));
7396 rec->suspicious_object = ptr;
7397 backtrace (&rec->backtrace[0], ARRAYELTS (rec->backtrace));
7400 static void
7401 detect_suspicious_free (void *ptr)
7403 int i;
7405 eassert (ptr != NULL);
7407 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7408 if (suspicious_objects[i] == ptr)
7410 note_suspicious_free (ptr);
7411 suspicious_objects[i] = NULL;
7415 #endif /* SUSPICIOUS_OBJECT_CHECKING */
7417 DEFUN ("suspicious-object", Fsuspicious_object, Ssuspicious_object, 1, 1, 0,
7418 doc: /* Return OBJ, maybe marking it for extra scrutiny.
7419 If Emacs is compiled with suspicious object checking, capture
7420 a stack trace when OBJ is freed in order to help track down
7421 garbage collection bugs. Otherwise, do nothing and return OBJ. */)
7422 (Lisp_Object obj)
7424 #ifdef SUSPICIOUS_OBJECT_CHECKING
7425 /* Right now, we care only about vectors. */
7426 if (VECTORLIKEP (obj))
7428 suspicious_objects[suspicious_object_index++] = XVECTOR (obj);
7429 if (suspicious_object_index == ARRAYELTS (suspicious_objects))
7430 suspicious_object_index = 0;
7432 #endif
7433 return obj;
7436 #ifdef ENABLE_CHECKING
7438 bool suppress_checking;
7440 void
7441 die (const char *msg, const char *file, int line)
7443 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: assertion failed: %s\r\n",
7444 file, line, msg);
7445 terminate_due_to_signal (SIGABRT, INT_MAX);
7448 #endif /* ENABLE_CHECKING */
7450 #if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
7452 /* Stress alloca with inconveniently sized requests and check
7453 whether all allocated areas may be used for Lisp_Object. */
7455 NO_INLINE static void
7456 verify_alloca (void)
7458 int i;
7459 enum { ALLOCA_CHECK_MAX = 256 };
7460 /* Start from size of the smallest Lisp object. */
7461 for (i = sizeof (struct Lisp_Cons); i <= ALLOCA_CHECK_MAX; i++)
7463 void *ptr = alloca (i);
7464 make_lisp_ptr (ptr, Lisp_Cons);
7468 #else /* not ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7470 #define verify_alloca() ((void) 0)
7472 #endif /* ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7474 /* Initialization. */
7476 void
7477 init_alloc_once (void)
7479 /* Even though Qt's contents are not set up, its address is known. */
7480 Vpurify_flag = Qt;
7482 purebeg = PUREBEG;
7483 pure_size = PURESIZE;
7485 verify_alloca ();
7486 init_finalizer_list (&finalizers);
7487 init_finalizer_list (&doomed_finalizers);
7489 mem_init ();
7490 Vdead = make_pure_string ("DEAD", 4, 4, 0);
7492 #ifdef DOUG_LEA_MALLOC
7493 mallopt (M_TRIM_THRESHOLD, 128 * 1024); /* Trim threshold. */
7494 mallopt (M_MMAP_THRESHOLD, 64 * 1024); /* Mmap threshold. */
7495 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); /* Max. number of mmap'ed areas. */
7496 #endif
7497 init_strings ();
7498 init_vectors ();
7500 refill_memory_reserve ();
7501 gc_cons_threshold = GC_DEFAULT_THRESHOLD;
7504 void
7505 init_alloc (void)
7507 Vgc_elapsed = make_float (0.0);
7508 gcs_done = 0;
7510 #if USE_VALGRIND
7511 valgrind_p = RUNNING_ON_VALGRIND != 0;
7512 #endif
7515 void
7516 syms_of_alloc (void)
7518 DEFVAR_INT ("gc-cons-threshold", gc_cons_threshold,
7519 doc: /* Number of bytes of consing between garbage collections.
7520 Garbage collection can happen automatically once this many bytes have been
7521 allocated since the last garbage collection. All data types count.
7523 Garbage collection happens automatically only when `eval' is called.
7525 By binding this temporarily to a large number, you can effectively
7526 prevent garbage collection during a part of the program.
7527 See also `gc-cons-percentage'. */);
7529 DEFVAR_LISP ("gc-cons-percentage", Vgc_cons_percentage,
7530 doc: /* Portion of the heap used for allocation.
7531 Garbage collection can happen automatically once this portion of the heap
7532 has been allocated since the last garbage collection.
7533 If this portion is smaller than `gc-cons-threshold', this is ignored. */);
7534 Vgc_cons_percentage = make_float (0.1);
7536 DEFVAR_INT ("pure-bytes-used", pure_bytes_used,
7537 doc: /* Number of bytes of shareable Lisp data allocated so far. */);
7539 DEFVAR_INT ("cons-cells-consed", cons_cells_consed,
7540 doc: /* Number of cons cells that have been consed so far. */);
7542 DEFVAR_INT ("floats-consed", floats_consed,
7543 doc: /* Number of floats that have been consed so far. */);
7545 DEFVAR_INT ("vector-cells-consed", vector_cells_consed,
7546 doc: /* Number of vector cells that have been consed so far. */);
7548 DEFVAR_INT ("symbols-consed", symbols_consed,
7549 doc: /* Number of symbols that have been consed so far. */);
7550 symbols_consed += ARRAYELTS (lispsym);
7552 DEFVAR_INT ("string-chars-consed", string_chars_consed,
7553 doc: /* Number of string characters that have been consed so far. */);
7555 DEFVAR_INT ("misc-objects-consed", misc_objects_consed,
7556 doc: /* Number of miscellaneous objects that have been consed so far.
7557 These include markers and overlays, plus certain objects not visible
7558 to users. */);
7560 DEFVAR_INT ("intervals-consed", intervals_consed,
7561 doc: /* Number of intervals that have been consed so far. */);
7563 DEFVAR_INT ("strings-consed", strings_consed,
7564 doc: /* Number of strings that have been consed so far. */);
7566 DEFVAR_LISP ("purify-flag", Vpurify_flag,
7567 doc: /* Non-nil means loading Lisp code in order to dump an executable.
7568 This means that certain objects should be allocated in shared (pure) space.
7569 It can also be set to a hash-table, in which case this table is used to
7570 do hash-consing of the objects allocated to pure space. */);
7572 DEFVAR_BOOL ("garbage-collection-messages", garbage_collection_messages,
7573 doc: /* Non-nil means display messages at start and end of garbage collection. */);
7574 garbage_collection_messages = 0;
7576 DEFVAR_LISP ("post-gc-hook", Vpost_gc_hook,
7577 doc: /* Hook run after garbage collection has finished. */);
7578 Vpost_gc_hook = Qnil;
7579 DEFSYM (Qpost_gc_hook, "post-gc-hook");
7581 DEFVAR_LISP ("memory-signal-data", Vmemory_signal_data,
7582 doc: /* Precomputed `signal' argument for memory-full error. */);
7583 /* We build this in advance because if we wait until we need it, we might
7584 not be able to allocate the memory to hold it. */
7585 Vmemory_signal_data
7586 = listn (CONSTYPE_PURE, 2, Qerror,
7587 build_pure_c_string ("Memory exhausted--use M-x save-some-buffers then exit and restart Emacs"));
7589 DEFVAR_LISP ("memory-full", Vmemory_full,
7590 doc: /* Non-nil means Emacs cannot get much more Lisp memory. */);
7591 Vmemory_full = Qnil;
7593 DEFSYM (Qconses, "conses");
7594 DEFSYM (Qsymbols, "symbols");
7595 DEFSYM (Qmiscs, "miscs");
7596 DEFSYM (Qstrings, "strings");
7597 DEFSYM (Qvectors, "vectors");
7598 DEFSYM (Qfloats, "floats");
7599 DEFSYM (Qintervals, "intervals");
7600 DEFSYM (Qbuffers, "buffers");
7601 DEFSYM (Qstring_bytes, "string-bytes");
7602 DEFSYM (Qvector_slots, "vector-slots");
7603 DEFSYM (Qheap, "heap");
7604 DEFSYM (QAutomatic_GC, "Automatic GC");
7606 DEFSYM (Qgc_cons_threshold, "gc-cons-threshold");
7607 DEFSYM (Qchar_table_extra_slots, "char-table-extra-slots");
7609 DEFVAR_LISP ("gc-elapsed", Vgc_elapsed,
7610 doc: /* Accumulated time elapsed in garbage collections.
7611 The time is in seconds as a floating point value. */);
7612 DEFVAR_INT ("gcs-done", gcs_done,
7613 doc: /* Accumulated number of garbage collections done. */);
7615 defsubr (&Scons);
7616 defsubr (&Slist);
7617 defsubr (&Svector);
7618 defsubr (&Srecord);
7619 defsubr (&Sbool_vector);
7620 defsubr (&Smake_byte_code);
7621 defsubr (&Smake_list);
7622 defsubr (&Smake_vector);
7623 defsubr (&Smake_record);
7624 defsubr (&Smake_string);
7625 defsubr (&Smake_bool_vector);
7626 defsubr (&Smake_symbol);
7627 defsubr (&Smake_marker);
7628 defsubr (&Smake_finalizer);
7629 defsubr (&Spurecopy);
7630 defsubr (&Sgarbage_collect);
7631 defsubr (&Smemory_limit);
7632 defsubr (&Smemory_info);
7633 defsubr (&Smemory_use_counts);
7634 defsubr (&Ssuspicious_object);
7637 /* When compiled with GCC, GDB might say "No enum type named
7638 pvec_type" if we don't have at least one symbol with that type, and
7639 then xbacktrace could fail. Similarly for the other enums and
7640 their values. Some non-GCC compilers don't like these constructs. */
7641 #ifdef __GNUC__
7642 union
7644 enum CHARTAB_SIZE_BITS CHARTAB_SIZE_BITS;
7645 enum char_table_specials char_table_specials;
7646 enum char_bits char_bits;
7647 enum CHECK_LISP_OBJECT_TYPE CHECK_LISP_OBJECT_TYPE;
7648 enum DEFAULT_HASH_SIZE DEFAULT_HASH_SIZE;
7649 enum Lisp_Bits Lisp_Bits;
7650 enum Lisp_Compiled Lisp_Compiled;
7651 enum maxargs maxargs;
7652 enum MAX_ALLOCA MAX_ALLOCA;
7653 enum More_Lisp_Bits More_Lisp_Bits;
7654 enum pvec_type pvec_type;
7655 } const EXTERNALLY_VISIBLE gdb_make_enums_visible = {0};
7656 #endif /* __GNUC__ */