]> code.delx.au - gnu-emacs/blob - src/alloc.c
Merge from origin/emacs-24
[gnu-emacs] / src / alloc.c
1 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
2
3 Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2015 Free Software
4 Foundation, Inc.
5
6 This file is part of GNU Emacs.
7
8 GNU Emacs is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
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.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20
21 #include <config.h>
22
23 #include <stdio.h>
24 #include <limits.h> /* For CHAR_BIT. */
25
26 #ifdef ENABLE_CHECKING
27 #include <signal.h> /* For SIGABRT. */
28 #endif
29
30 #ifdef HAVE_PTHREAD
31 #include <pthread.h>
32 #endif
33
34 #include "lisp.h"
35 #include "process.h"
36 #include "intervals.h"
37 #include "puresize.h"
38 #include "character.h"
39 #include "buffer.h"
40 #include "window.h"
41 #include "keyboard.h"
42 #include "frame.h"
43 #include "blockinput.h"
44 #include "termhooks.h" /* For struct terminal. */
45 #ifdef HAVE_WINDOW_SYSTEM
46 #include TERM_HEADER
47 #endif /* HAVE_WINDOW_SYSTEM */
48
49 #include <verify.h>
50 #include <execinfo.h> /* For backtrace. */
51
52 #ifdef HAVE_LINUX_SYSINFO
53 #include <sys/sysinfo.h>
54 #endif
55
56 #ifdef MSDOS
57 #include "dosfns.h" /* For dos_memory_info. */
58 #endif
59
60 #if (defined ENABLE_CHECKING \
61 && defined HAVE_VALGRIND_VALGRIND_H \
62 && !defined USE_VALGRIND)
63 # define USE_VALGRIND 1
64 #endif
65
66 #if USE_VALGRIND
67 #include <valgrind/valgrind.h>
68 #include <valgrind/memcheck.h>
69 static bool valgrind_p;
70 #endif
71
72 /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects.
73 Doable only if GC_MARK_STACK. */
74 #if ! GC_MARK_STACK
75 # undef GC_CHECK_MARKED_OBJECTS
76 #endif
77
78 /* GC_MALLOC_CHECK defined means perform validity checks of malloc'd
79 memory. Can do this only if using gmalloc.c and if not checking
80 marked objects. */
81
82 #if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \
83 || defined HYBRID_MALLOC || defined GC_CHECK_MARKED_OBJECTS)
84 #undef GC_MALLOC_CHECK
85 #endif
86
87 #include <unistd.h>
88 #include <fcntl.h>
89
90 #ifdef USE_GTK
91 # include "gtkutil.h"
92 #endif
93 #ifdef WINDOWSNT
94 #include "w32.h"
95 #include "w32heap.h" /* for sbrk */
96 #endif
97
98 #ifdef DOUG_LEA_MALLOC
99
100 #include <malloc.h>
101
102 /* Specify maximum number of areas to mmap. It would be nice to use a
103 value that explicitly means "no limit". */
104
105 #define MMAP_MAX_AREAS 100000000
106
107 #endif /* not DOUG_LEA_MALLOC */
108
109 /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
110 to a struct Lisp_String. */
111
112 #define MARK_STRING(S) ((S)->size |= ARRAY_MARK_FLAG)
113 #define UNMARK_STRING(S) ((S)->size &= ~ARRAY_MARK_FLAG)
114 #define STRING_MARKED_P(S) (((S)->size & ARRAY_MARK_FLAG) != 0)
115
116 #define VECTOR_MARK(V) ((V)->header.size |= ARRAY_MARK_FLAG)
117 #define VECTOR_UNMARK(V) ((V)->header.size &= ~ARRAY_MARK_FLAG)
118 #define VECTOR_MARKED_P(V) (((V)->header.size & ARRAY_MARK_FLAG) != 0)
119
120 /* Default value of gc_cons_threshold (see below). */
121
122 #define GC_DEFAULT_THRESHOLD (100000 * word_size)
123
124 /* Global variables. */
125 struct emacs_globals globals;
126
127 /* Number of bytes of consing done since the last gc. */
128
129 EMACS_INT consing_since_gc;
130
131 /* Similar minimum, computed from Vgc_cons_percentage. */
132
133 EMACS_INT gc_relative_threshold;
134
135 /* Minimum number of bytes of consing since GC before next GC,
136 when memory is full. */
137
138 EMACS_INT memory_full_cons_threshold;
139
140 /* True during GC. */
141
142 bool gc_in_progress;
143
144 /* True means abort if try to GC.
145 This is for code which is written on the assumption that
146 no GC will happen, so as to verify that assumption. */
147
148 bool abort_on_gc;
149
150 /* Number of live and free conses etc. */
151
152 static EMACS_INT total_conses, total_markers, total_symbols, total_buffers;
153 static EMACS_INT total_free_conses, total_free_markers, total_free_symbols;
154 static EMACS_INT total_free_floats, total_floats;
155
156 /* Points to memory space allocated as "spare", to be freed if we run
157 out of memory. We keep one large block, four cons-blocks, and
158 two string blocks. */
159
160 static char *spare_memory[7];
161
162 /* Amount of spare memory to keep in large reserve block, or to see
163 whether this much is available when malloc fails on a larger request. */
164
165 #define SPARE_MEMORY (1 << 14)
166
167 /* Initialize it to a nonzero value to force it into data space
168 (rather than bss space). That way unexec will remap it into text
169 space (pure), on some systems. We have not implemented the
170 remapping on more recent systems because this is less important
171 nowadays than in the days of small memories and timesharing. */
172
173 EMACS_INT pure[(PURESIZE + sizeof (EMACS_INT) - 1) / sizeof (EMACS_INT)] = {1,};
174 #define PUREBEG (char *) pure
175
176 /* Pointer to the pure area, and its size. */
177
178 static char *purebeg;
179 static ptrdiff_t pure_size;
180
181 /* Number of bytes of pure storage used before pure storage overflowed.
182 If this is non-zero, this implies that an overflow occurred. */
183
184 static ptrdiff_t pure_bytes_used_before_overflow;
185
186 /* True if P points into pure space. */
187
188 #define PURE_POINTER_P(P) \
189 ((uintptr_t) (P) - (uintptr_t) purebeg <= pure_size)
190
191 /* Index in pure at which next pure Lisp object will be allocated.. */
192
193 static ptrdiff_t pure_bytes_used_lisp;
194
195 /* Number of bytes allocated for non-Lisp objects in pure storage. */
196
197 static ptrdiff_t pure_bytes_used_non_lisp;
198
199 /* If nonzero, this is a warning delivered by malloc and not yet
200 displayed. */
201
202 const char *pending_malloc_warning;
203
204 #if 0 /* Normally, pointer sanity only on request... */
205 #ifdef ENABLE_CHECKING
206 #define SUSPICIOUS_OBJECT_CHECKING 1
207 #endif
208 #endif
209
210 /* ... but unconditionally use SUSPICIOUS_OBJECT_CHECKING while the GC
211 bug is unresolved. */
212 #define SUSPICIOUS_OBJECT_CHECKING 1
213
214 #ifdef SUSPICIOUS_OBJECT_CHECKING
215 struct suspicious_free_record
216 {
217 void *suspicious_object;
218 void *backtrace[128];
219 };
220 static void *suspicious_objects[32];
221 static int suspicious_object_index;
222 struct suspicious_free_record suspicious_free_history[64] EXTERNALLY_VISIBLE;
223 static int suspicious_free_history_index;
224 /* Find the first currently-monitored suspicious pointer in range
225 [begin,end) or NULL if no such pointer exists. */
226 static void *find_suspicious_object_in_range (void *begin, void *end);
227 static void detect_suspicious_free (void *ptr);
228 #else
229 # define find_suspicious_object_in_range(begin, end) NULL
230 # define detect_suspicious_free(ptr) (void)
231 #endif
232
233 /* Maximum amount of C stack to save when a GC happens. */
234
235 #ifndef MAX_SAVE_STACK
236 #define MAX_SAVE_STACK 16000
237 #endif
238
239 /* Buffer in which we save a copy of the C stack at each GC. */
240
241 #if MAX_SAVE_STACK > 0
242 static char *stack_copy;
243 static ptrdiff_t stack_copy_size;
244
245 /* Copy to DEST a block of memory from SRC of size SIZE bytes,
246 avoiding any address sanitization. */
247
248 static void * ATTRIBUTE_NO_SANITIZE_ADDRESS
249 no_sanitize_memcpy (void *dest, void const *src, size_t size)
250 {
251 if (! ADDRESS_SANITIZER)
252 return memcpy (dest, src, size);
253 else
254 {
255 size_t i;
256 char *d = dest;
257 char const *s = src;
258 for (i = 0; i < size; i++)
259 d[i] = s[i];
260 return dest;
261 }
262 }
263
264 #endif /* MAX_SAVE_STACK > 0 */
265
266 static void mark_terminals (void);
267 static void gc_sweep (void);
268 static Lisp_Object make_pure_vector (ptrdiff_t);
269 static void mark_buffer (struct buffer *);
270
271 #if !defined REL_ALLOC || defined SYSTEM_MALLOC || defined HYBRID_MALLOC
272 static void refill_memory_reserve (void);
273 #endif
274 static void compact_small_strings (void);
275 static void free_large_strings (void);
276 extern Lisp_Object which_symbols (Lisp_Object, EMACS_INT) EXTERNALLY_VISIBLE;
277
278 /* When scanning the C stack for live Lisp objects, Emacs keeps track of
279 what memory allocated via lisp_malloc and lisp_align_malloc is intended
280 for what purpose. This enumeration specifies the type of memory. */
281
282 enum mem_type
283 {
284 MEM_TYPE_NON_LISP,
285 MEM_TYPE_BUFFER,
286 MEM_TYPE_CONS,
287 MEM_TYPE_STRING,
288 MEM_TYPE_MISC,
289 MEM_TYPE_SYMBOL,
290 MEM_TYPE_FLOAT,
291 /* Since all non-bool pseudovectors are small enough to be
292 allocated from vector blocks, this memory type denotes
293 large regular vectors and large bool pseudovectors. */
294 MEM_TYPE_VECTORLIKE,
295 /* Special type to denote vector blocks. */
296 MEM_TYPE_VECTOR_BLOCK,
297 /* Special type to denote reserved memory. */
298 MEM_TYPE_SPARE
299 };
300
301 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
302
303 /* A unique object in pure space used to make some Lisp objects
304 on free lists recognizable in O(1). */
305
306 static Lisp_Object Vdead;
307 #define DEADP(x) EQ (x, Vdead)
308
309 #ifdef GC_MALLOC_CHECK
310
311 enum mem_type allocated_mem_type;
312
313 #endif /* GC_MALLOC_CHECK */
314
315 /* A node in the red-black tree describing allocated memory containing
316 Lisp data. Each such block is recorded with its start and end
317 address when it is allocated, and removed from the tree when it
318 is freed.
319
320 A red-black tree is a balanced binary tree with the following
321 properties:
322
323 1. Every node is either red or black.
324 2. Every leaf is black.
325 3. If a node is red, then both of its children are black.
326 4. Every simple path from a node to a descendant leaf contains
327 the same number of black nodes.
328 5. The root is always black.
329
330 When nodes are inserted into the tree, or deleted from the tree,
331 the tree is "fixed" so that these properties are always true.
332
333 A red-black tree with N internal nodes has height at most 2
334 log(N+1). Searches, insertions and deletions are done in O(log N).
335 Please see a text book about data structures for a detailed
336 description of red-black trees. Any book worth its salt should
337 describe them. */
338
339 struct mem_node
340 {
341 /* Children of this node. These pointers are never NULL. When there
342 is no child, the value is MEM_NIL, which points to a dummy node. */
343 struct mem_node *left, *right;
344
345 /* The parent of this node. In the root node, this is NULL. */
346 struct mem_node *parent;
347
348 /* Start and end of allocated region. */
349 void *start, *end;
350
351 /* Node color. */
352 enum {MEM_BLACK, MEM_RED} color;
353
354 /* Memory type. */
355 enum mem_type type;
356 };
357
358 /* Base address of stack. Set in main. */
359
360 Lisp_Object *stack_base;
361
362 /* Root of the tree describing allocated Lisp memory. */
363
364 static struct mem_node *mem_root;
365
366 /* Lowest and highest known address in the heap. */
367
368 static void *min_heap_address, *max_heap_address;
369
370 /* Sentinel node of the tree. */
371
372 static struct mem_node mem_z;
373 #define MEM_NIL &mem_z
374
375 static struct mem_node *mem_insert (void *, void *, enum mem_type);
376 static void mem_insert_fixup (struct mem_node *);
377 static void mem_rotate_left (struct mem_node *);
378 static void mem_rotate_right (struct mem_node *);
379 static void mem_delete (struct mem_node *);
380 static void mem_delete_fixup (struct mem_node *);
381 static struct mem_node *mem_find (void *);
382
383 #endif /* GC_MARK_STACK || GC_MALLOC_CHECK */
384
385 #ifndef DEADP
386 # define DEADP(x) 0
387 #endif
388
389 /* Recording what needs to be marked for gc. */
390
391 struct gcpro *gcprolist;
392
393 /* Addresses of staticpro'd variables. Initialize it to a nonzero
394 value; otherwise some compilers put it into BSS. */
395
396 enum { NSTATICS = 2048 };
397 static Lisp_Object *staticvec[NSTATICS] = {&Vpurify_flag};
398
399 /* Index of next unused slot in staticvec. */
400
401 static int staticidx;
402
403 static void *pure_alloc (size_t, int);
404
405 /* Return X rounded to the next multiple of Y. Arguments should not
406 have side effects, as they are evaluated more than once. Assume X
407 + Y - 1 does not overflow. Tune for Y being a power of 2. */
408
409 #define ROUNDUP(x, y) ((y) & ((y) - 1) \
410 ? ((x) + (y) - 1) - ((x) + (y) - 1) % (y) \
411 : ((x) + (y) - 1) & ~ ((y) - 1))
412
413 /* Return PTR rounded up to the next multiple of ALIGNMENT. */
414
415 static void *
416 ALIGN (void *ptr, int alignment)
417 {
418 return (void *) ROUNDUP ((uintptr_t) ptr, alignment);
419 }
420
421 static void
422 XFLOAT_INIT (Lisp_Object f, double n)
423 {
424 XFLOAT (f)->u.data = n;
425 }
426
427 static bool
428 pointers_fit_in_lispobj_p (void)
429 {
430 return (UINTPTR_MAX <= VAL_MAX) || USE_LSB_TAG;
431 }
432
433 static bool
434 mmap_lisp_allowed_p (void)
435 {
436 /* If we can't store all memory addresses in our lisp objects, it's
437 risky to let the heap use mmap and give us addresses from all
438 over our address space. We also can't use mmap for lisp objects
439 if we might dump: unexec doesn't preserve the contents of mmapped
440 regions. */
441 return pointers_fit_in_lispobj_p () && !might_dump;
442 }
443
444 /* Head of a circularly-linked list of extant finalizers. */
445 static struct Lisp_Finalizer finalizers;
446
447 /* Head of a circularly-linked list of finalizers that must be invoked
448 because we deemed them unreachable. This list must be global, and
449 not a local inside garbage_collect_1, in case we GC again while
450 running finalizers. */
451 static struct Lisp_Finalizer doomed_finalizers;
452
453 \f
454 /************************************************************************
455 Malloc
456 ************************************************************************/
457
458 /* Function malloc calls this if it finds we are near exhausting storage. */
459
460 void
461 malloc_warning (const char *str)
462 {
463 pending_malloc_warning = str;
464 }
465
466
467 /* Display an already-pending malloc warning. */
468
469 void
470 display_malloc_warning (void)
471 {
472 call3 (intern ("display-warning"),
473 intern ("alloc"),
474 build_string (pending_malloc_warning),
475 intern ("emergency"));
476 pending_malloc_warning = 0;
477 }
478 \f
479 /* Called if we can't allocate relocatable space for a buffer. */
480
481 void
482 buffer_memory_full (ptrdiff_t nbytes)
483 {
484 /* If buffers use the relocating allocator, no need to free
485 spare_memory, because we may have plenty of malloc space left
486 that we could get, and if we don't, the malloc that fails will
487 itself cause spare_memory to be freed. If buffers don't use the
488 relocating allocator, treat this like any other failing
489 malloc. */
490
491 #ifndef REL_ALLOC
492 memory_full (nbytes);
493 #else
494 /* This used to call error, but if we've run out of memory, we could
495 get infinite recursion trying to build the string. */
496 xsignal (Qnil, Vmemory_signal_data);
497 #endif
498 }
499
500 /* A common multiple of the positive integers A and B. Ideally this
501 would be the least common multiple, but there's no way to do that
502 as a constant expression in C, so do the best that we can easily do. */
503 #define COMMON_MULTIPLE(a, b) \
504 ((a) % (b) == 0 ? (a) : (b) % (a) == 0 ? (b) : (a) * (b))
505
506 #ifndef XMALLOC_OVERRUN_CHECK
507 #define XMALLOC_OVERRUN_CHECK_OVERHEAD 0
508 #else
509
510 /* Check for overrun in malloc'ed buffers by wrapping a header and trailer
511 around each block.
512
513 The header consists of XMALLOC_OVERRUN_CHECK_SIZE fixed bytes
514 followed by XMALLOC_OVERRUN_SIZE_SIZE bytes containing the original
515 block size in little-endian order. The trailer consists of
516 XMALLOC_OVERRUN_CHECK_SIZE fixed bytes.
517
518 The header is used to detect whether this block has been allocated
519 through these functions, as some low-level libc functions may
520 bypass the malloc hooks. */
521
522 #define XMALLOC_OVERRUN_CHECK_SIZE 16
523 #define XMALLOC_OVERRUN_CHECK_OVERHEAD \
524 (2 * XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE)
525
526 /* Define XMALLOC_OVERRUN_SIZE_SIZE so that (1) it's large enough to
527 hold a size_t value and (2) the header size is a multiple of the
528 alignment that Emacs needs for C types and for USE_LSB_TAG. */
529 #define XMALLOC_BASE_ALIGNMENT alignof (max_align_t)
530
531 #if USE_LSB_TAG
532 # define XMALLOC_HEADER_ALIGNMENT \
533 COMMON_MULTIPLE (GCALIGNMENT, XMALLOC_BASE_ALIGNMENT)
534 #else
535 # define XMALLOC_HEADER_ALIGNMENT XMALLOC_BASE_ALIGNMENT
536 #endif
537 #define XMALLOC_OVERRUN_SIZE_SIZE \
538 (((XMALLOC_OVERRUN_CHECK_SIZE + sizeof (size_t) \
539 + XMALLOC_HEADER_ALIGNMENT - 1) \
540 / XMALLOC_HEADER_ALIGNMENT * XMALLOC_HEADER_ALIGNMENT) \
541 - XMALLOC_OVERRUN_CHECK_SIZE)
542
543 static char const xmalloc_overrun_check_header[XMALLOC_OVERRUN_CHECK_SIZE] =
544 { '\x9a', '\x9b', '\xae', '\xaf',
545 '\xbf', '\xbe', '\xce', '\xcf',
546 '\xea', '\xeb', '\xec', '\xed',
547 '\xdf', '\xde', '\x9c', '\x9d' };
548
549 static char const xmalloc_overrun_check_trailer[XMALLOC_OVERRUN_CHECK_SIZE] =
550 { '\xaa', '\xab', '\xac', '\xad',
551 '\xba', '\xbb', '\xbc', '\xbd',
552 '\xca', '\xcb', '\xcc', '\xcd',
553 '\xda', '\xdb', '\xdc', '\xdd' };
554
555 /* Insert and extract the block size in the header. */
556
557 static void
558 xmalloc_put_size (unsigned char *ptr, size_t size)
559 {
560 int i;
561 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
562 {
563 *--ptr = size & ((1 << CHAR_BIT) - 1);
564 size >>= CHAR_BIT;
565 }
566 }
567
568 static size_t
569 xmalloc_get_size (unsigned char *ptr)
570 {
571 size_t size = 0;
572 int i;
573 ptr -= XMALLOC_OVERRUN_SIZE_SIZE;
574 for (i = 0; i < XMALLOC_OVERRUN_SIZE_SIZE; i++)
575 {
576 size <<= CHAR_BIT;
577 size += *ptr++;
578 }
579 return size;
580 }
581
582
583 /* Like malloc, but wraps allocated block with header and trailer. */
584
585 static void *
586 overrun_check_malloc (size_t size)
587 {
588 register unsigned char *val;
589 if (SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD < size)
590 emacs_abort ();
591
592 val = malloc (size + XMALLOC_OVERRUN_CHECK_OVERHEAD);
593 if (val)
594 {
595 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
596 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
597 xmalloc_put_size (val, size);
598 memcpy (val + size, xmalloc_overrun_check_trailer,
599 XMALLOC_OVERRUN_CHECK_SIZE);
600 }
601 return val;
602 }
603
604
605 /* Like realloc, but checks old block for overrun, and wraps new block
606 with header and trailer. */
607
608 static void *
609 overrun_check_realloc (void *block, size_t size)
610 {
611 register unsigned char *val = (unsigned char *) block;
612 if (SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD < size)
613 emacs_abort ();
614
615 if (val
616 && memcmp (xmalloc_overrun_check_header,
617 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
618 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
619 {
620 size_t osize = xmalloc_get_size (val);
621 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
622 XMALLOC_OVERRUN_CHECK_SIZE))
623 emacs_abort ();
624 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
625 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
626 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
627 }
628
629 val = realloc (val, size + XMALLOC_OVERRUN_CHECK_OVERHEAD);
630
631 if (val)
632 {
633 memcpy (val, xmalloc_overrun_check_header, XMALLOC_OVERRUN_CHECK_SIZE);
634 val += XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
635 xmalloc_put_size (val, size);
636 memcpy (val + size, xmalloc_overrun_check_trailer,
637 XMALLOC_OVERRUN_CHECK_SIZE);
638 }
639 return val;
640 }
641
642 /* Like free, but checks block for overrun. */
643
644 static void
645 overrun_check_free (void *block)
646 {
647 unsigned char *val = (unsigned char *) block;
648
649 if (val
650 && memcmp (xmalloc_overrun_check_header,
651 val - XMALLOC_OVERRUN_CHECK_SIZE - XMALLOC_OVERRUN_SIZE_SIZE,
652 XMALLOC_OVERRUN_CHECK_SIZE) == 0)
653 {
654 size_t osize = xmalloc_get_size (val);
655 if (memcmp (xmalloc_overrun_check_trailer, val + osize,
656 XMALLOC_OVERRUN_CHECK_SIZE))
657 emacs_abort ();
658 #ifdef XMALLOC_CLEAR_FREE_MEMORY
659 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
660 memset (val, 0xff, osize + XMALLOC_OVERRUN_CHECK_OVERHEAD);
661 #else
662 memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
663 val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
664 memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
665 #endif
666 }
667
668 free (val);
669 }
670
671 #undef malloc
672 #undef realloc
673 #undef free
674 #define malloc overrun_check_malloc
675 #define realloc overrun_check_realloc
676 #define free overrun_check_free
677 #endif
678
679 /* If compiled with XMALLOC_BLOCK_INPUT_CHECK, define a symbol
680 BLOCK_INPUT_IN_MEMORY_ALLOCATORS that is visible to the debugger.
681 If that variable is set, block input while in one of Emacs's memory
682 allocation functions. There should be no need for this debugging
683 option, since signal handlers do not allocate memory, but Emacs
684 formerly allocated memory in signal handlers and this compile-time
685 option remains as a way to help debug the issue should it rear its
686 ugly head again. */
687 #ifdef XMALLOC_BLOCK_INPUT_CHECK
688 bool block_input_in_memory_allocators EXTERNALLY_VISIBLE;
689 static void
690 malloc_block_input (void)
691 {
692 if (block_input_in_memory_allocators)
693 block_input ();
694 }
695 static void
696 malloc_unblock_input (void)
697 {
698 if (block_input_in_memory_allocators)
699 unblock_input ();
700 }
701 # define MALLOC_BLOCK_INPUT malloc_block_input ()
702 # define MALLOC_UNBLOCK_INPUT malloc_unblock_input ()
703 #else
704 # define MALLOC_BLOCK_INPUT ((void) 0)
705 # define MALLOC_UNBLOCK_INPUT ((void) 0)
706 #endif
707
708 #define MALLOC_PROBE(size) \
709 do { \
710 if (profiler_memory_running) \
711 malloc_probe (size); \
712 } while (0)
713
714
715 /* Like malloc but check for no memory and block interrupt input.. */
716
717 void *
718 xmalloc (size_t size)
719 {
720 void *val;
721
722 MALLOC_BLOCK_INPUT;
723 val = malloc (size);
724 MALLOC_UNBLOCK_INPUT;
725
726 if (!val && size)
727 memory_full (size);
728 MALLOC_PROBE (size);
729 return val;
730 }
731
732 /* Like the above, but zeroes out the memory just allocated. */
733
734 void *
735 xzalloc (size_t size)
736 {
737 void *val;
738
739 MALLOC_BLOCK_INPUT;
740 val = malloc (size);
741 MALLOC_UNBLOCK_INPUT;
742
743 if (!val && size)
744 memory_full (size);
745 memset (val, 0, size);
746 MALLOC_PROBE (size);
747 return val;
748 }
749
750 /* Like realloc but check for no memory and block interrupt input.. */
751
752 void *
753 xrealloc (void *block, size_t size)
754 {
755 void *val;
756
757 MALLOC_BLOCK_INPUT;
758 /* We must call malloc explicitly when BLOCK is 0, since some
759 reallocs don't do this. */
760 if (! block)
761 val = malloc (size);
762 else
763 val = realloc (block, size);
764 MALLOC_UNBLOCK_INPUT;
765
766 if (!val && size)
767 memory_full (size);
768 MALLOC_PROBE (size);
769 return val;
770 }
771
772
773 /* Like free but block interrupt input. */
774
775 void
776 xfree (void *block)
777 {
778 if (!block)
779 return;
780 MALLOC_BLOCK_INPUT;
781 free (block);
782 MALLOC_UNBLOCK_INPUT;
783 /* We don't call refill_memory_reserve here
784 because in practice the call in r_alloc_free seems to suffice. */
785 }
786
787
788 /* Other parts of Emacs pass large int values to allocator functions
789 expecting ptrdiff_t. This is portable in practice, but check it to
790 be safe. */
791 verify (INT_MAX <= PTRDIFF_MAX);
792
793
794 /* Allocate an array of NITEMS items, each of size ITEM_SIZE.
795 Signal an error on memory exhaustion, and block interrupt input. */
796
797 void *
798 xnmalloc (ptrdiff_t nitems, ptrdiff_t item_size)
799 {
800 eassert (0 <= nitems && 0 < item_size);
801 if (min (PTRDIFF_MAX, SIZE_MAX) / item_size < nitems)
802 memory_full (SIZE_MAX);
803 return xmalloc (nitems * item_size);
804 }
805
806
807 /* Reallocate an array PA to make it of NITEMS items, each of size ITEM_SIZE.
808 Signal an error on memory exhaustion, and block interrupt input. */
809
810 void *
811 xnrealloc (void *pa, ptrdiff_t nitems, ptrdiff_t item_size)
812 {
813 eassert (0 <= nitems && 0 < item_size);
814 if (min (PTRDIFF_MAX, SIZE_MAX) / item_size < nitems)
815 memory_full (SIZE_MAX);
816 return xrealloc (pa, nitems * item_size);
817 }
818
819
820 /* Grow PA, which points to an array of *NITEMS items, and return the
821 location of the reallocated array, updating *NITEMS to reflect its
822 new size. The new array will contain at least NITEMS_INCR_MIN more
823 items, but will not contain more than NITEMS_MAX items total.
824 ITEM_SIZE is the size of each item, in bytes.
825
826 ITEM_SIZE and NITEMS_INCR_MIN must be positive. *NITEMS must be
827 nonnegative. If NITEMS_MAX is -1, it is treated as if it were
828 infinity.
829
830 If PA is null, then allocate a new array instead of reallocating
831 the old one.
832
833 Block interrupt input as needed. If memory exhaustion occurs, set
834 *NITEMS to zero if PA is null, and signal an error (i.e., do not
835 return).
836
837 Thus, to grow an array A without saving its old contents, do
838 { xfree (A); A = NULL; A = xpalloc (NULL, &AITEMS, ...); }.
839 The A = NULL avoids a dangling pointer if xpalloc exhausts memory
840 and signals an error, and later this code is reexecuted and
841 attempts to free A. */
842
843 void *
844 xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
845 ptrdiff_t nitems_max, ptrdiff_t item_size)
846 {
847 /* The approximate size to use for initial small allocation
848 requests. This is the largest "small" request for the GNU C
849 library malloc. */
850 enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
851
852 /* If the array is tiny, grow it to about (but no greater than)
853 DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%. */
854 ptrdiff_t n = *nitems;
855 ptrdiff_t tiny_max = DEFAULT_MXFAST / item_size - n;
856 ptrdiff_t half_again = n >> 1;
857 ptrdiff_t incr_estimate = max (tiny_max, half_again);
858
859 /* Adjust the increment according to three constraints: NITEMS_INCR_MIN,
860 NITEMS_MAX, and what the C language can represent safely. */
861 ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / item_size;
862 ptrdiff_t n_max = (0 <= nitems_max && nitems_max < C_language_max
863 ? nitems_max : C_language_max);
864 ptrdiff_t nitems_incr_max = n_max - n;
865 ptrdiff_t incr = max (nitems_incr_min, min (incr_estimate, nitems_incr_max));
866
867 eassert (0 < item_size && 0 < nitems_incr_min && 0 <= n && -1 <= nitems_max);
868 if (! pa)
869 *nitems = 0;
870 if (nitems_incr_max < incr)
871 memory_full (SIZE_MAX);
872 n += incr;
873 pa = xrealloc (pa, n * item_size);
874 *nitems = n;
875 return pa;
876 }
877
878
879 /* Like strdup, but uses xmalloc. */
880
881 char *
882 xstrdup (const char *s)
883 {
884 ptrdiff_t size;
885 eassert (s);
886 size = strlen (s) + 1;
887 return memcpy (xmalloc (size), s, size);
888 }
889
890 /* Like above, but duplicates Lisp string to C string. */
891
892 char *
893 xlispstrdup (Lisp_Object string)
894 {
895 ptrdiff_t size = SBYTES (string) + 1;
896 return memcpy (xmalloc (size), SSDATA (string), size);
897 }
898
899 /* Assign to *PTR a copy of STRING, freeing any storage *PTR formerly
900 pointed to. If STRING is null, assign it without copying anything.
901 Allocate before freeing, to avoid a dangling pointer if allocation
902 fails. */
903
904 void
905 dupstring (char **ptr, char const *string)
906 {
907 char *old = *ptr;
908 *ptr = string ? xstrdup (string) : 0;
909 xfree (old);
910 }
911
912
913 /* Like putenv, but (1) use the equivalent of xmalloc and (2) the
914 argument is a const pointer. */
915
916 void
917 xputenv (char const *string)
918 {
919 if (putenv ((char *) string) != 0)
920 memory_full (0);
921 }
922
923 /* Return a newly allocated memory block of SIZE bytes, remembering
924 to free it when unwinding. */
925 void *
926 record_xmalloc (size_t size)
927 {
928 void *p = xmalloc (size);
929 record_unwind_protect_ptr (xfree, p);
930 return p;
931 }
932
933
934 /* Like malloc but used for allocating Lisp data. NBYTES is the
935 number of bytes to allocate, TYPE describes the intended use of the
936 allocated memory block (for strings, for conses, ...). */
937
938 #if ! USE_LSB_TAG
939 void *lisp_malloc_loser EXTERNALLY_VISIBLE;
940 #endif
941
942 static void *
943 lisp_malloc (size_t nbytes, enum mem_type type)
944 {
945 register void *val;
946
947 MALLOC_BLOCK_INPUT;
948
949 #ifdef GC_MALLOC_CHECK
950 allocated_mem_type = type;
951 #endif
952
953 val = malloc (nbytes);
954
955 #if ! USE_LSB_TAG
956 /* If the memory just allocated cannot be addressed thru a Lisp
957 object's pointer, and it needs to be,
958 that's equivalent to running out of memory. */
959 if (val && type != MEM_TYPE_NON_LISP)
960 {
961 Lisp_Object tem;
962 XSETCONS (tem, (char *) val + nbytes - 1);
963 if ((char *) XCONS (tem) != (char *) val + nbytes - 1)
964 {
965 lisp_malloc_loser = val;
966 free (val);
967 val = 0;
968 }
969 }
970 #endif
971
972 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
973 if (val && type != MEM_TYPE_NON_LISP)
974 mem_insert (val, (char *) val + nbytes, type);
975 #endif
976
977 MALLOC_UNBLOCK_INPUT;
978 if (!val && nbytes)
979 memory_full (nbytes);
980 MALLOC_PROBE (nbytes);
981 return val;
982 }
983
984 /* Free BLOCK. This must be called to free memory allocated with a
985 call to lisp_malloc. */
986
987 static void
988 lisp_free (void *block)
989 {
990 MALLOC_BLOCK_INPUT;
991 free (block);
992 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
993 mem_delete (mem_find (block));
994 #endif
995 MALLOC_UNBLOCK_INPUT;
996 }
997
998 /***** Allocation of aligned blocks of memory to store Lisp data. *****/
999
1000 /* The entry point is lisp_align_malloc which returns blocks of at most
1001 BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */
1002
1003 /* Use aligned_alloc if it or a simple substitute is available.
1004 Address sanitization breaks aligned allocation, as of gcc 4.8.2 and
1005 clang 3.3 anyway. */
1006
1007 #if ! ADDRESS_SANITIZER
1008 # if !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC && !defined HYBRID_MALLOC
1009 # define USE_ALIGNED_ALLOC 1
1010 /* Defined in gmalloc.c. */
1011 void *aligned_alloc (size_t, size_t);
1012 # elif defined HYBRID_MALLOC
1013 # if defined ALIGNED_ALLOC || defined HAVE_POSIX_MEMALIGN
1014 # define USE_ALIGNED_ALLOC 1
1015 # define aligned_alloc hybrid_aligned_alloc
1016 /* Defined in gmalloc.c. */
1017 void *aligned_alloc (size_t, size_t);
1018 # endif
1019 # elif defined HAVE_ALIGNED_ALLOC
1020 # define USE_ALIGNED_ALLOC 1
1021 # elif defined HAVE_POSIX_MEMALIGN
1022 # define USE_ALIGNED_ALLOC 1
1023 static void *
1024 aligned_alloc (size_t alignment, size_t size)
1025 {
1026 void *p;
1027 return posix_memalign (&p, alignment, size) == 0 ? p : 0;
1028 }
1029 # endif
1030 #endif
1031
1032 /* BLOCK_ALIGN has to be a power of 2. */
1033 #define BLOCK_ALIGN (1 << 10)
1034
1035 /* Padding to leave at the end of a malloc'd block. This is to give
1036 malloc a chance to minimize the amount of memory wasted to alignment.
1037 It should be tuned to the particular malloc library used.
1038 On glibc-2.3.2, malloc never tries to align, so a padding of 0 is best.
1039 aligned_alloc on the other hand would ideally prefer a value of 4
1040 because otherwise, there's 1020 bytes wasted between each ablocks.
1041 In Emacs, testing shows that those 1020 can most of the time be
1042 efficiently used by malloc to place other objects, so a value of 0 can
1043 still preferable unless you have a lot of aligned blocks and virtually
1044 nothing else. */
1045 #define BLOCK_PADDING 0
1046 #define BLOCK_BYTES \
1047 (BLOCK_ALIGN - sizeof (struct ablocks *) - BLOCK_PADDING)
1048
1049 /* Internal data structures and constants. */
1050
1051 #define ABLOCKS_SIZE 16
1052
1053 /* An aligned block of memory. */
1054 struct ablock
1055 {
1056 union
1057 {
1058 char payload[BLOCK_BYTES];
1059 struct ablock *next_free;
1060 } x;
1061 /* `abase' is the aligned base of the ablocks. */
1062 /* It is overloaded to hold the virtual `busy' field that counts
1063 the number of used ablock in the parent ablocks.
1064 The first ablock has the `busy' field, the others have the `abase'
1065 field. To tell the difference, we assume that pointers will have
1066 integer values larger than 2 * ABLOCKS_SIZE. The lowest bit of `busy'
1067 is used to tell whether the real base of the parent ablocks is `abase'
1068 (if not, the word before the first ablock holds a pointer to the
1069 real base). */
1070 struct ablocks *abase;
1071 /* The padding of all but the last ablock is unused. The padding of
1072 the last ablock in an ablocks is not allocated. */
1073 #if BLOCK_PADDING
1074 char padding[BLOCK_PADDING];
1075 #endif
1076 };
1077
1078 /* A bunch of consecutive aligned blocks. */
1079 struct ablocks
1080 {
1081 struct ablock blocks[ABLOCKS_SIZE];
1082 };
1083
1084 /* Size of the block requested from malloc or aligned_alloc. */
1085 #define ABLOCKS_BYTES (sizeof (struct ablocks) - BLOCK_PADDING)
1086
1087 #define ABLOCK_ABASE(block) \
1088 (((uintptr_t) (block)->abase) <= (1 + 2 * ABLOCKS_SIZE) \
1089 ? (struct ablocks *)(block) \
1090 : (block)->abase)
1091
1092 /* Virtual `busy' field. */
1093 #define ABLOCKS_BUSY(abase) ((abase)->blocks[0].abase)
1094
1095 /* Pointer to the (not necessarily aligned) malloc block. */
1096 #ifdef USE_ALIGNED_ALLOC
1097 #define ABLOCKS_BASE(abase) (abase)
1098 #else
1099 #define ABLOCKS_BASE(abase) \
1100 (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void **)abase)[-1])
1101 #endif
1102
1103 /* The list of free ablock. */
1104 static struct ablock *free_ablock;
1105
1106 /* Allocate an aligned block of nbytes.
1107 Alignment is on a multiple of BLOCK_ALIGN and `nbytes' has to be
1108 smaller or equal to BLOCK_BYTES. */
1109 static void *
1110 lisp_align_malloc (size_t nbytes, enum mem_type type)
1111 {
1112 void *base, *val;
1113 struct ablocks *abase;
1114
1115 eassert (nbytes <= BLOCK_BYTES);
1116
1117 MALLOC_BLOCK_INPUT;
1118
1119 #ifdef GC_MALLOC_CHECK
1120 allocated_mem_type = type;
1121 #endif
1122
1123 if (!free_ablock)
1124 {
1125 int i;
1126 intptr_t aligned; /* int gets warning casting to 64-bit pointer. */
1127
1128 #ifdef DOUG_LEA_MALLOC
1129 if (!mmap_lisp_allowed_p ())
1130 mallopt (M_MMAP_MAX, 0);
1131 #endif
1132
1133 #ifdef USE_ALIGNED_ALLOC
1134 abase = base = aligned_alloc (BLOCK_ALIGN, ABLOCKS_BYTES);
1135 #else
1136 base = malloc (ABLOCKS_BYTES);
1137 abase = ALIGN (base, BLOCK_ALIGN);
1138 #endif
1139
1140 if (base == 0)
1141 {
1142 MALLOC_UNBLOCK_INPUT;
1143 memory_full (ABLOCKS_BYTES);
1144 }
1145
1146 aligned = (base == abase);
1147 if (!aligned)
1148 ((void **) abase)[-1] = base;
1149
1150 #ifdef DOUG_LEA_MALLOC
1151 if (!mmap_lisp_allowed_p ())
1152 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1153 #endif
1154
1155 #if ! USE_LSB_TAG
1156 /* If the memory just allocated cannot be addressed thru a Lisp
1157 object's pointer, and it needs to be, that's equivalent to
1158 running out of memory. */
1159 if (type != MEM_TYPE_NON_LISP)
1160 {
1161 Lisp_Object tem;
1162 char *end = (char *) base + ABLOCKS_BYTES - 1;
1163 XSETCONS (tem, end);
1164 if ((char *) XCONS (tem) != end)
1165 {
1166 lisp_malloc_loser = base;
1167 free (base);
1168 MALLOC_UNBLOCK_INPUT;
1169 memory_full (SIZE_MAX);
1170 }
1171 }
1172 #endif
1173
1174 /* Initialize the blocks and put them on the free list.
1175 If `base' was not properly aligned, we can't use the last block. */
1176 for (i = 0; i < (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1); i++)
1177 {
1178 abase->blocks[i].abase = abase;
1179 abase->blocks[i].x.next_free = free_ablock;
1180 free_ablock = &abase->blocks[i];
1181 }
1182 ABLOCKS_BUSY (abase) = (struct ablocks *) aligned;
1183
1184 eassert (0 == ((uintptr_t) abase) % BLOCK_ALIGN);
1185 eassert (ABLOCK_ABASE (&abase->blocks[3]) == abase); /* 3 is arbitrary */
1186 eassert (ABLOCK_ABASE (&abase->blocks[0]) == abase);
1187 eassert (ABLOCKS_BASE (abase) == base);
1188 eassert (aligned == (intptr_t) ABLOCKS_BUSY (abase));
1189 }
1190
1191 abase = ABLOCK_ABASE (free_ablock);
1192 ABLOCKS_BUSY (abase)
1193 = (struct ablocks *) (2 + (intptr_t) ABLOCKS_BUSY (abase));
1194 val = free_ablock;
1195 free_ablock = free_ablock->x.next_free;
1196
1197 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
1198 if (type != MEM_TYPE_NON_LISP)
1199 mem_insert (val, (char *) val + nbytes, type);
1200 #endif
1201
1202 MALLOC_UNBLOCK_INPUT;
1203
1204 MALLOC_PROBE (nbytes);
1205
1206 eassert (0 == ((uintptr_t) val) % BLOCK_ALIGN);
1207 return val;
1208 }
1209
1210 static void
1211 lisp_align_free (void *block)
1212 {
1213 struct ablock *ablock = block;
1214 struct ablocks *abase = ABLOCK_ABASE (ablock);
1215
1216 MALLOC_BLOCK_INPUT;
1217 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
1218 mem_delete (mem_find (block));
1219 #endif
1220 /* Put on free list. */
1221 ablock->x.next_free = free_ablock;
1222 free_ablock = ablock;
1223 /* Update busy count. */
1224 ABLOCKS_BUSY (abase)
1225 = (struct ablocks *) (-2 + (intptr_t) ABLOCKS_BUSY (abase));
1226
1227 if (2 > (intptr_t) ABLOCKS_BUSY (abase))
1228 { /* All the blocks are free. */
1229 int i = 0, aligned = (intptr_t) ABLOCKS_BUSY (abase);
1230 struct ablock **tem = &free_ablock;
1231 struct ablock *atop = &abase->blocks[aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1];
1232
1233 while (*tem)
1234 {
1235 if (*tem >= (struct ablock *) abase && *tem < atop)
1236 {
1237 i++;
1238 *tem = (*tem)->x.next_free;
1239 }
1240 else
1241 tem = &(*tem)->x.next_free;
1242 }
1243 eassert ((aligned & 1) == aligned);
1244 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1245 #ifdef USE_POSIX_MEMALIGN
1246 eassert ((uintptr_t) ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1247 #endif
1248 free (ABLOCKS_BASE (abase));
1249 }
1250 MALLOC_UNBLOCK_INPUT;
1251 }
1252
1253 \f
1254 /***********************************************************************
1255 Interval Allocation
1256 ***********************************************************************/
1257
1258 /* Number of intervals allocated in an interval_block structure.
1259 The 1020 is 1024 minus malloc overhead. */
1260
1261 #define INTERVAL_BLOCK_SIZE \
1262 ((1020 - sizeof (struct interval_block *)) / sizeof (struct interval))
1263
1264 /* Intervals are allocated in chunks in the form of an interval_block
1265 structure. */
1266
1267 struct interval_block
1268 {
1269 /* Place `intervals' first, to preserve alignment. */
1270 struct interval intervals[INTERVAL_BLOCK_SIZE];
1271 struct interval_block *next;
1272 };
1273
1274 /* Current interval block. Its `next' pointer points to older
1275 blocks. */
1276
1277 static struct interval_block *interval_block;
1278
1279 /* Index in interval_block above of the next unused interval
1280 structure. */
1281
1282 static int interval_block_index = INTERVAL_BLOCK_SIZE;
1283
1284 /* Number of free and live intervals. */
1285
1286 static EMACS_INT total_free_intervals, total_intervals;
1287
1288 /* List of free intervals. */
1289
1290 static INTERVAL interval_free_list;
1291
1292 /* Return a new interval. */
1293
1294 INTERVAL
1295 make_interval (void)
1296 {
1297 INTERVAL val;
1298
1299 MALLOC_BLOCK_INPUT;
1300
1301 if (interval_free_list)
1302 {
1303 val = interval_free_list;
1304 interval_free_list = INTERVAL_PARENT (interval_free_list);
1305 }
1306 else
1307 {
1308 if (interval_block_index == INTERVAL_BLOCK_SIZE)
1309 {
1310 struct interval_block *newi
1311 = lisp_malloc (sizeof *newi, MEM_TYPE_NON_LISP);
1312
1313 newi->next = interval_block;
1314 interval_block = newi;
1315 interval_block_index = 0;
1316 total_free_intervals += INTERVAL_BLOCK_SIZE;
1317 }
1318 val = &interval_block->intervals[interval_block_index++];
1319 }
1320
1321 MALLOC_UNBLOCK_INPUT;
1322
1323 consing_since_gc += sizeof (struct interval);
1324 intervals_consed++;
1325 total_free_intervals--;
1326 RESET_INTERVAL (val);
1327 val->gcmarkbit = 0;
1328 return val;
1329 }
1330
1331
1332 /* Mark Lisp objects in interval I. */
1333
1334 static void
1335 mark_interval (register INTERVAL i, Lisp_Object dummy)
1336 {
1337 /* Intervals should never be shared. So, if extra internal checking is
1338 enabled, GC aborts if it seems to have visited an interval twice. */
1339 eassert (!i->gcmarkbit);
1340 i->gcmarkbit = 1;
1341 mark_object (i->plist);
1342 }
1343
1344 /* Mark the interval tree rooted in I. */
1345
1346 #define MARK_INTERVAL_TREE(i) \
1347 do { \
1348 if (i && !i->gcmarkbit) \
1349 traverse_intervals_noorder (i, mark_interval, Qnil); \
1350 } while (0)
1351
1352 /***********************************************************************
1353 String Allocation
1354 ***********************************************************************/
1355
1356 /* Lisp_Strings are allocated in string_block structures. When a new
1357 string_block is allocated, all the Lisp_Strings it contains are
1358 added to a free-list string_free_list. When a new Lisp_String is
1359 needed, it is taken from that list. During the sweep phase of GC,
1360 string_blocks that are entirely free are freed, except two which
1361 we keep.
1362
1363 String data is allocated from sblock structures. Strings larger
1364 than LARGE_STRING_BYTES, get their own sblock, data for smaller
1365 strings is sub-allocated out of sblocks of size SBLOCK_SIZE.
1366
1367 Sblocks consist internally of sdata structures, one for each
1368 Lisp_String. The sdata structure points to the Lisp_String it
1369 belongs to. The Lisp_String points back to the `u.data' member of
1370 its sdata structure.
1371
1372 When a Lisp_String is freed during GC, it is put back on
1373 string_free_list, and its `data' member and its sdata's `string'
1374 pointer is set to null. The size of the string is recorded in the
1375 `n.nbytes' member of the sdata. So, sdata structures that are no
1376 longer used, can be easily recognized, and it's easy to compact the
1377 sblocks of small strings which we do in compact_small_strings. */
1378
1379 /* Size in bytes of an sblock structure used for small strings. This
1380 is 8192 minus malloc overhead. */
1381
1382 #define SBLOCK_SIZE 8188
1383
1384 /* Strings larger than this are considered large strings. String data
1385 for large strings is allocated from individual sblocks. */
1386
1387 #define LARGE_STRING_BYTES 1024
1388
1389 /* The SDATA typedef is a struct or union describing string memory
1390 sub-allocated from an sblock. This is where the contents of Lisp
1391 strings are stored. */
1392
1393 struct sdata
1394 {
1395 /* Back-pointer to the string this sdata belongs to. If null, this
1396 structure is free, and NBYTES (in this structure or in the union below)
1397 contains the string's byte size (the same value that STRING_BYTES
1398 would return if STRING were non-null). If non-null, STRING_BYTES
1399 (STRING) is the size of the data, and DATA contains the string's
1400 contents. */
1401 struct Lisp_String *string;
1402
1403 #ifdef GC_CHECK_STRING_BYTES
1404 ptrdiff_t nbytes;
1405 #endif
1406
1407 unsigned char data[FLEXIBLE_ARRAY_MEMBER];
1408 };
1409
1410 #ifdef GC_CHECK_STRING_BYTES
1411
1412 typedef struct sdata sdata;
1413 #define SDATA_NBYTES(S) (S)->nbytes
1414 #define SDATA_DATA(S) (S)->data
1415
1416 #else
1417
1418 typedef union
1419 {
1420 struct Lisp_String *string;
1421
1422 /* When STRING is nonnull, this union is actually of type 'struct sdata',
1423 which has a flexible array member. However, if implemented by
1424 giving this union a member of type 'struct sdata', the union
1425 could not be the last (flexible) member of 'struct sblock',
1426 because C99 prohibits a flexible array member from having a type
1427 that is itself a flexible array. So, comment this member out here,
1428 but remember that the option's there when using this union. */
1429 #if 0
1430 struct sdata u;
1431 #endif
1432
1433 /* When STRING is null. */
1434 struct
1435 {
1436 struct Lisp_String *string;
1437 ptrdiff_t nbytes;
1438 } n;
1439 } sdata;
1440
1441 #define SDATA_NBYTES(S) (S)->n.nbytes
1442 #define SDATA_DATA(S) ((struct sdata *) (S))->data
1443
1444 #endif /* not GC_CHECK_STRING_BYTES */
1445
1446 enum { SDATA_DATA_OFFSET = offsetof (struct sdata, data) };
1447
1448 /* Structure describing a block of memory which is sub-allocated to
1449 obtain string data memory for strings. Blocks for small strings
1450 are of fixed size SBLOCK_SIZE. Blocks for large strings are made
1451 as large as needed. */
1452
1453 struct sblock
1454 {
1455 /* Next in list. */
1456 struct sblock *next;
1457
1458 /* Pointer to the next free sdata block. This points past the end
1459 of the sblock if there isn't any space left in this block. */
1460 sdata *next_free;
1461
1462 /* String data. */
1463 sdata data[FLEXIBLE_ARRAY_MEMBER];
1464 };
1465
1466 /* Number of Lisp strings in a string_block structure. The 1020 is
1467 1024 minus malloc overhead. */
1468
1469 #define STRING_BLOCK_SIZE \
1470 ((1020 - sizeof (struct string_block *)) / sizeof (struct Lisp_String))
1471
1472 /* Structure describing a block from which Lisp_String structures
1473 are allocated. */
1474
1475 struct string_block
1476 {
1477 /* Place `strings' first, to preserve alignment. */
1478 struct Lisp_String strings[STRING_BLOCK_SIZE];
1479 struct string_block *next;
1480 };
1481
1482 /* Head and tail of the list of sblock structures holding Lisp string
1483 data. We always allocate from current_sblock. The NEXT pointers
1484 in the sblock structures go from oldest_sblock to current_sblock. */
1485
1486 static struct sblock *oldest_sblock, *current_sblock;
1487
1488 /* List of sblocks for large strings. */
1489
1490 static struct sblock *large_sblocks;
1491
1492 /* List of string_block structures. */
1493
1494 static struct string_block *string_blocks;
1495
1496 /* Free-list of Lisp_Strings. */
1497
1498 static struct Lisp_String *string_free_list;
1499
1500 /* Number of live and free Lisp_Strings. */
1501
1502 static EMACS_INT total_strings, total_free_strings;
1503
1504 /* Number of bytes used by live strings. */
1505
1506 static EMACS_INT total_string_bytes;
1507
1508 /* Given a pointer to a Lisp_String S which is on the free-list
1509 string_free_list, return a pointer to its successor in the
1510 free-list. */
1511
1512 #define NEXT_FREE_LISP_STRING(S) (*(struct Lisp_String **) (S))
1513
1514 /* Return a pointer to the sdata structure belonging to Lisp string S.
1515 S must be live, i.e. S->data must not be null. S->data is actually
1516 a pointer to the `u.data' member of its sdata structure; the
1517 structure starts at a constant offset in front of that. */
1518
1519 #define SDATA_OF_STRING(S) ((sdata *) ((S)->data - SDATA_DATA_OFFSET))
1520
1521
1522 #ifdef GC_CHECK_STRING_OVERRUN
1523
1524 /* We check for overrun in string data blocks by appending a small
1525 "cookie" after each allocated string data block, and check for the
1526 presence of this cookie during GC. */
1527
1528 #define GC_STRING_OVERRUN_COOKIE_SIZE 4
1529 static char const string_overrun_cookie[GC_STRING_OVERRUN_COOKIE_SIZE] =
1530 { '\xde', '\xad', '\xbe', '\xef' };
1531
1532 #else
1533 #define GC_STRING_OVERRUN_COOKIE_SIZE 0
1534 #endif
1535
1536 /* Value is the size of an sdata structure large enough to hold NBYTES
1537 bytes of string data. The value returned includes a terminating
1538 NUL byte, the size of the sdata structure, and padding. */
1539
1540 #ifdef GC_CHECK_STRING_BYTES
1541
1542 #define SDATA_SIZE(NBYTES) \
1543 ((SDATA_DATA_OFFSET \
1544 + (NBYTES) + 1 \
1545 + sizeof (ptrdiff_t) - 1) \
1546 & ~(sizeof (ptrdiff_t) - 1))
1547
1548 #else /* not GC_CHECK_STRING_BYTES */
1549
1550 /* The 'max' reserves space for the nbytes union member even when NBYTES + 1 is
1551 less than the size of that member. The 'max' is not needed when
1552 SDATA_DATA_OFFSET is a multiple of sizeof (ptrdiff_t), because then the
1553 alignment code reserves enough space. */
1554
1555 #define SDATA_SIZE(NBYTES) \
1556 ((SDATA_DATA_OFFSET \
1557 + (SDATA_DATA_OFFSET % sizeof (ptrdiff_t) == 0 \
1558 ? NBYTES \
1559 : max (NBYTES, sizeof (ptrdiff_t) - 1)) \
1560 + 1 \
1561 + sizeof (ptrdiff_t) - 1) \
1562 & ~(sizeof (ptrdiff_t) - 1))
1563
1564 #endif /* not GC_CHECK_STRING_BYTES */
1565
1566 /* Extra bytes to allocate for each string. */
1567
1568 #define GC_STRING_EXTRA (GC_STRING_OVERRUN_COOKIE_SIZE)
1569
1570 /* Exact bound on the number of bytes in a string, not counting the
1571 terminating null. A string cannot contain more bytes than
1572 STRING_BYTES_BOUND, nor can it be so long that the size_t
1573 arithmetic in allocate_string_data would overflow while it is
1574 calculating a value to be passed to malloc. */
1575 static ptrdiff_t const STRING_BYTES_MAX =
1576 min (STRING_BYTES_BOUND,
1577 ((SIZE_MAX - XMALLOC_OVERRUN_CHECK_OVERHEAD
1578 - GC_STRING_EXTRA
1579 - offsetof (struct sblock, data)
1580 - SDATA_DATA_OFFSET)
1581 & ~(sizeof (EMACS_INT) - 1)));
1582
1583 /* Initialize string allocation. Called from init_alloc_once. */
1584
1585 static void
1586 init_strings (void)
1587 {
1588 empty_unibyte_string = make_pure_string ("", 0, 0, 0);
1589 empty_multibyte_string = make_pure_string ("", 0, 0, 1);
1590 }
1591
1592
1593 #ifdef GC_CHECK_STRING_BYTES
1594
1595 static int check_string_bytes_count;
1596
1597 /* Like STRING_BYTES, but with debugging check. Can be
1598 called during GC, so pay attention to the mark bit. */
1599
1600 ptrdiff_t
1601 string_bytes (struct Lisp_String *s)
1602 {
1603 ptrdiff_t nbytes =
1604 (s->size_byte < 0 ? s->size & ~ARRAY_MARK_FLAG : s->size_byte);
1605
1606 if (!PURE_POINTER_P (s)
1607 && s->data
1608 && nbytes != SDATA_NBYTES (SDATA_OF_STRING (s)))
1609 emacs_abort ();
1610 return nbytes;
1611 }
1612
1613 /* Check validity of Lisp strings' string_bytes member in B. */
1614
1615 static void
1616 check_sblock (struct sblock *b)
1617 {
1618 sdata *from, *end, *from_end;
1619
1620 end = b->next_free;
1621
1622 for (from = b->data; from < end; from = from_end)
1623 {
1624 /* Compute the next FROM here because copying below may
1625 overwrite data we need to compute it. */
1626 ptrdiff_t nbytes;
1627
1628 /* Check that the string size recorded in the string is the
1629 same as the one recorded in the sdata structure. */
1630 nbytes = SDATA_SIZE (from->string ? string_bytes (from->string)
1631 : SDATA_NBYTES (from));
1632 from_end = (sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
1633 }
1634 }
1635
1636
1637 /* Check validity of Lisp strings' string_bytes member. ALL_P
1638 means check all strings, otherwise check only most
1639 recently allocated strings. Used for hunting a bug. */
1640
1641 static void
1642 check_string_bytes (bool all_p)
1643 {
1644 if (all_p)
1645 {
1646 struct sblock *b;
1647
1648 for (b = large_sblocks; b; b = b->next)
1649 {
1650 struct Lisp_String *s = b->data[0].string;
1651 if (s)
1652 string_bytes (s);
1653 }
1654
1655 for (b = oldest_sblock; b; b = b->next)
1656 check_sblock (b);
1657 }
1658 else if (current_sblock)
1659 check_sblock (current_sblock);
1660 }
1661
1662 #else /* not GC_CHECK_STRING_BYTES */
1663
1664 #define check_string_bytes(all) ((void) 0)
1665
1666 #endif /* GC_CHECK_STRING_BYTES */
1667
1668 #ifdef GC_CHECK_STRING_FREE_LIST
1669
1670 /* Walk through the string free list looking for bogus next pointers.
1671 This may catch buffer overrun from a previous string. */
1672
1673 static void
1674 check_string_free_list (void)
1675 {
1676 struct Lisp_String *s;
1677
1678 /* Pop a Lisp_String off the free-list. */
1679 s = string_free_list;
1680 while (s != NULL)
1681 {
1682 if ((uintptr_t) s < 1024)
1683 emacs_abort ();
1684 s = NEXT_FREE_LISP_STRING (s);
1685 }
1686 }
1687 #else
1688 #define check_string_free_list()
1689 #endif
1690
1691 /* Return a new Lisp_String. */
1692
1693 static struct Lisp_String *
1694 allocate_string (void)
1695 {
1696 struct Lisp_String *s;
1697
1698 MALLOC_BLOCK_INPUT;
1699
1700 /* If the free-list is empty, allocate a new string_block, and
1701 add all the Lisp_Strings in it to the free-list. */
1702 if (string_free_list == NULL)
1703 {
1704 struct string_block *b = lisp_malloc (sizeof *b, MEM_TYPE_STRING);
1705 int i;
1706
1707 b->next = string_blocks;
1708 string_blocks = b;
1709
1710 for (i = STRING_BLOCK_SIZE - 1; i >= 0; --i)
1711 {
1712 s = b->strings + i;
1713 /* Every string on a free list should have NULL data pointer. */
1714 s->data = NULL;
1715 NEXT_FREE_LISP_STRING (s) = string_free_list;
1716 string_free_list = s;
1717 }
1718
1719 total_free_strings += STRING_BLOCK_SIZE;
1720 }
1721
1722 check_string_free_list ();
1723
1724 /* Pop a Lisp_String off the free-list. */
1725 s = string_free_list;
1726 string_free_list = NEXT_FREE_LISP_STRING (s);
1727
1728 MALLOC_UNBLOCK_INPUT;
1729
1730 --total_free_strings;
1731 ++total_strings;
1732 ++strings_consed;
1733 consing_since_gc += sizeof *s;
1734
1735 #ifdef GC_CHECK_STRING_BYTES
1736 if (!noninteractive)
1737 {
1738 if (++check_string_bytes_count == 200)
1739 {
1740 check_string_bytes_count = 0;
1741 check_string_bytes (1);
1742 }
1743 else
1744 check_string_bytes (0);
1745 }
1746 #endif /* GC_CHECK_STRING_BYTES */
1747
1748 return s;
1749 }
1750
1751
1752 /* Set up Lisp_String S for holding NCHARS characters, NBYTES bytes,
1753 plus a NUL byte at the end. Allocate an sdata structure for S, and
1754 set S->data to its `u.data' member. Store a NUL byte at the end of
1755 S->data. Set S->size to NCHARS and S->size_byte to NBYTES. Free
1756 S->data if it was initially non-null. */
1757
1758 void
1759 allocate_string_data (struct Lisp_String *s,
1760 EMACS_INT nchars, EMACS_INT nbytes)
1761 {
1762 sdata *data, *old_data;
1763 struct sblock *b;
1764 ptrdiff_t needed, old_nbytes;
1765
1766 if (STRING_BYTES_MAX < nbytes)
1767 string_overflow ();
1768
1769 /* Determine the number of bytes needed to store NBYTES bytes
1770 of string data. */
1771 needed = SDATA_SIZE (nbytes);
1772 if (s->data)
1773 {
1774 old_data = SDATA_OF_STRING (s);
1775 old_nbytes = STRING_BYTES (s);
1776 }
1777 else
1778 old_data = NULL;
1779
1780 MALLOC_BLOCK_INPUT;
1781
1782 if (nbytes > LARGE_STRING_BYTES)
1783 {
1784 size_t size = offsetof (struct sblock, data) + needed;
1785
1786 #ifdef DOUG_LEA_MALLOC
1787 if (!mmap_lisp_allowed_p ())
1788 mallopt (M_MMAP_MAX, 0);
1789 #endif
1790
1791 b = lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
1792
1793 #ifdef DOUG_LEA_MALLOC
1794 if (!mmap_lisp_allowed_p ())
1795 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1796 #endif
1797
1798 b->next_free = b->data;
1799 b->data[0].string = NULL;
1800 b->next = large_sblocks;
1801 large_sblocks = b;
1802 }
1803 else if (current_sblock == NULL
1804 || (((char *) current_sblock + SBLOCK_SIZE
1805 - (char *) current_sblock->next_free)
1806 < (needed + GC_STRING_EXTRA)))
1807 {
1808 /* Not enough room in the current sblock. */
1809 b = lisp_malloc (SBLOCK_SIZE, MEM_TYPE_NON_LISP);
1810 b->next_free = b->data;
1811 b->data[0].string = NULL;
1812 b->next = NULL;
1813
1814 if (current_sblock)
1815 current_sblock->next = b;
1816 else
1817 oldest_sblock = b;
1818 current_sblock = b;
1819 }
1820 else
1821 b = current_sblock;
1822
1823 data = b->next_free;
1824 b->next_free = (sdata *) ((char *) data + needed + GC_STRING_EXTRA);
1825
1826 MALLOC_UNBLOCK_INPUT;
1827
1828 data->string = s;
1829 s->data = SDATA_DATA (data);
1830 #ifdef GC_CHECK_STRING_BYTES
1831 SDATA_NBYTES (data) = nbytes;
1832 #endif
1833 s->size = nchars;
1834 s->size_byte = nbytes;
1835 s->data[nbytes] = '\0';
1836 #ifdef GC_CHECK_STRING_OVERRUN
1837 memcpy ((char *) data + needed, string_overrun_cookie,
1838 GC_STRING_OVERRUN_COOKIE_SIZE);
1839 #endif
1840
1841 /* Note that Faset may call to this function when S has already data
1842 assigned. In this case, mark data as free by setting it's string
1843 back-pointer to null, and record the size of the data in it. */
1844 if (old_data)
1845 {
1846 SDATA_NBYTES (old_data) = old_nbytes;
1847 old_data->string = NULL;
1848 }
1849
1850 consing_since_gc += needed;
1851 }
1852
1853
1854 /* Sweep and compact strings. */
1855
1856 NO_INLINE /* For better stack traces */
1857 static void
1858 sweep_strings (void)
1859 {
1860 struct string_block *b, *next;
1861 struct string_block *live_blocks = NULL;
1862
1863 string_free_list = NULL;
1864 total_strings = total_free_strings = 0;
1865 total_string_bytes = 0;
1866
1867 /* Scan strings_blocks, free Lisp_Strings that aren't marked. */
1868 for (b = string_blocks; b; b = next)
1869 {
1870 int i, nfree = 0;
1871 struct Lisp_String *free_list_before = string_free_list;
1872
1873 next = b->next;
1874
1875 for (i = 0; i < STRING_BLOCK_SIZE; ++i)
1876 {
1877 struct Lisp_String *s = b->strings + i;
1878
1879 if (s->data)
1880 {
1881 /* String was not on free-list before. */
1882 if (STRING_MARKED_P (s))
1883 {
1884 /* String is live; unmark it and its intervals. */
1885 UNMARK_STRING (s);
1886
1887 /* Do not use string_(set|get)_intervals here. */
1888 s->intervals = balance_intervals (s->intervals);
1889
1890 ++total_strings;
1891 total_string_bytes += STRING_BYTES (s);
1892 }
1893 else
1894 {
1895 /* String is dead. Put it on the free-list. */
1896 sdata *data = SDATA_OF_STRING (s);
1897
1898 /* Save the size of S in its sdata so that we know
1899 how large that is. Reset the sdata's string
1900 back-pointer so that we know it's free. */
1901 #ifdef GC_CHECK_STRING_BYTES
1902 if (string_bytes (s) != SDATA_NBYTES (data))
1903 emacs_abort ();
1904 #else
1905 data->n.nbytes = STRING_BYTES (s);
1906 #endif
1907 data->string = NULL;
1908
1909 /* Reset the strings's `data' member so that we
1910 know it's free. */
1911 s->data = NULL;
1912
1913 /* Put the string on the free-list. */
1914 NEXT_FREE_LISP_STRING (s) = string_free_list;
1915 string_free_list = s;
1916 ++nfree;
1917 }
1918 }
1919 else
1920 {
1921 /* S was on the free-list before. Put it there again. */
1922 NEXT_FREE_LISP_STRING (s) = string_free_list;
1923 string_free_list = s;
1924 ++nfree;
1925 }
1926 }
1927
1928 /* Free blocks that contain free Lisp_Strings only, except
1929 the first two of them. */
1930 if (nfree == STRING_BLOCK_SIZE
1931 && total_free_strings > STRING_BLOCK_SIZE)
1932 {
1933 lisp_free (b);
1934 string_free_list = free_list_before;
1935 }
1936 else
1937 {
1938 total_free_strings += nfree;
1939 b->next = live_blocks;
1940 live_blocks = b;
1941 }
1942 }
1943
1944 check_string_free_list ();
1945
1946 string_blocks = live_blocks;
1947 free_large_strings ();
1948 compact_small_strings ();
1949
1950 check_string_free_list ();
1951 }
1952
1953
1954 /* Free dead large strings. */
1955
1956 static void
1957 free_large_strings (void)
1958 {
1959 struct sblock *b, *next;
1960 struct sblock *live_blocks = NULL;
1961
1962 for (b = large_sblocks; b; b = next)
1963 {
1964 next = b->next;
1965
1966 if (b->data[0].string == NULL)
1967 lisp_free (b);
1968 else
1969 {
1970 b->next = live_blocks;
1971 live_blocks = b;
1972 }
1973 }
1974
1975 large_sblocks = live_blocks;
1976 }
1977
1978
1979 /* Compact data of small strings. Free sblocks that don't contain
1980 data of live strings after compaction. */
1981
1982 static void
1983 compact_small_strings (void)
1984 {
1985 struct sblock *b, *tb, *next;
1986 sdata *from, *to, *end, *tb_end;
1987 sdata *to_end, *from_end;
1988
1989 /* TB is the sblock we copy to, TO is the sdata within TB we copy
1990 to, and TB_END is the end of TB. */
1991 tb = oldest_sblock;
1992 tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
1993 to = tb->data;
1994
1995 /* Step through the blocks from the oldest to the youngest. We
1996 expect that old blocks will stabilize over time, so that less
1997 copying will happen this way. */
1998 for (b = oldest_sblock; b; b = b->next)
1999 {
2000 end = b->next_free;
2001 eassert ((char *) end <= (char *) b + SBLOCK_SIZE);
2002
2003 for (from = b->data; from < end; from = from_end)
2004 {
2005 /* Compute the next FROM here because copying below may
2006 overwrite data we need to compute it. */
2007 ptrdiff_t nbytes;
2008 struct Lisp_String *s = from->string;
2009
2010 #ifdef GC_CHECK_STRING_BYTES
2011 /* Check that the string size recorded in the string is the
2012 same as the one recorded in the sdata structure. */
2013 if (s && string_bytes (s) != SDATA_NBYTES (from))
2014 emacs_abort ();
2015 #endif /* GC_CHECK_STRING_BYTES */
2016
2017 nbytes = s ? STRING_BYTES (s) : SDATA_NBYTES (from);
2018 eassert (nbytes <= LARGE_STRING_BYTES);
2019
2020 nbytes = SDATA_SIZE (nbytes);
2021 from_end = (sdata *) ((char *) from + nbytes + GC_STRING_EXTRA);
2022
2023 #ifdef GC_CHECK_STRING_OVERRUN
2024 if (memcmp (string_overrun_cookie,
2025 (char *) from_end - GC_STRING_OVERRUN_COOKIE_SIZE,
2026 GC_STRING_OVERRUN_COOKIE_SIZE))
2027 emacs_abort ();
2028 #endif
2029
2030 /* Non-NULL S means it's alive. Copy its data. */
2031 if (s)
2032 {
2033 /* If TB is full, proceed with the next sblock. */
2034 to_end = (sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2035 if (to_end > tb_end)
2036 {
2037 tb->next_free = to;
2038 tb = tb->next;
2039 tb_end = (sdata *) ((char *) tb + SBLOCK_SIZE);
2040 to = tb->data;
2041 to_end = (sdata *) ((char *) to + nbytes + GC_STRING_EXTRA);
2042 }
2043
2044 /* Copy, and update the string's `data' pointer. */
2045 if (from != to)
2046 {
2047 eassert (tb != b || to < from);
2048 memmove (to, from, nbytes + GC_STRING_EXTRA);
2049 to->string->data = SDATA_DATA (to);
2050 }
2051
2052 /* Advance past the sdata we copied to. */
2053 to = to_end;
2054 }
2055 }
2056 }
2057
2058 /* The rest of the sblocks following TB don't contain live data, so
2059 we can free them. */
2060 for (b = tb->next; b; b = next)
2061 {
2062 next = b->next;
2063 lisp_free (b);
2064 }
2065
2066 tb->next_free = to;
2067 tb->next = NULL;
2068 current_sblock = tb;
2069 }
2070
2071 void
2072 string_overflow (void)
2073 {
2074 error ("Maximum string size exceeded");
2075 }
2076
2077 DEFUN ("make-string", Fmake_string, Smake_string, 2, 2, 0,
2078 doc: /* Return a newly created string of length LENGTH, with INIT in each element.
2079 LENGTH must be an integer.
2080 INIT must be an integer that represents a character. */)
2081 (Lisp_Object length, Lisp_Object init)
2082 {
2083 register Lisp_Object val;
2084 int c;
2085 EMACS_INT nbytes;
2086
2087 CHECK_NATNUM (length);
2088 CHECK_CHARACTER (init);
2089
2090 c = XFASTINT (init);
2091 if (ASCII_CHAR_P (c))
2092 {
2093 nbytes = XINT (length);
2094 val = make_uninit_string (nbytes);
2095 memset (SDATA (val), c, nbytes);
2096 SDATA (val)[nbytes] = 0;
2097 }
2098 else
2099 {
2100 unsigned char str[MAX_MULTIBYTE_LENGTH];
2101 ptrdiff_t len = CHAR_STRING (c, str);
2102 EMACS_INT string_len = XINT (length);
2103 unsigned char *p, *beg, *end;
2104
2105 if (string_len > STRING_BYTES_MAX / len)
2106 string_overflow ();
2107 nbytes = len * string_len;
2108 val = make_uninit_multibyte_string (string_len, nbytes);
2109 for (beg = SDATA (val), p = beg, end = beg + nbytes; p < end; p += len)
2110 {
2111 /* First time we just copy `str' to the data of `val'. */
2112 if (p == beg)
2113 memcpy (p, str, len);
2114 else
2115 {
2116 /* Next time we copy largest possible chunk from
2117 initialized to uninitialized part of `val'. */
2118 len = min (p - beg, end - p);
2119 memcpy (p, beg, len);
2120 }
2121 }
2122 *p = 0;
2123 }
2124
2125 return val;
2126 }
2127
2128 /* Fill A with 1 bits if INIT is non-nil, and with 0 bits otherwise.
2129 Return A. */
2130
2131 Lisp_Object
2132 bool_vector_fill (Lisp_Object a, Lisp_Object init)
2133 {
2134 EMACS_INT nbits = bool_vector_size (a);
2135 if (0 < nbits)
2136 {
2137 unsigned char *data = bool_vector_uchar_data (a);
2138 int pattern = NILP (init) ? 0 : (1 << BOOL_VECTOR_BITS_PER_CHAR) - 1;
2139 ptrdiff_t nbytes = bool_vector_bytes (nbits);
2140 int last_mask = ~ (~0u << ((nbits - 1) % BOOL_VECTOR_BITS_PER_CHAR + 1));
2141 memset (data, pattern, nbytes - 1);
2142 data[nbytes - 1] = pattern & last_mask;
2143 }
2144 return a;
2145 }
2146
2147 /* Return a newly allocated, uninitialized bool vector of size NBITS. */
2148
2149 Lisp_Object
2150 make_uninit_bool_vector (EMACS_INT nbits)
2151 {
2152 Lisp_Object val;
2153 EMACS_INT words = bool_vector_words (nbits);
2154 EMACS_INT word_bytes = words * sizeof (bits_word);
2155 EMACS_INT needed_elements = ((bool_header_size - header_size + word_bytes
2156 + word_size - 1)
2157 / word_size);
2158 struct Lisp_Bool_Vector *p
2159 = (struct Lisp_Bool_Vector *) allocate_vector (needed_elements);
2160 XSETVECTOR (val, p);
2161 XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0);
2162 p->size = nbits;
2163
2164 /* Clear padding at the end. */
2165 if (words)
2166 p->data[words - 1] = 0;
2167
2168 return val;
2169 }
2170
2171 DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0,
2172 doc: /* Return a new bool-vector of length LENGTH, using INIT for each element.
2173 LENGTH must be a number. INIT matters only in whether it is t or nil. */)
2174 (Lisp_Object length, Lisp_Object init)
2175 {
2176 Lisp_Object val;
2177
2178 CHECK_NATNUM (length);
2179 val = make_uninit_bool_vector (XFASTINT (length));
2180 return bool_vector_fill (val, init);
2181 }
2182
2183 DEFUN ("bool-vector", Fbool_vector, Sbool_vector, 0, MANY, 0,
2184 doc: /* Return a new bool-vector with specified arguments as elements.
2185 Any number of arguments, even zero arguments, are allowed.
2186 usage: (bool-vector &rest OBJECTS) */)
2187 (ptrdiff_t nargs, Lisp_Object *args)
2188 {
2189 ptrdiff_t i;
2190 Lisp_Object vector;
2191
2192 vector = make_uninit_bool_vector (nargs);
2193 for (i = 0; i < nargs; i++)
2194 bool_vector_set (vector, i, !NILP (args[i]));
2195
2196 return vector;
2197 }
2198
2199 /* Make a string from NBYTES bytes at CONTENTS, and compute the number
2200 of characters from the contents. This string may be unibyte or
2201 multibyte, depending on the contents. */
2202
2203 Lisp_Object
2204 make_string (const char *contents, ptrdiff_t nbytes)
2205 {
2206 register Lisp_Object val;
2207 ptrdiff_t nchars, multibyte_nbytes;
2208
2209 parse_str_as_multibyte ((const unsigned char *) contents, nbytes,
2210 &nchars, &multibyte_nbytes);
2211 if (nbytes == nchars || nbytes != multibyte_nbytes)
2212 /* CONTENTS contains no multibyte sequences or contains an invalid
2213 multibyte sequence. We must make unibyte string. */
2214 val = make_unibyte_string (contents, nbytes);
2215 else
2216 val = make_multibyte_string (contents, nchars, nbytes);
2217 return val;
2218 }
2219
2220 /* Make a unibyte string from LENGTH bytes at CONTENTS. */
2221
2222 Lisp_Object
2223 make_unibyte_string (const char *contents, ptrdiff_t length)
2224 {
2225 register Lisp_Object val;
2226 val = make_uninit_string (length);
2227 memcpy (SDATA (val), contents, length);
2228 return val;
2229 }
2230
2231
2232 /* Make a multibyte string from NCHARS characters occupying NBYTES
2233 bytes at CONTENTS. */
2234
2235 Lisp_Object
2236 make_multibyte_string (const char *contents,
2237 ptrdiff_t nchars, ptrdiff_t nbytes)
2238 {
2239 register Lisp_Object val;
2240 val = make_uninit_multibyte_string (nchars, nbytes);
2241 memcpy (SDATA (val), contents, nbytes);
2242 return val;
2243 }
2244
2245
2246 /* Make a string from NCHARS characters occupying NBYTES bytes at
2247 CONTENTS. It is a multibyte string if NBYTES != NCHARS. */
2248
2249 Lisp_Object
2250 make_string_from_bytes (const char *contents,
2251 ptrdiff_t nchars, ptrdiff_t nbytes)
2252 {
2253 register Lisp_Object val;
2254 val = make_uninit_multibyte_string (nchars, nbytes);
2255 memcpy (SDATA (val), contents, nbytes);
2256 if (SBYTES (val) == SCHARS (val))
2257 STRING_SET_UNIBYTE (val);
2258 return val;
2259 }
2260
2261
2262 /* Make a string from NCHARS characters occupying NBYTES bytes at
2263 CONTENTS. The argument MULTIBYTE controls whether to label the
2264 string as multibyte. If NCHARS is negative, it counts the number of
2265 characters by itself. */
2266
2267 Lisp_Object
2268 make_specified_string (const char *contents,
2269 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
2270 {
2271 Lisp_Object val;
2272
2273 if (nchars < 0)
2274 {
2275 if (multibyte)
2276 nchars = multibyte_chars_in_text ((const unsigned char *) contents,
2277 nbytes);
2278 else
2279 nchars = nbytes;
2280 }
2281 val = make_uninit_multibyte_string (nchars, nbytes);
2282 memcpy (SDATA (val), contents, nbytes);
2283 if (!multibyte)
2284 STRING_SET_UNIBYTE (val);
2285 return val;
2286 }
2287
2288
2289 /* Return a unibyte Lisp_String set up to hold LENGTH characters
2290 occupying LENGTH bytes. */
2291
2292 Lisp_Object
2293 make_uninit_string (EMACS_INT length)
2294 {
2295 Lisp_Object val;
2296
2297 if (!length)
2298 return empty_unibyte_string;
2299 val = make_uninit_multibyte_string (length, length);
2300 STRING_SET_UNIBYTE (val);
2301 return val;
2302 }
2303
2304
2305 /* Return a multibyte Lisp_String set up to hold NCHARS characters
2306 which occupy NBYTES bytes. */
2307
2308 Lisp_Object
2309 make_uninit_multibyte_string (EMACS_INT nchars, EMACS_INT nbytes)
2310 {
2311 Lisp_Object string;
2312 struct Lisp_String *s;
2313
2314 if (nchars < 0)
2315 emacs_abort ();
2316 if (!nbytes)
2317 return empty_multibyte_string;
2318
2319 s = allocate_string ();
2320 s->intervals = NULL;
2321 allocate_string_data (s, nchars, nbytes);
2322 XSETSTRING (string, s);
2323 string_chars_consed += nbytes;
2324 return string;
2325 }
2326
2327 /* Print arguments to BUF according to a FORMAT, then return
2328 a Lisp_String initialized with the data from BUF. */
2329
2330 Lisp_Object
2331 make_formatted_string (char *buf, const char *format, ...)
2332 {
2333 va_list ap;
2334 int length;
2335
2336 va_start (ap, format);
2337 length = vsprintf (buf, format, ap);
2338 va_end (ap);
2339 return make_string (buf, length);
2340 }
2341
2342 \f
2343 /***********************************************************************
2344 Float Allocation
2345 ***********************************************************************/
2346
2347 /* We store float cells inside of float_blocks, allocating a new
2348 float_block with malloc whenever necessary. Float cells reclaimed
2349 by GC are put on a free list to be reallocated before allocating
2350 any new float cells from the latest float_block. */
2351
2352 #define FLOAT_BLOCK_SIZE \
2353 (((BLOCK_BYTES - sizeof (struct float_block *) \
2354 /* The compiler might add padding at the end. */ \
2355 - (sizeof (struct Lisp_Float) - sizeof (bits_word))) * CHAR_BIT) \
2356 / (sizeof (struct Lisp_Float) * CHAR_BIT + 1))
2357
2358 #define GETMARKBIT(block,n) \
2359 (((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2360 >> ((n) % BITS_PER_BITS_WORD)) \
2361 & 1)
2362
2363 #define SETMARKBIT(block,n) \
2364 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2365 |= (bits_word) 1 << ((n) % BITS_PER_BITS_WORD))
2366
2367 #define UNSETMARKBIT(block,n) \
2368 ((block)->gcmarkbits[(n) / BITS_PER_BITS_WORD] \
2369 &= ~((bits_word) 1 << ((n) % BITS_PER_BITS_WORD)))
2370
2371 #define FLOAT_BLOCK(fptr) \
2372 ((struct float_block *) (((uintptr_t) (fptr)) & ~(BLOCK_ALIGN - 1)))
2373
2374 #define FLOAT_INDEX(fptr) \
2375 ((((uintptr_t) (fptr)) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Float))
2376
2377 struct float_block
2378 {
2379 /* Place `floats' at the beginning, to ease up FLOAT_INDEX's job. */
2380 struct Lisp_Float floats[FLOAT_BLOCK_SIZE];
2381 bits_word gcmarkbits[1 + FLOAT_BLOCK_SIZE / BITS_PER_BITS_WORD];
2382 struct float_block *next;
2383 };
2384
2385 #define FLOAT_MARKED_P(fptr) \
2386 GETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2387
2388 #define FLOAT_MARK(fptr) \
2389 SETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2390
2391 #define FLOAT_UNMARK(fptr) \
2392 UNSETMARKBIT (FLOAT_BLOCK (fptr), FLOAT_INDEX ((fptr)))
2393
2394 /* Current float_block. */
2395
2396 static struct float_block *float_block;
2397
2398 /* Index of first unused Lisp_Float in the current float_block. */
2399
2400 static int float_block_index = FLOAT_BLOCK_SIZE;
2401
2402 /* Free-list of Lisp_Floats. */
2403
2404 static struct Lisp_Float *float_free_list;
2405
2406 /* Return a new float object with value FLOAT_VALUE. */
2407
2408 Lisp_Object
2409 make_float (double float_value)
2410 {
2411 register Lisp_Object val;
2412
2413 MALLOC_BLOCK_INPUT;
2414
2415 if (float_free_list)
2416 {
2417 /* We use the data field for chaining the free list
2418 so that we won't use the same field that has the mark bit. */
2419 XSETFLOAT (val, float_free_list);
2420 float_free_list = float_free_list->u.chain;
2421 }
2422 else
2423 {
2424 if (float_block_index == FLOAT_BLOCK_SIZE)
2425 {
2426 struct float_block *new
2427 = lisp_align_malloc (sizeof *new, MEM_TYPE_FLOAT);
2428 new->next = float_block;
2429 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2430 float_block = new;
2431 float_block_index = 0;
2432 total_free_floats += FLOAT_BLOCK_SIZE;
2433 }
2434 XSETFLOAT (val, &float_block->floats[float_block_index]);
2435 float_block_index++;
2436 }
2437
2438 MALLOC_UNBLOCK_INPUT;
2439
2440 XFLOAT_INIT (val, float_value);
2441 eassert (!FLOAT_MARKED_P (XFLOAT (val)));
2442 consing_since_gc += sizeof (struct Lisp_Float);
2443 floats_consed++;
2444 total_free_floats--;
2445 return val;
2446 }
2447
2448
2449 \f
2450 /***********************************************************************
2451 Cons Allocation
2452 ***********************************************************************/
2453
2454 /* We store cons cells inside of cons_blocks, allocating a new
2455 cons_block with malloc whenever necessary. Cons cells reclaimed by
2456 GC are put on a free list to be reallocated before allocating
2457 any new cons cells from the latest cons_block. */
2458
2459 #define CONS_BLOCK_SIZE \
2460 (((BLOCK_BYTES - sizeof (struct cons_block *) \
2461 /* The compiler might add padding at the end. */ \
2462 - (sizeof (struct Lisp_Cons) - sizeof (bits_word))) * CHAR_BIT) \
2463 / (sizeof (struct Lisp_Cons) * CHAR_BIT + 1))
2464
2465 #define CONS_BLOCK(fptr) \
2466 ((struct cons_block *) ((uintptr_t) (fptr) & ~(BLOCK_ALIGN - 1)))
2467
2468 #define CONS_INDEX(fptr) \
2469 (((uintptr_t) (fptr) & (BLOCK_ALIGN - 1)) / sizeof (struct Lisp_Cons))
2470
2471 struct cons_block
2472 {
2473 /* Place `conses' at the beginning, to ease up CONS_INDEX's job. */
2474 struct Lisp_Cons conses[CONS_BLOCK_SIZE];
2475 bits_word gcmarkbits[1 + CONS_BLOCK_SIZE / BITS_PER_BITS_WORD];
2476 struct cons_block *next;
2477 };
2478
2479 #define CONS_MARKED_P(fptr) \
2480 GETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2481
2482 #define CONS_MARK(fptr) \
2483 SETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2484
2485 #define CONS_UNMARK(fptr) \
2486 UNSETMARKBIT (CONS_BLOCK (fptr), CONS_INDEX ((fptr)))
2487
2488 /* Current cons_block. */
2489
2490 static struct cons_block *cons_block;
2491
2492 /* Index of first unused Lisp_Cons in the current block. */
2493
2494 static int cons_block_index = CONS_BLOCK_SIZE;
2495
2496 /* Free-list of Lisp_Cons structures. */
2497
2498 static struct Lisp_Cons *cons_free_list;
2499
2500 /* Explicitly free a cons cell by putting it on the free-list. */
2501
2502 void
2503 free_cons (struct Lisp_Cons *ptr)
2504 {
2505 ptr->u.chain = cons_free_list;
2506 #if GC_MARK_STACK
2507 ptr->car = Vdead;
2508 #endif
2509 cons_free_list = ptr;
2510 consing_since_gc -= sizeof *ptr;
2511 total_free_conses++;
2512 }
2513
2514 DEFUN ("cons", Fcons, Scons, 2, 2, 0,
2515 doc: /* Create a new cons, give it CAR and CDR as components, and return it. */)
2516 (Lisp_Object car, Lisp_Object cdr)
2517 {
2518 register Lisp_Object val;
2519
2520 MALLOC_BLOCK_INPUT;
2521
2522 if (cons_free_list)
2523 {
2524 /* We use the cdr for chaining the free list
2525 so that we won't use the same field that has the mark bit. */
2526 XSETCONS (val, cons_free_list);
2527 cons_free_list = cons_free_list->u.chain;
2528 }
2529 else
2530 {
2531 if (cons_block_index == CONS_BLOCK_SIZE)
2532 {
2533 struct cons_block *new
2534 = lisp_align_malloc (sizeof *new, MEM_TYPE_CONS);
2535 memset (new->gcmarkbits, 0, sizeof new->gcmarkbits);
2536 new->next = cons_block;
2537 cons_block = new;
2538 cons_block_index = 0;
2539 total_free_conses += CONS_BLOCK_SIZE;
2540 }
2541 XSETCONS (val, &cons_block->conses[cons_block_index]);
2542 cons_block_index++;
2543 }
2544
2545 MALLOC_UNBLOCK_INPUT;
2546
2547 XSETCAR (val, car);
2548 XSETCDR (val, cdr);
2549 eassert (!CONS_MARKED_P (XCONS (val)));
2550 consing_since_gc += sizeof (struct Lisp_Cons);
2551 total_free_conses--;
2552 cons_cells_consed++;
2553 return val;
2554 }
2555
2556 #ifdef GC_CHECK_CONS_LIST
2557 /* Get an error now if there's any junk in the cons free list. */
2558 void
2559 check_cons_list (void)
2560 {
2561 struct Lisp_Cons *tail = cons_free_list;
2562
2563 while (tail)
2564 tail = tail->u.chain;
2565 }
2566 #endif
2567
2568 /* Make a list of 1, 2, 3, 4 or 5 specified objects. */
2569
2570 Lisp_Object
2571 list1 (Lisp_Object arg1)
2572 {
2573 return Fcons (arg1, Qnil);
2574 }
2575
2576 Lisp_Object
2577 list2 (Lisp_Object arg1, Lisp_Object arg2)
2578 {
2579 return Fcons (arg1, Fcons (arg2, Qnil));
2580 }
2581
2582
2583 Lisp_Object
2584 list3 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3)
2585 {
2586 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Qnil)));
2587 }
2588
2589
2590 Lisp_Object
2591 list4 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4)
2592 {
2593 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4, Qnil))));
2594 }
2595
2596
2597 Lisp_Object
2598 list5 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5)
2599 {
2600 return Fcons (arg1, Fcons (arg2, Fcons (arg3, Fcons (arg4,
2601 Fcons (arg5, Qnil)))));
2602 }
2603
2604 /* Make a list of COUNT Lisp_Objects, where ARG is the
2605 first one. Allocate conses from pure space if TYPE
2606 is CONSTYPE_PURE, or allocate as usual if type is CONSTYPE_HEAP. */
2607
2608 Lisp_Object
2609 listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...)
2610 {
2611 Lisp_Object (*cons) (Lisp_Object, Lisp_Object);
2612 switch (type)
2613 {
2614 case CONSTYPE_PURE: cons = pure_cons; break;
2615 case CONSTYPE_HEAP: cons = Fcons; break;
2616 default: emacs_abort ();
2617 }
2618
2619 eassume (0 < count);
2620 Lisp_Object val = cons (arg, Qnil);
2621 Lisp_Object tail = val;
2622
2623 va_list ap;
2624 va_start (ap, arg);
2625 for (ptrdiff_t i = 1; i < count; i++)
2626 {
2627 Lisp_Object elem = cons (va_arg (ap, Lisp_Object), Qnil);
2628 XSETCDR (tail, elem);
2629 tail = elem;
2630 }
2631 va_end (ap);
2632
2633 return val;
2634 }
2635
2636 DEFUN ("list", Flist, Slist, 0, MANY, 0,
2637 doc: /* Return a newly created list with specified arguments as elements.
2638 Any number of arguments, even zero arguments, are allowed.
2639 usage: (list &rest OBJECTS) */)
2640 (ptrdiff_t nargs, Lisp_Object *args)
2641 {
2642 register Lisp_Object val;
2643 val = Qnil;
2644
2645 while (nargs > 0)
2646 {
2647 nargs--;
2648 val = Fcons (args[nargs], val);
2649 }
2650 return val;
2651 }
2652
2653
2654 DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
2655 doc: /* Return a newly created list of length LENGTH, with each element being INIT. */)
2656 (register Lisp_Object length, Lisp_Object init)
2657 {
2658 register Lisp_Object val;
2659 register EMACS_INT size;
2660
2661 CHECK_NATNUM (length);
2662 size = XFASTINT (length);
2663
2664 val = Qnil;
2665 while (size > 0)
2666 {
2667 val = Fcons (init, val);
2668 --size;
2669
2670 if (size > 0)
2671 {
2672 val = Fcons (init, val);
2673 --size;
2674
2675 if (size > 0)
2676 {
2677 val = Fcons (init, val);
2678 --size;
2679
2680 if (size > 0)
2681 {
2682 val = Fcons (init, val);
2683 --size;
2684
2685 if (size > 0)
2686 {
2687 val = Fcons (init, val);
2688 --size;
2689 }
2690 }
2691 }
2692 }
2693
2694 QUIT;
2695 }
2696
2697 return val;
2698 }
2699
2700
2701 \f
2702 /***********************************************************************
2703 Vector Allocation
2704 ***********************************************************************/
2705
2706 /* Sometimes a vector's contents are merely a pointer internally used
2707 in vector allocation code. On the rare platforms where a null
2708 pointer cannot be tagged, represent it with a Lisp 0.
2709 Usually you don't want to touch this. */
2710
2711 static struct Lisp_Vector *
2712 next_vector (struct Lisp_Vector *v)
2713 {
2714 return XUNTAG (v->contents[0], Lisp_Int0);
2715 }
2716
2717 static void
2718 set_next_vector (struct Lisp_Vector *v, struct Lisp_Vector *p)
2719 {
2720 v->contents[0] = make_lisp_ptr (p, Lisp_Int0);
2721 }
2722
2723 /* This value is balanced well enough to avoid too much internal overhead
2724 for the most common cases; it's not required to be a power of two, but
2725 it's expected to be a mult-of-ROUNDUP_SIZE (see below). */
2726
2727 #define VECTOR_BLOCK_SIZE 4096
2728
2729 enum
2730 {
2731 /* Alignment of struct Lisp_Vector objects. */
2732 vector_alignment = COMMON_MULTIPLE (ALIGNOF_STRUCT_LISP_VECTOR,
2733 USE_LSB_TAG ? GCALIGNMENT : 1),
2734
2735 /* Vector size requests are a multiple of this. */
2736 roundup_size = COMMON_MULTIPLE (vector_alignment, word_size)
2737 };
2738
2739 /* Verify assumptions described above. */
2740 verify ((VECTOR_BLOCK_SIZE % roundup_size) == 0);
2741 verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS));
2742
2743 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */
2744 #define vroundup_ct(x) ROUNDUP (x, roundup_size)
2745 /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */
2746 #define vroundup(x) (eassume ((x) >= 0), vroundup_ct (x))
2747
2748 /* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */
2749
2750 #define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup_ct (sizeof (void *)))
2751
2752 /* Size of the minimal vector allocated from block. */
2753
2754 #define VBLOCK_BYTES_MIN vroundup_ct (header_size + sizeof (Lisp_Object))
2755
2756 /* Size of the largest vector allocated from block. */
2757
2758 #define VBLOCK_BYTES_MAX \
2759 vroundup ((VECTOR_BLOCK_BYTES / 2) - word_size)
2760
2761 /* We maintain one free list for each possible block-allocated
2762 vector size, and this is the number of free lists we have. */
2763
2764 #define VECTOR_MAX_FREE_LIST_INDEX \
2765 ((VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN) / roundup_size + 1)
2766
2767 /* Common shortcut to advance vector pointer over a block data. */
2768
2769 #define ADVANCE(v, nbytes) ((struct Lisp_Vector *) ((char *) (v) + (nbytes)))
2770
2771 /* Common shortcut to calculate NBYTES-vector index in VECTOR_FREE_LISTS. */
2772
2773 #define VINDEX(nbytes) (((nbytes) - VBLOCK_BYTES_MIN) / roundup_size)
2774
2775 /* Common shortcut to setup vector on a free list. */
2776
2777 #define SETUP_ON_FREE_LIST(v, nbytes, tmp) \
2778 do { \
2779 (tmp) = ((nbytes - header_size) / word_size); \
2780 XSETPVECTYPESIZE (v, PVEC_FREE, 0, (tmp)); \
2781 eassert ((nbytes) % roundup_size == 0); \
2782 (tmp) = VINDEX (nbytes); \
2783 eassert ((tmp) < VECTOR_MAX_FREE_LIST_INDEX); \
2784 set_next_vector (v, vector_free_lists[tmp]); \
2785 vector_free_lists[tmp] = (v); \
2786 total_free_vector_slots += (nbytes) / word_size; \
2787 } while (0)
2788
2789 /* This internal type is used to maintain the list of large vectors
2790 which are allocated at their own, e.g. outside of vector blocks.
2791
2792 struct large_vector itself cannot contain a struct Lisp_Vector, as
2793 the latter contains a flexible array member and C99 does not allow
2794 such structs to be nested. Instead, each struct large_vector
2795 object LV is followed by a struct Lisp_Vector, which is at offset
2796 large_vector_offset from LV, and whose address is therefore
2797 large_vector_vec (&LV). */
2798
2799 struct large_vector
2800 {
2801 struct large_vector *next;
2802 };
2803
2804 enum
2805 {
2806 large_vector_offset = ROUNDUP (sizeof (struct large_vector), vector_alignment)
2807 };
2808
2809 static struct Lisp_Vector *
2810 large_vector_vec (struct large_vector *p)
2811 {
2812 return (struct Lisp_Vector *) ((char *) p + large_vector_offset);
2813 }
2814
2815 /* This internal type is used to maintain an underlying storage
2816 for small vectors. */
2817
2818 struct vector_block
2819 {
2820 char data[VECTOR_BLOCK_BYTES];
2821 struct vector_block *next;
2822 };
2823
2824 /* Chain of vector blocks. */
2825
2826 static struct vector_block *vector_blocks;
2827
2828 /* Vector free lists, where NTH item points to a chain of free
2829 vectors of the same NBYTES size, so NTH == VINDEX (NBYTES). */
2830
2831 static struct Lisp_Vector *vector_free_lists[VECTOR_MAX_FREE_LIST_INDEX];
2832
2833 /* Singly-linked list of large vectors. */
2834
2835 static struct large_vector *large_vectors;
2836
2837 /* The only vector with 0 slots, allocated from pure space. */
2838
2839 Lisp_Object zero_vector;
2840
2841 /* Number of live vectors. */
2842
2843 static EMACS_INT total_vectors;
2844
2845 /* Total size of live and free vectors, in Lisp_Object units. */
2846
2847 static EMACS_INT total_vector_slots, total_free_vector_slots;
2848
2849 /* Get a new vector block. */
2850
2851 static struct vector_block *
2852 allocate_vector_block (void)
2853 {
2854 struct vector_block *block = xmalloc (sizeof *block);
2855
2856 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
2857 mem_insert (block->data, block->data + VECTOR_BLOCK_BYTES,
2858 MEM_TYPE_VECTOR_BLOCK);
2859 #endif
2860
2861 block->next = vector_blocks;
2862 vector_blocks = block;
2863 return block;
2864 }
2865
2866 /* Called once to initialize vector allocation. */
2867
2868 static void
2869 init_vectors (void)
2870 {
2871 zero_vector = make_pure_vector (0);
2872 }
2873
2874 /* Allocate vector from a vector block. */
2875
2876 static struct Lisp_Vector *
2877 allocate_vector_from_block (size_t nbytes)
2878 {
2879 struct Lisp_Vector *vector;
2880 struct vector_block *block;
2881 size_t index, restbytes;
2882
2883 eassert (VBLOCK_BYTES_MIN <= nbytes && nbytes <= VBLOCK_BYTES_MAX);
2884 eassert (nbytes % roundup_size == 0);
2885
2886 /* First, try to allocate from a free list
2887 containing vectors of the requested size. */
2888 index = VINDEX (nbytes);
2889 if (vector_free_lists[index])
2890 {
2891 vector = vector_free_lists[index];
2892 vector_free_lists[index] = next_vector (vector);
2893 total_free_vector_slots -= nbytes / word_size;
2894 return vector;
2895 }
2896
2897 /* Next, check free lists containing larger vectors. Since
2898 we will split the result, we should have remaining space
2899 large enough to use for one-slot vector at least. */
2900 for (index = VINDEX (nbytes + VBLOCK_BYTES_MIN);
2901 index < VECTOR_MAX_FREE_LIST_INDEX; index++)
2902 if (vector_free_lists[index])
2903 {
2904 /* This vector is larger than requested. */
2905 vector = vector_free_lists[index];
2906 vector_free_lists[index] = next_vector (vector);
2907 total_free_vector_slots -= nbytes / word_size;
2908
2909 /* Excess bytes are used for the smaller vector,
2910 which should be set on an appropriate free list. */
2911 restbytes = index * roundup_size + VBLOCK_BYTES_MIN - nbytes;
2912 eassert (restbytes % roundup_size == 0);
2913 SETUP_ON_FREE_LIST (ADVANCE (vector, nbytes), restbytes, index);
2914 return vector;
2915 }
2916
2917 /* Finally, need a new vector block. */
2918 block = allocate_vector_block ();
2919
2920 /* New vector will be at the beginning of this block. */
2921 vector = (struct Lisp_Vector *) block->data;
2922
2923 /* If the rest of space from this block is large enough
2924 for one-slot vector at least, set up it on a free list. */
2925 restbytes = VECTOR_BLOCK_BYTES - nbytes;
2926 if (restbytes >= VBLOCK_BYTES_MIN)
2927 {
2928 eassert (restbytes % roundup_size == 0);
2929 SETUP_ON_FREE_LIST (ADVANCE (vector, nbytes), restbytes, index);
2930 }
2931 return vector;
2932 }
2933
2934 /* Nonzero if VECTOR pointer is valid pointer inside BLOCK. */
2935
2936 #define VECTOR_IN_BLOCK(vector, block) \
2937 ((char *) (vector) <= (block)->data \
2938 + VECTOR_BLOCK_BYTES - VBLOCK_BYTES_MIN)
2939
2940 /* Return the memory footprint of V in bytes. */
2941
2942 static ptrdiff_t
2943 vector_nbytes (struct Lisp_Vector *v)
2944 {
2945 ptrdiff_t size = v->header.size & ~ARRAY_MARK_FLAG;
2946 ptrdiff_t nwords;
2947
2948 if (size & PSEUDOVECTOR_FLAG)
2949 {
2950 if (PSEUDOVECTOR_TYPEP (&v->header, PVEC_BOOL_VECTOR))
2951 {
2952 struct Lisp_Bool_Vector *bv = (struct Lisp_Bool_Vector *) v;
2953 ptrdiff_t word_bytes = (bool_vector_words (bv->size)
2954 * sizeof (bits_word));
2955 ptrdiff_t boolvec_bytes = bool_header_size + word_bytes;
2956 verify (header_size <= bool_header_size);
2957 nwords = (boolvec_bytes - header_size + word_size - 1) / word_size;
2958 }
2959 else
2960 nwords = ((size & PSEUDOVECTOR_SIZE_MASK)
2961 + ((size & PSEUDOVECTOR_REST_MASK)
2962 >> PSEUDOVECTOR_SIZE_BITS));
2963 }
2964 else
2965 nwords = size;
2966 return vroundup (header_size + word_size * nwords);
2967 }
2968
2969 /* Release extra resources still in use by VECTOR, which may be any
2970 vector-like object. For now, this is used just to free data in
2971 font objects. */
2972
2973 static void
2974 cleanup_vector (struct Lisp_Vector *vector)
2975 {
2976 detect_suspicious_free (vector);
2977 if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT)
2978 && ((vector->header.size & PSEUDOVECTOR_SIZE_MASK)
2979 == FONT_OBJECT_MAX))
2980 {
2981 struct font_driver *drv = ((struct font *) vector)->driver;
2982
2983 /* The font driver might sometimes be NULL, e.g. if Emacs was
2984 interrupted before it had time to set it up. */
2985 if (drv)
2986 {
2987 /* Attempt to catch subtle bugs like Bug#16140. */
2988 eassert (valid_font_driver (drv));
2989 drv->close ((struct font *) vector);
2990 }
2991 }
2992 }
2993
2994 /* Reclaim space used by unmarked vectors. */
2995
2996 NO_INLINE /* For better stack traces */
2997 static void
2998 sweep_vectors (void)
2999 {
3000 struct vector_block *block, **bprev = &vector_blocks;
3001 struct large_vector *lv, **lvprev = &large_vectors;
3002 struct Lisp_Vector *vector, *next;
3003
3004 total_vectors = total_vector_slots = total_free_vector_slots = 0;
3005 memset (vector_free_lists, 0, sizeof (vector_free_lists));
3006
3007 /* Looking through vector blocks. */
3008
3009 for (block = vector_blocks; block; block = *bprev)
3010 {
3011 bool free_this_block = 0;
3012 ptrdiff_t nbytes;
3013
3014 for (vector = (struct Lisp_Vector *) block->data;
3015 VECTOR_IN_BLOCK (vector, block); vector = next)
3016 {
3017 if (VECTOR_MARKED_P (vector))
3018 {
3019 VECTOR_UNMARK (vector);
3020 total_vectors++;
3021 nbytes = vector_nbytes (vector);
3022 total_vector_slots += nbytes / word_size;
3023 next = ADVANCE (vector, nbytes);
3024 }
3025 else
3026 {
3027 ptrdiff_t total_bytes;
3028
3029 cleanup_vector (vector);
3030 nbytes = vector_nbytes (vector);
3031 total_bytes = nbytes;
3032 next = ADVANCE (vector, nbytes);
3033
3034 /* While NEXT is not marked, try to coalesce with VECTOR,
3035 thus making VECTOR of the largest possible size. */
3036
3037 while (VECTOR_IN_BLOCK (next, block))
3038 {
3039 if (VECTOR_MARKED_P (next))
3040 break;
3041 cleanup_vector (next);
3042 nbytes = vector_nbytes (next);
3043 total_bytes += nbytes;
3044 next = ADVANCE (next, nbytes);
3045 }
3046
3047 eassert (total_bytes % roundup_size == 0);
3048
3049 if (vector == (struct Lisp_Vector *) block->data
3050 && !VECTOR_IN_BLOCK (next, block))
3051 /* This block should be freed because all of its
3052 space was coalesced into the only free vector. */
3053 free_this_block = 1;
3054 else
3055 {
3056 size_t tmp;
3057 SETUP_ON_FREE_LIST (vector, total_bytes, tmp);
3058 }
3059 }
3060 }
3061
3062 if (free_this_block)
3063 {
3064 *bprev = block->next;
3065 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
3066 mem_delete (mem_find (block->data));
3067 #endif
3068 xfree (block);
3069 }
3070 else
3071 bprev = &block->next;
3072 }
3073
3074 /* Sweep large vectors. */
3075
3076 for (lv = large_vectors; lv; lv = *lvprev)
3077 {
3078 vector = large_vector_vec (lv);
3079 if (VECTOR_MARKED_P (vector))
3080 {
3081 VECTOR_UNMARK (vector);
3082 total_vectors++;
3083 if (vector->header.size & PSEUDOVECTOR_FLAG)
3084 {
3085 /* All non-bool pseudovectors are small enough to be allocated
3086 from vector blocks. This code should be redesigned if some
3087 pseudovector type grows beyond VBLOCK_BYTES_MAX. */
3088 eassert (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR));
3089 total_vector_slots += vector_nbytes (vector) / word_size;
3090 }
3091 else
3092 total_vector_slots
3093 += header_size / word_size + vector->header.size;
3094 lvprev = &lv->next;
3095 }
3096 else
3097 {
3098 *lvprev = lv->next;
3099 lisp_free (lv);
3100 }
3101 }
3102 }
3103
3104 /* Value is a pointer to a newly allocated Lisp_Vector structure
3105 with room for LEN Lisp_Objects. */
3106
3107 static struct Lisp_Vector *
3108 allocate_vectorlike (ptrdiff_t len)
3109 {
3110 struct Lisp_Vector *p;
3111
3112 MALLOC_BLOCK_INPUT;
3113
3114 if (len == 0)
3115 p = XVECTOR (zero_vector);
3116 else
3117 {
3118 size_t nbytes = header_size + len * word_size;
3119
3120 #ifdef DOUG_LEA_MALLOC
3121 if (!mmap_lisp_allowed_p ())
3122 mallopt (M_MMAP_MAX, 0);
3123 #endif
3124
3125 if (nbytes <= VBLOCK_BYTES_MAX)
3126 p = allocate_vector_from_block (vroundup (nbytes));
3127 else
3128 {
3129 struct large_vector *lv
3130 = lisp_malloc ((large_vector_offset + header_size
3131 + len * word_size),
3132 MEM_TYPE_VECTORLIKE);
3133 lv->next = large_vectors;
3134 large_vectors = lv;
3135 p = large_vector_vec (lv);
3136 }
3137
3138 #ifdef DOUG_LEA_MALLOC
3139 if (!mmap_lisp_allowed_p ())
3140 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
3141 #endif
3142
3143 if (find_suspicious_object_in_range (p, (char *) p + nbytes))
3144 emacs_abort ();
3145
3146 consing_since_gc += nbytes;
3147 vector_cells_consed += len;
3148 }
3149
3150 MALLOC_UNBLOCK_INPUT;
3151
3152 return p;
3153 }
3154
3155
3156 /* Allocate a vector with LEN slots. */
3157
3158 struct Lisp_Vector *
3159 allocate_vector (EMACS_INT len)
3160 {
3161 struct Lisp_Vector *v;
3162 ptrdiff_t nbytes_max = min (PTRDIFF_MAX, SIZE_MAX);
3163
3164 if (min ((nbytes_max - header_size) / word_size, MOST_POSITIVE_FIXNUM) < len)
3165 memory_full (SIZE_MAX);
3166 v = allocate_vectorlike (len);
3167 v->header.size = len;
3168 return v;
3169 }
3170
3171
3172 /* Allocate other vector-like structures. */
3173
3174 struct Lisp_Vector *
3175 allocate_pseudovector (int memlen, int lisplen,
3176 int zerolen, enum pvec_type tag)
3177 {
3178 struct Lisp_Vector *v = allocate_vectorlike (memlen);
3179
3180 /* Catch bogus values. */
3181 eassert (0 <= tag && tag <= PVEC_FONT);
3182 eassert (0 <= lisplen && lisplen <= zerolen && zerolen <= memlen);
3183 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
3184 eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
3185
3186 /* Only the first LISPLEN slots will be traced normally by the GC. */
3187 memclear (v->contents, zerolen * word_size);
3188 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
3189 return v;
3190 }
3191
3192 struct buffer *
3193 allocate_buffer (void)
3194 {
3195 struct buffer *b = lisp_malloc (sizeof *b, MEM_TYPE_BUFFER);
3196
3197 BUFFER_PVEC_INIT (b);
3198 /* Put B on the chain of all buffers including killed ones. */
3199 b->next = all_buffers;
3200 all_buffers = b;
3201 /* Note that the rest fields of B are not initialized. */
3202 return b;
3203 }
3204
3205 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
3206 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
3207 See also the function `vector'. */)
3208 (register Lisp_Object length, Lisp_Object init)
3209 {
3210 Lisp_Object vector;
3211 register ptrdiff_t sizei;
3212 register ptrdiff_t i;
3213 register struct Lisp_Vector *p;
3214
3215 CHECK_NATNUM (length);
3216
3217 p = allocate_vector (XFASTINT (length));
3218 sizei = XFASTINT (length);
3219 for (i = 0; i < sizei; i++)
3220 p->contents[i] = init;
3221
3222 XSETVECTOR (vector, p);
3223 return vector;
3224 }
3225
3226 DEFUN ("vector", Fvector, Svector, 0, MANY, 0,
3227 doc: /* Return a newly created vector with specified arguments as elements.
3228 Any number of arguments, even zero arguments, are allowed.
3229 usage: (vector &rest OBJECTS) */)
3230 (ptrdiff_t nargs, Lisp_Object *args)
3231 {
3232 ptrdiff_t i;
3233 register Lisp_Object val = make_uninit_vector (nargs);
3234 register struct Lisp_Vector *p = XVECTOR (val);
3235
3236 for (i = 0; i < nargs; i++)
3237 p->contents[i] = args[i];
3238 return val;
3239 }
3240
3241 void
3242 make_byte_code (struct Lisp_Vector *v)
3243 {
3244 /* Don't allow the global zero_vector to become a byte code object. */
3245 eassert (0 < v->header.size);
3246
3247 if (v->header.size > 1 && STRINGP (v->contents[1])
3248 && STRING_MULTIBYTE (v->contents[1]))
3249 /* BYTECODE-STRING must have been produced by Emacs 20.2 or the
3250 earlier because they produced a raw 8-bit string for byte-code
3251 and now such a byte-code string is loaded as multibyte while
3252 raw 8-bit characters converted to multibyte form. Thus, now we
3253 must convert them back to the original unibyte form. */
3254 v->contents[1] = Fstring_as_unibyte (v->contents[1]);
3255 XSETPVECTYPE (v, PVEC_COMPILED);
3256 }
3257
3258 DEFUN ("make-byte-code", Fmake_byte_code, Smake_byte_code, 4, MANY, 0,
3259 doc: /* Create a byte-code object with specified arguments as elements.
3260 The arguments should be the ARGLIST, bytecode-string BYTE-CODE, constant
3261 vector CONSTANTS, maximum stack size DEPTH, (optional) DOCSTRING,
3262 and (optional) INTERACTIVE-SPEC.
3263 The first four arguments are required; at most six have any
3264 significance.
3265 The ARGLIST can be either like the one of `lambda', in which case the arguments
3266 will be dynamically bound before executing the byte code, or it can be an
3267 integer of the form NNNNNNNRMMMMMMM where the 7bit MMMMMMM specifies the
3268 minimum number of arguments, the 7-bit NNNNNNN specifies the maximum number
3269 of arguments (ignoring &rest) and the R bit specifies whether there is a &rest
3270 argument to catch the left-over arguments. If such an integer is used, the
3271 arguments will not be dynamically bound but will be instead pushed on the
3272 stack before executing the byte-code.
3273 usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INTERACTIVE-SPEC &rest ELEMENTS) */)
3274 (ptrdiff_t nargs, Lisp_Object *args)
3275 {
3276 ptrdiff_t i;
3277 register Lisp_Object val = make_uninit_vector (nargs);
3278 register struct Lisp_Vector *p = XVECTOR (val);
3279
3280 /* We used to purecopy everything here, if purify-flag was set. This worked
3281 OK for Emacs-23, but with Emacs-24's lexical binding code, it can be
3282 dangerous, since make-byte-code is used during execution to build
3283 closures, so any closure built during the preload phase would end up
3284 copied into pure space, including its free variables, which is sometimes
3285 just wasteful and other times plainly wrong (e.g. those free vars may want
3286 to be setcar'd). */
3287
3288 for (i = 0; i < nargs; i++)
3289 p->contents[i] = args[i];
3290 make_byte_code (p);
3291 XSETCOMPILED (val, p);
3292 return val;
3293 }
3294
3295
3296 \f
3297 /***********************************************************************
3298 Symbol Allocation
3299 ***********************************************************************/
3300
3301 /* Like struct Lisp_Symbol, but padded so that the size is a multiple
3302 of the required alignment if LSB tags are used. */
3303
3304 union aligned_Lisp_Symbol
3305 {
3306 struct Lisp_Symbol s;
3307 #if USE_LSB_TAG
3308 unsigned char c[(sizeof (struct Lisp_Symbol) + GCALIGNMENT - 1)
3309 & -GCALIGNMENT];
3310 #endif
3311 };
3312
3313 /* Each symbol_block is just under 1020 bytes long, since malloc
3314 really allocates in units of powers of two and uses 4 bytes for its
3315 own overhead. */
3316
3317 #define SYMBOL_BLOCK_SIZE \
3318 ((1020 - sizeof (struct symbol_block *)) / sizeof (union aligned_Lisp_Symbol))
3319
3320 struct symbol_block
3321 {
3322 /* Place `symbols' first, to preserve alignment. */
3323 union aligned_Lisp_Symbol symbols[SYMBOL_BLOCK_SIZE];
3324 struct symbol_block *next;
3325 };
3326
3327 /* Current symbol block and index of first unused Lisp_Symbol
3328 structure in it. */
3329
3330 static struct symbol_block *symbol_block;
3331 static int symbol_block_index = SYMBOL_BLOCK_SIZE;
3332 /* Pointer to the first symbol_block that contains pinned symbols.
3333 Tests for 24.4 showed that at dump-time, Emacs contains about 15K symbols,
3334 10K of which are pinned (and all but 250 of them are interned in obarray),
3335 whereas a "typical session" has in the order of 30K symbols.
3336 `symbol_block_pinned' lets mark_pinned_symbols scan only 15K symbols rather
3337 than 30K to find the 10K symbols we need to mark. */
3338 static struct symbol_block *symbol_block_pinned;
3339
3340 /* List of free symbols. */
3341
3342 static struct Lisp_Symbol *symbol_free_list;
3343
3344 static void
3345 set_symbol_name (Lisp_Object sym, Lisp_Object name)
3346 {
3347 XSYMBOL (sym)->name = name;
3348 }
3349
3350 void
3351 init_symbol (Lisp_Object val, Lisp_Object name)
3352 {
3353 struct Lisp_Symbol *p = XSYMBOL (val);
3354 set_symbol_name (val, name);
3355 set_symbol_plist (val, Qnil);
3356 p->redirect = SYMBOL_PLAINVAL;
3357 SET_SYMBOL_VAL (p, Qunbound);
3358 set_symbol_function (val, Qnil);
3359 set_symbol_next (val, NULL);
3360 p->gcmarkbit = false;
3361 p->interned = SYMBOL_UNINTERNED;
3362 p->constant = 0;
3363 p->declared_special = false;
3364 p->pinned = false;
3365 }
3366
3367 DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0,
3368 doc: /* Return a newly allocated uninterned symbol whose name is NAME.
3369 Its value is void, and its function definition and property list are nil. */)
3370 (Lisp_Object name)
3371 {
3372 Lisp_Object val;
3373
3374 CHECK_STRING (name);
3375
3376 MALLOC_BLOCK_INPUT;
3377
3378 if (symbol_free_list)
3379 {
3380 XSETSYMBOL (val, symbol_free_list);
3381 symbol_free_list = symbol_free_list->next;
3382 }
3383 else
3384 {
3385 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
3386 {
3387 struct symbol_block *new
3388 = lisp_malloc (sizeof *new, MEM_TYPE_SYMBOL);
3389 new->next = symbol_block;
3390 symbol_block = new;
3391 symbol_block_index = 0;
3392 total_free_symbols += SYMBOL_BLOCK_SIZE;
3393 }
3394 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index].s);
3395 symbol_block_index++;
3396 }
3397
3398 MALLOC_UNBLOCK_INPUT;
3399
3400 init_symbol (val, name);
3401 consing_since_gc += sizeof (struct Lisp_Symbol);
3402 symbols_consed++;
3403 total_free_symbols--;
3404 return val;
3405 }
3406
3407
3408 \f
3409 /***********************************************************************
3410 Marker (Misc) Allocation
3411 ***********************************************************************/
3412
3413 /* Like union Lisp_Misc, but padded so that its size is a multiple of
3414 the required alignment when LSB tags are used. */
3415
3416 union aligned_Lisp_Misc
3417 {
3418 union Lisp_Misc m;
3419 #if USE_LSB_TAG
3420 unsigned char c[(sizeof (union Lisp_Misc) + GCALIGNMENT - 1)
3421 & -GCALIGNMENT];
3422 #endif
3423 };
3424
3425 /* Allocation of markers and other objects that share that structure.
3426 Works like allocation of conses. */
3427
3428 #define MARKER_BLOCK_SIZE \
3429 ((1020 - sizeof (struct marker_block *)) / sizeof (union aligned_Lisp_Misc))
3430
3431 struct marker_block
3432 {
3433 /* Place `markers' first, to preserve alignment. */
3434 union aligned_Lisp_Misc markers[MARKER_BLOCK_SIZE];
3435 struct marker_block *next;
3436 };
3437
3438 static struct marker_block *marker_block;
3439 static int marker_block_index = MARKER_BLOCK_SIZE;
3440
3441 static union Lisp_Misc *marker_free_list;
3442
3443 /* Return a newly allocated Lisp_Misc object of specified TYPE. */
3444
3445 static Lisp_Object
3446 allocate_misc (enum Lisp_Misc_Type type)
3447 {
3448 Lisp_Object val;
3449
3450 MALLOC_BLOCK_INPUT;
3451
3452 if (marker_free_list)
3453 {
3454 XSETMISC (val, marker_free_list);
3455 marker_free_list = marker_free_list->u_free.chain;
3456 }
3457 else
3458 {
3459 if (marker_block_index == MARKER_BLOCK_SIZE)
3460 {
3461 struct marker_block *new = lisp_malloc (sizeof *new, MEM_TYPE_MISC);
3462 new->next = marker_block;
3463 marker_block = new;
3464 marker_block_index = 0;
3465 total_free_markers += MARKER_BLOCK_SIZE;
3466 }
3467 XSETMISC (val, &marker_block->markers[marker_block_index].m);
3468 marker_block_index++;
3469 }
3470
3471 MALLOC_UNBLOCK_INPUT;
3472
3473 --total_free_markers;
3474 consing_since_gc += sizeof (union Lisp_Misc);
3475 misc_objects_consed++;
3476 XMISCANY (val)->type = type;
3477 XMISCANY (val)->gcmarkbit = 0;
3478 return val;
3479 }
3480
3481 /* Free a Lisp_Misc object. */
3482
3483 void
3484 free_misc (Lisp_Object misc)
3485 {
3486 XMISCANY (misc)->type = Lisp_Misc_Free;
3487 XMISC (misc)->u_free.chain = marker_free_list;
3488 marker_free_list = XMISC (misc);
3489 consing_since_gc -= sizeof (union Lisp_Misc);
3490 total_free_markers++;
3491 }
3492
3493 /* Verify properties of Lisp_Save_Value's representation
3494 that are assumed here and elsewhere. */
3495
3496 verify (SAVE_UNUSED == 0);
3497 verify (((SAVE_INTEGER | SAVE_POINTER | SAVE_FUNCPOINTER | SAVE_OBJECT)
3498 >> SAVE_SLOT_BITS)
3499 == 0);
3500
3501 /* Return Lisp_Save_Value objects for the various combinations
3502 that callers need. */
3503
3504 Lisp_Object
3505 make_save_int_int_int (ptrdiff_t a, ptrdiff_t b, ptrdiff_t c)
3506 {
3507 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3508 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3509 p->save_type = SAVE_TYPE_INT_INT_INT;
3510 p->data[0].integer = a;
3511 p->data[1].integer = b;
3512 p->data[2].integer = c;
3513 return val;
3514 }
3515
3516 Lisp_Object
3517 make_save_obj_obj_obj_obj (Lisp_Object a, Lisp_Object b, Lisp_Object c,
3518 Lisp_Object d)
3519 {
3520 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3521 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3522 p->save_type = SAVE_TYPE_OBJ_OBJ_OBJ_OBJ;
3523 p->data[0].object = a;
3524 p->data[1].object = b;
3525 p->data[2].object = c;
3526 p->data[3].object = d;
3527 return val;
3528 }
3529
3530 Lisp_Object
3531 make_save_ptr (void *a)
3532 {
3533 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3534 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3535 p->save_type = SAVE_POINTER;
3536 p->data[0].pointer = a;
3537 return val;
3538 }
3539
3540 Lisp_Object
3541 make_save_ptr_int (void *a, ptrdiff_t b)
3542 {
3543 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3544 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3545 p->save_type = SAVE_TYPE_PTR_INT;
3546 p->data[0].pointer = a;
3547 p->data[1].integer = b;
3548 return val;
3549 }
3550
3551 #if ! (defined USE_X_TOOLKIT || defined USE_GTK)
3552 Lisp_Object
3553 make_save_ptr_ptr (void *a, void *b)
3554 {
3555 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3556 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3557 p->save_type = SAVE_TYPE_PTR_PTR;
3558 p->data[0].pointer = a;
3559 p->data[1].pointer = b;
3560 return val;
3561 }
3562 #endif
3563
3564 Lisp_Object
3565 make_save_funcptr_ptr_obj (void (*a) (void), void *b, Lisp_Object c)
3566 {
3567 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3568 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3569 p->save_type = SAVE_TYPE_FUNCPTR_PTR_OBJ;
3570 p->data[0].funcpointer = a;
3571 p->data[1].pointer = b;
3572 p->data[2].object = c;
3573 return val;
3574 }
3575
3576 /* Return a Lisp_Save_Value object that represents an array A
3577 of N Lisp objects. */
3578
3579 Lisp_Object
3580 make_save_memory (Lisp_Object *a, ptrdiff_t n)
3581 {
3582 Lisp_Object val = allocate_misc (Lisp_Misc_Save_Value);
3583 struct Lisp_Save_Value *p = XSAVE_VALUE (val);
3584 p->save_type = SAVE_TYPE_MEMORY;
3585 p->data[0].pointer = a;
3586 p->data[1].integer = n;
3587 return val;
3588 }
3589
3590 /* Free a Lisp_Save_Value object. Do not use this function
3591 if SAVE contains pointer other than returned by xmalloc. */
3592
3593 void
3594 free_save_value (Lisp_Object save)
3595 {
3596 xfree (XSAVE_POINTER (save, 0));
3597 free_misc (save);
3598 }
3599
3600 /* Return a Lisp_Misc_Overlay object with specified START, END and PLIST. */
3601
3602 Lisp_Object
3603 build_overlay (Lisp_Object start, Lisp_Object end, Lisp_Object plist)
3604 {
3605 register Lisp_Object overlay;
3606
3607 overlay = allocate_misc (Lisp_Misc_Overlay);
3608 OVERLAY_START (overlay) = start;
3609 OVERLAY_END (overlay) = end;
3610 set_overlay_plist (overlay, plist);
3611 XOVERLAY (overlay)->next = NULL;
3612 return overlay;
3613 }
3614
3615 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3616 doc: /* Return a newly allocated marker which does not point at any place. */)
3617 (void)
3618 {
3619 register Lisp_Object val;
3620 register struct Lisp_Marker *p;
3621
3622 val = allocate_misc (Lisp_Misc_Marker);
3623 p = XMARKER (val);
3624 p->buffer = 0;
3625 p->bytepos = 0;
3626 p->charpos = 0;
3627 p->next = NULL;
3628 p->insertion_type = 0;
3629 p->need_adjustment = 0;
3630 return val;
3631 }
3632
3633 /* Return a newly allocated marker which points into BUF
3634 at character position CHARPOS and byte position BYTEPOS. */
3635
3636 Lisp_Object
3637 build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos)
3638 {
3639 Lisp_Object obj;
3640 struct Lisp_Marker *m;
3641
3642 /* No dead buffers here. */
3643 eassert (BUFFER_LIVE_P (buf));
3644
3645 /* Every character is at least one byte. */
3646 eassert (charpos <= bytepos);
3647
3648 obj = allocate_misc (Lisp_Misc_Marker);
3649 m = XMARKER (obj);
3650 m->buffer = buf;
3651 m->charpos = charpos;
3652 m->bytepos = bytepos;
3653 m->insertion_type = 0;
3654 m->need_adjustment = 0;
3655 m->next = BUF_MARKERS (buf);
3656 BUF_MARKERS (buf) = m;
3657 return obj;
3658 }
3659
3660 /* Put MARKER back on the free list after using it temporarily. */
3661
3662 void
3663 free_marker (Lisp_Object marker)
3664 {
3665 unchain_marker (XMARKER (marker));
3666 free_misc (marker);
3667 }
3668
3669 \f
3670 /* Return a newly created vector or string with specified arguments as
3671 elements. If all the arguments are characters that can fit
3672 in a string of events, make a string; otherwise, make a vector.
3673
3674 Any number of arguments, even zero arguments, are allowed. */
3675
3676 Lisp_Object
3677 make_event_array (ptrdiff_t nargs, Lisp_Object *args)
3678 {
3679 ptrdiff_t i;
3680
3681 for (i = 0; i < nargs; i++)
3682 /* The things that fit in a string
3683 are characters that are in 0...127,
3684 after discarding the meta bit and all the bits above it. */
3685 if (!INTEGERP (args[i])
3686 || (XINT (args[i]) & ~(-CHAR_META)) >= 0200)
3687 return Fvector (nargs, args);
3688
3689 /* Since the loop exited, we know that all the things in it are
3690 characters, so we can make a string. */
3691 {
3692 Lisp_Object result;
3693
3694 result = Fmake_string (make_number (nargs), make_number (0));
3695 for (i = 0; i < nargs; i++)
3696 {
3697 SSET (result, i, XINT (args[i]));
3698 /* Move the meta bit to the right place for a string char. */
3699 if (XINT (args[i]) & CHAR_META)
3700 SSET (result, i, SREF (result, i) | 0x80);
3701 }
3702
3703 return result;
3704 }
3705 }
3706
3707 static void
3708 init_finalizer_list (struct Lisp_Finalizer *head)
3709 {
3710 head->prev = head->next = head;
3711 }
3712
3713 /* Insert FINALIZER before ELEMENT. */
3714
3715 static void
3716 finalizer_insert (struct Lisp_Finalizer *element,
3717 struct Lisp_Finalizer *finalizer)
3718 {
3719 eassert (finalizer->prev == NULL);
3720 eassert (finalizer->next == NULL);
3721 finalizer->next = element;
3722 finalizer->prev = element->prev;
3723 finalizer->prev->next = finalizer;
3724 element->prev = finalizer;
3725 }
3726
3727 static void
3728 unchain_finalizer (struct Lisp_Finalizer *finalizer)
3729 {
3730 if (finalizer->prev != NULL)
3731 {
3732 eassert (finalizer->next != NULL);
3733 finalizer->prev->next = finalizer->next;
3734 finalizer->next->prev = finalizer->prev;
3735 finalizer->prev = finalizer->next = NULL;
3736 }
3737 }
3738
3739 static void
3740 mark_finalizer_list (struct Lisp_Finalizer *head)
3741 {
3742 for (struct Lisp_Finalizer *finalizer = head->next;
3743 finalizer != head;
3744 finalizer = finalizer->next)
3745 {
3746 finalizer->base.gcmarkbit = true;
3747 mark_object (finalizer->function);
3748 }
3749 }
3750
3751 /* Move doomed finalizers to list DEST from list SRC. A doomed
3752 finalizer is one that is not GC-reachable and whose
3753 finalizer->function is non-nil. */
3754
3755 static void
3756 queue_doomed_finalizers (struct Lisp_Finalizer *dest,
3757 struct Lisp_Finalizer *src)
3758 {
3759 struct Lisp_Finalizer *finalizer = src->next;
3760 while (finalizer != src)
3761 {
3762 struct Lisp_Finalizer *next = finalizer->next;
3763 if (!finalizer->base.gcmarkbit && !NILP (finalizer->function))
3764 {
3765 unchain_finalizer (finalizer);
3766 finalizer_insert (dest, finalizer);
3767 }
3768
3769 finalizer = next;
3770 }
3771 }
3772
3773 static Lisp_Object
3774 run_finalizer_handler (Lisp_Object args)
3775 {
3776 add_to_log ("finalizer failed: %S", args, Qnil);
3777 return Qnil;
3778 }
3779
3780 static void
3781 run_finalizer_function (Lisp_Object function)
3782 {
3783 struct gcpro gcpro1;
3784 ptrdiff_t count = SPECPDL_INDEX ();
3785
3786 GCPRO1 (function);
3787 specbind (Qinhibit_quit, Qt);
3788 internal_condition_case_1 (call0, function, Qt, run_finalizer_handler);
3789 unbind_to (count, Qnil);
3790 UNGCPRO;
3791 }
3792
3793 static void
3794 run_finalizers (struct Lisp_Finalizer *finalizers)
3795 {
3796 struct Lisp_Finalizer *finalizer;
3797 Lisp_Object function;
3798
3799 while (finalizers->next != finalizers)
3800 {
3801 finalizer = finalizers->next;
3802 eassert (finalizer->base.type == Lisp_Misc_Finalizer);
3803 unchain_finalizer (finalizer);
3804 function = finalizer->function;
3805 if (!NILP (function))
3806 {
3807 finalizer->function = Qnil;
3808 run_finalizer_function (function);
3809 }
3810 }
3811 }
3812
3813 DEFUN ("make-finalizer", Fmake_finalizer, Smake_finalizer, 1, 1, 0,
3814 doc: /* Make a finalizer that will run FUNCTION.
3815 FUNCTION will be called after garbage collection when the returned
3816 finalizer object becomes unreachable. If the finalizer object is
3817 reachable only through references from finalizer objects, it does not
3818 count as reachable for the purpose of deciding whether to run
3819 FUNCTION. FUNCTION will be run once per finalizer object. */)
3820 (Lisp_Object function)
3821 {
3822 Lisp_Object val = allocate_misc (Lisp_Misc_Finalizer);
3823 struct Lisp_Finalizer *finalizer = XFINALIZER (val);
3824 finalizer->function = function;
3825 finalizer->prev = finalizer->next = NULL;
3826 finalizer_insert (&finalizers, finalizer);
3827 return val;
3828 }
3829
3830 \f
3831 /************************************************************************
3832 Memory Full Handling
3833 ************************************************************************/
3834
3835
3836 /* Called if malloc (NBYTES) returns zero. If NBYTES == SIZE_MAX,
3837 there may have been size_t overflow so that malloc was never
3838 called, or perhaps malloc was invoked successfully but the
3839 resulting pointer had problems fitting into a tagged EMACS_INT. In
3840 either case this counts as memory being full even though malloc did
3841 not fail. */
3842
3843 void
3844 memory_full (size_t nbytes)
3845 {
3846 /* Do not go into hysterics merely because a large request failed. */
3847 bool enough_free_memory = 0;
3848 if (SPARE_MEMORY < nbytes)
3849 {
3850 void *p;
3851
3852 MALLOC_BLOCK_INPUT;
3853 p = malloc (SPARE_MEMORY);
3854 if (p)
3855 {
3856 free (p);
3857 enough_free_memory = 1;
3858 }
3859 MALLOC_UNBLOCK_INPUT;
3860 }
3861
3862 if (! enough_free_memory)
3863 {
3864 int i;
3865
3866 Vmemory_full = Qt;
3867
3868 memory_full_cons_threshold = sizeof (struct cons_block);
3869
3870 /* The first time we get here, free the spare memory. */
3871 for (i = 0; i < ARRAYELTS (spare_memory); i++)
3872 if (spare_memory[i])
3873 {
3874 if (i == 0)
3875 free (spare_memory[i]);
3876 else if (i >= 1 && i <= 4)
3877 lisp_align_free (spare_memory[i]);
3878 else
3879 lisp_free (spare_memory[i]);
3880 spare_memory[i] = 0;
3881 }
3882 }
3883
3884 /* This used to call error, but if we've run out of memory, we could
3885 get infinite recursion trying to build the string. */
3886 xsignal (Qnil, Vmemory_signal_data);
3887 }
3888
3889 /* If we released our reserve (due to running out of memory),
3890 and we have a fair amount free once again,
3891 try to set aside another reserve in case we run out once more.
3892
3893 This is called when a relocatable block is freed in ralloc.c,
3894 and also directly from this file, in case we're not using ralloc.c. */
3895
3896 void
3897 refill_memory_reserve (void)
3898 {
3899 #if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
3900 if (spare_memory[0] == 0)
3901 spare_memory[0] = malloc (SPARE_MEMORY);
3902 if (spare_memory[1] == 0)
3903 spare_memory[1] = lisp_align_malloc (sizeof (struct cons_block),
3904 MEM_TYPE_SPARE);
3905 if (spare_memory[2] == 0)
3906 spare_memory[2] = lisp_align_malloc (sizeof (struct cons_block),
3907 MEM_TYPE_SPARE);
3908 if (spare_memory[3] == 0)
3909 spare_memory[3] = lisp_align_malloc (sizeof (struct cons_block),
3910 MEM_TYPE_SPARE);
3911 if (spare_memory[4] == 0)
3912 spare_memory[4] = lisp_align_malloc (sizeof (struct cons_block),
3913 MEM_TYPE_SPARE);
3914 if (spare_memory[5] == 0)
3915 spare_memory[5] = lisp_malloc (sizeof (struct string_block),
3916 MEM_TYPE_SPARE);
3917 if (spare_memory[6] == 0)
3918 spare_memory[6] = lisp_malloc (sizeof (struct string_block),
3919 MEM_TYPE_SPARE);
3920 if (spare_memory[0] && spare_memory[1] && spare_memory[5])
3921 Vmemory_full = Qnil;
3922 #endif
3923 }
3924 \f
3925 /************************************************************************
3926 C Stack Marking
3927 ************************************************************************/
3928
3929 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
3930
3931 /* Conservative C stack marking requires a method to identify possibly
3932 live Lisp objects given a pointer value. We do this by keeping
3933 track of blocks of Lisp data that are allocated in a red-black tree
3934 (see also the comment of mem_node which is the type of nodes in
3935 that tree). Function lisp_malloc adds information for an allocated
3936 block to the red-black tree with calls to mem_insert, and function
3937 lisp_free removes it with mem_delete. Functions live_string_p etc
3938 call mem_find to lookup information about a given pointer in the
3939 tree, and use that to determine if the pointer points to a Lisp
3940 object or not. */
3941
3942 /* Initialize this part of alloc.c. */
3943
3944 static void
3945 mem_init (void)
3946 {
3947 mem_z.left = mem_z.right = MEM_NIL;
3948 mem_z.parent = NULL;
3949 mem_z.color = MEM_BLACK;
3950 mem_z.start = mem_z.end = NULL;
3951 mem_root = MEM_NIL;
3952 }
3953
3954
3955 /* Value is a pointer to the mem_node containing START. Value is
3956 MEM_NIL if there is no node in the tree containing START. */
3957
3958 static struct mem_node *
3959 mem_find (void *start)
3960 {
3961 struct mem_node *p;
3962
3963 if (start < min_heap_address || start > max_heap_address)
3964 return MEM_NIL;
3965
3966 /* Make the search always successful to speed up the loop below. */
3967 mem_z.start = start;
3968 mem_z.end = (char *) start + 1;
3969
3970 p = mem_root;
3971 while (start < p->start || start >= p->end)
3972 p = start < p->start ? p->left : p->right;
3973 return p;
3974 }
3975
3976
3977 /* Insert a new node into the tree for a block of memory with start
3978 address START, end address END, and type TYPE. Value is a
3979 pointer to the node that was inserted. */
3980
3981 static struct mem_node *
3982 mem_insert (void *start, void *end, enum mem_type type)
3983 {
3984 struct mem_node *c, *parent, *x;
3985
3986 if (min_heap_address == NULL || start < min_heap_address)
3987 min_heap_address = start;
3988 if (max_heap_address == NULL || end > max_heap_address)
3989 max_heap_address = end;
3990
3991 /* See where in the tree a node for START belongs. In this
3992 particular application, it shouldn't happen that a node is already
3993 present. For debugging purposes, let's check that. */
3994 c = mem_root;
3995 parent = NULL;
3996
3997 #if GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS
3998
3999 while (c != MEM_NIL)
4000 {
4001 if (start >= c->start && start < c->end)
4002 emacs_abort ();
4003 parent = c;
4004 c = start < c->start ? c->left : c->right;
4005 }
4006
4007 #else /* GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS */
4008
4009 while (c != MEM_NIL)
4010 {
4011 parent = c;
4012 c = start < c->start ? c->left : c->right;
4013 }
4014
4015 #endif /* GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS */
4016
4017 /* Create a new node. */
4018 #ifdef GC_MALLOC_CHECK
4019 x = malloc (sizeof *x);
4020 if (x == NULL)
4021 emacs_abort ();
4022 #else
4023 x = xmalloc (sizeof *x);
4024 #endif
4025 x->start = start;
4026 x->end = end;
4027 x->type = type;
4028 x->parent = parent;
4029 x->left = x->right = MEM_NIL;
4030 x->color = MEM_RED;
4031
4032 /* Insert it as child of PARENT or install it as root. */
4033 if (parent)
4034 {
4035 if (start < parent->start)
4036 parent->left = x;
4037 else
4038 parent->right = x;
4039 }
4040 else
4041 mem_root = x;
4042
4043 /* Re-establish red-black tree properties. */
4044 mem_insert_fixup (x);
4045
4046 return x;
4047 }
4048
4049
4050 /* Re-establish the red-black properties of the tree, and thereby
4051 balance the tree, after node X has been inserted; X is always red. */
4052
4053 static void
4054 mem_insert_fixup (struct mem_node *x)
4055 {
4056 while (x != mem_root && x->parent->color == MEM_RED)
4057 {
4058 /* X is red and its parent is red. This is a violation of
4059 red-black tree property #3. */
4060
4061 if (x->parent == x->parent->parent->left)
4062 {
4063 /* We're on the left side of our grandparent, and Y is our
4064 "uncle". */
4065 struct mem_node *y = x->parent->parent->right;
4066
4067 if (y->color == MEM_RED)
4068 {
4069 /* Uncle and parent are red but should be black because
4070 X is red. Change the colors accordingly and proceed
4071 with the grandparent. */
4072 x->parent->color = MEM_BLACK;
4073 y->color = MEM_BLACK;
4074 x->parent->parent->color = MEM_RED;
4075 x = x->parent->parent;
4076 }
4077 else
4078 {
4079 /* Parent and uncle have different colors; parent is
4080 red, uncle is black. */
4081 if (x == x->parent->right)
4082 {
4083 x = x->parent;
4084 mem_rotate_left (x);
4085 }
4086
4087 x->parent->color = MEM_BLACK;
4088 x->parent->parent->color = MEM_RED;
4089 mem_rotate_right (x->parent->parent);
4090 }
4091 }
4092 else
4093 {
4094 /* This is the symmetrical case of above. */
4095 struct mem_node *y = x->parent->parent->left;
4096
4097 if (y->color == MEM_RED)
4098 {
4099 x->parent->color = MEM_BLACK;
4100 y->color = MEM_BLACK;
4101 x->parent->parent->color = MEM_RED;
4102 x = x->parent->parent;
4103 }
4104 else
4105 {
4106 if (x == x->parent->left)
4107 {
4108 x = x->parent;
4109 mem_rotate_right (x);
4110 }
4111
4112 x->parent->color = MEM_BLACK;
4113 x->parent->parent->color = MEM_RED;
4114 mem_rotate_left (x->parent->parent);
4115 }
4116 }
4117 }
4118
4119 /* The root may have been changed to red due to the algorithm. Set
4120 it to black so that property #5 is satisfied. */
4121 mem_root->color = MEM_BLACK;
4122 }
4123
4124
4125 /* (x) (y)
4126 / \ / \
4127 a (y) ===> (x) c
4128 / \ / \
4129 b c a b */
4130
4131 static void
4132 mem_rotate_left (struct mem_node *x)
4133 {
4134 struct mem_node *y;
4135
4136 /* Turn y's left sub-tree into x's right sub-tree. */
4137 y = x->right;
4138 x->right = y->left;
4139 if (y->left != MEM_NIL)
4140 y->left->parent = x;
4141
4142 /* Y's parent was x's parent. */
4143 if (y != MEM_NIL)
4144 y->parent = x->parent;
4145
4146 /* Get the parent to point to y instead of x. */
4147 if (x->parent)
4148 {
4149 if (x == x->parent->left)
4150 x->parent->left = y;
4151 else
4152 x->parent->right = y;
4153 }
4154 else
4155 mem_root = y;
4156
4157 /* Put x on y's left. */
4158 y->left = x;
4159 if (x != MEM_NIL)
4160 x->parent = y;
4161 }
4162
4163
4164 /* (x) (Y)
4165 / \ / \
4166 (y) c ===> a (x)
4167 / \ / \
4168 a b b c */
4169
4170 static void
4171 mem_rotate_right (struct mem_node *x)
4172 {
4173 struct mem_node *y = x->left;
4174
4175 x->left = y->right;
4176 if (y->right != MEM_NIL)
4177 y->right->parent = x;
4178
4179 if (y != MEM_NIL)
4180 y->parent = x->parent;
4181 if (x->parent)
4182 {
4183 if (x == x->parent->right)
4184 x->parent->right = y;
4185 else
4186 x->parent->left = y;
4187 }
4188 else
4189 mem_root = y;
4190
4191 y->right = x;
4192 if (x != MEM_NIL)
4193 x->parent = y;
4194 }
4195
4196
4197 /* Delete node Z from the tree. If Z is null or MEM_NIL, do nothing. */
4198
4199 static void
4200 mem_delete (struct mem_node *z)
4201 {
4202 struct mem_node *x, *y;
4203
4204 if (!z || z == MEM_NIL)
4205 return;
4206
4207 if (z->left == MEM_NIL || z->right == MEM_NIL)
4208 y = z;
4209 else
4210 {
4211 y = z->right;
4212 while (y->left != MEM_NIL)
4213 y = y->left;
4214 }
4215
4216 if (y->left != MEM_NIL)
4217 x = y->left;
4218 else
4219 x = y->right;
4220
4221 x->parent = y->parent;
4222 if (y->parent)
4223 {
4224 if (y == y->parent->left)
4225 y->parent->left = x;
4226 else
4227 y->parent->right = x;
4228 }
4229 else
4230 mem_root = x;
4231
4232 if (y != z)
4233 {
4234 z->start = y->start;
4235 z->end = y->end;
4236 z->type = y->type;
4237 }
4238
4239 if (y->color == MEM_BLACK)
4240 mem_delete_fixup (x);
4241
4242 #ifdef GC_MALLOC_CHECK
4243 free (y);
4244 #else
4245 xfree (y);
4246 #endif
4247 }
4248
4249
4250 /* Re-establish the red-black properties of the tree, after a
4251 deletion. */
4252
4253 static void
4254 mem_delete_fixup (struct mem_node *x)
4255 {
4256 while (x != mem_root && x->color == MEM_BLACK)
4257 {
4258 if (x == x->parent->left)
4259 {
4260 struct mem_node *w = x->parent->right;
4261
4262 if (w->color == MEM_RED)
4263 {
4264 w->color = MEM_BLACK;
4265 x->parent->color = MEM_RED;
4266 mem_rotate_left (x->parent);
4267 w = x->parent->right;
4268 }
4269
4270 if (w->left->color == MEM_BLACK && w->right->color == MEM_BLACK)
4271 {
4272 w->color = MEM_RED;
4273 x = x->parent;
4274 }
4275 else
4276 {
4277 if (w->right->color == MEM_BLACK)
4278 {
4279 w->left->color = MEM_BLACK;
4280 w->color = MEM_RED;
4281 mem_rotate_right (w);
4282 w = x->parent->right;
4283 }
4284 w->color = x->parent->color;
4285 x->parent->color = MEM_BLACK;
4286 w->right->color = MEM_BLACK;
4287 mem_rotate_left (x->parent);
4288 x = mem_root;
4289 }
4290 }
4291 else
4292 {
4293 struct mem_node *w = x->parent->left;
4294
4295 if (w->color == MEM_RED)
4296 {
4297 w->color = MEM_BLACK;
4298 x->parent->color = MEM_RED;
4299 mem_rotate_right (x->parent);
4300 w = x->parent->left;
4301 }
4302
4303 if (w->right->color == MEM_BLACK && w->left->color == MEM_BLACK)
4304 {
4305 w->color = MEM_RED;
4306 x = x->parent;
4307 }
4308 else
4309 {
4310 if (w->left->color == MEM_BLACK)
4311 {
4312 w->right->color = MEM_BLACK;
4313 w->color = MEM_RED;
4314 mem_rotate_left (w);
4315 w = x->parent->left;
4316 }
4317
4318 w->color = x->parent->color;
4319 x->parent->color = MEM_BLACK;
4320 w->left->color = MEM_BLACK;
4321 mem_rotate_right (x->parent);
4322 x = mem_root;
4323 }
4324 }
4325 }
4326
4327 x->color = MEM_BLACK;
4328 }
4329
4330
4331 /* Value is non-zero if P is a pointer to a live Lisp string on
4332 the heap. M is a pointer to the mem_block for P. */
4333
4334 static bool
4335 live_string_p (struct mem_node *m, void *p)
4336 {
4337 if (m->type == MEM_TYPE_STRING)
4338 {
4339 struct string_block *b = m->start;
4340 ptrdiff_t offset = (char *) p - (char *) &b->strings[0];
4341
4342 /* P must point to the start of a Lisp_String structure, and it
4343 must not be on the free-list. */
4344 return (offset >= 0
4345 && offset % sizeof b->strings[0] == 0
4346 && offset < (STRING_BLOCK_SIZE * sizeof b->strings[0])
4347 && ((struct Lisp_String *) p)->data != NULL);
4348 }
4349 else
4350 return 0;
4351 }
4352
4353
4354 /* Value is non-zero if P is a pointer to a live Lisp cons on
4355 the heap. M is a pointer to the mem_block for P. */
4356
4357 static bool
4358 live_cons_p (struct mem_node *m, void *p)
4359 {
4360 if (m->type == MEM_TYPE_CONS)
4361 {
4362 struct cons_block *b = m->start;
4363 ptrdiff_t offset = (char *) p - (char *) &b->conses[0];
4364
4365 /* P must point to the start of a Lisp_Cons, not be
4366 one of the unused cells in the current cons block,
4367 and not be on the free-list. */
4368 return (offset >= 0
4369 && offset % sizeof b->conses[0] == 0
4370 && offset < (CONS_BLOCK_SIZE * sizeof b->conses[0])
4371 && (b != cons_block
4372 || offset / sizeof b->conses[0] < cons_block_index)
4373 && !EQ (((struct Lisp_Cons *) p)->car, Vdead));
4374 }
4375 else
4376 return 0;
4377 }
4378
4379
4380 /* Value is non-zero if P is a pointer to a live Lisp symbol on
4381 the heap. M is a pointer to the mem_block for P. */
4382
4383 static bool
4384 live_symbol_p (struct mem_node *m, void *p)
4385 {
4386 if (m->type == MEM_TYPE_SYMBOL)
4387 {
4388 struct symbol_block *b = m->start;
4389 ptrdiff_t offset = (char *) p - (char *) &b->symbols[0];
4390
4391 /* P must point to the start of a Lisp_Symbol, not be
4392 one of the unused cells in the current symbol block,
4393 and not be on the free-list. */
4394 return (offset >= 0
4395 && offset % sizeof b->symbols[0] == 0
4396 && offset < (SYMBOL_BLOCK_SIZE * sizeof b->symbols[0])
4397 && (b != symbol_block
4398 || offset / sizeof b->symbols[0] < symbol_block_index)
4399 && !EQ (((struct Lisp_Symbol *)p)->function, Vdead));
4400 }
4401 else
4402 return 0;
4403 }
4404
4405
4406 /* Value is non-zero if P is a pointer to a live Lisp float on
4407 the heap. M is a pointer to the mem_block for P. */
4408
4409 static bool
4410 live_float_p (struct mem_node *m, void *p)
4411 {
4412 if (m->type == MEM_TYPE_FLOAT)
4413 {
4414 struct float_block *b = m->start;
4415 ptrdiff_t offset = (char *) p - (char *) &b->floats[0];
4416
4417 /* P must point to the start of a Lisp_Float and not be
4418 one of the unused cells in the current float block. */
4419 return (offset >= 0
4420 && offset % sizeof b->floats[0] == 0
4421 && offset < (FLOAT_BLOCK_SIZE * sizeof b->floats[0])
4422 && (b != float_block
4423 || offset / sizeof b->floats[0] < float_block_index));
4424 }
4425 else
4426 return 0;
4427 }
4428
4429
4430 /* Value is non-zero if P is a pointer to a live Lisp Misc on
4431 the heap. M is a pointer to the mem_block for P. */
4432
4433 static bool
4434 live_misc_p (struct mem_node *m, void *p)
4435 {
4436 if (m->type == MEM_TYPE_MISC)
4437 {
4438 struct marker_block *b = m->start;
4439 ptrdiff_t offset = (char *) p - (char *) &b->markers[0];
4440
4441 /* P must point to the start of a Lisp_Misc, not be
4442 one of the unused cells in the current misc block,
4443 and not be on the free-list. */
4444 return (offset >= 0
4445 && offset % sizeof b->markers[0] == 0
4446 && offset < (MARKER_BLOCK_SIZE * sizeof b->markers[0])
4447 && (b != marker_block
4448 || offset / sizeof b->markers[0] < marker_block_index)
4449 && ((union Lisp_Misc *) p)->u_any.type != Lisp_Misc_Free);
4450 }
4451 else
4452 return 0;
4453 }
4454
4455
4456 /* Value is non-zero if P is a pointer to a live vector-like object.
4457 M is a pointer to the mem_block for P. */
4458
4459 static bool
4460 live_vector_p (struct mem_node *m, void *p)
4461 {
4462 if (m->type == MEM_TYPE_VECTOR_BLOCK)
4463 {
4464 /* This memory node corresponds to a vector block. */
4465 struct vector_block *block = m->start;
4466 struct Lisp_Vector *vector = (struct Lisp_Vector *) block->data;
4467
4468 /* P is in the block's allocation range. Scan the block
4469 up to P and see whether P points to the start of some
4470 vector which is not on a free list. FIXME: check whether
4471 some allocation patterns (probably a lot of short vectors)
4472 may cause a substantial overhead of this loop. */
4473 while (VECTOR_IN_BLOCK (vector, block)
4474 && vector <= (struct Lisp_Vector *) p)
4475 {
4476 if (!PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE) && vector == p)
4477 return 1;
4478 else
4479 vector = ADVANCE (vector, vector_nbytes (vector));
4480 }
4481 }
4482 else if (m->type == MEM_TYPE_VECTORLIKE && p == large_vector_vec (m->start))
4483 /* This memory node corresponds to a large vector. */
4484 return 1;
4485 return 0;
4486 }
4487
4488
4489 /* Value is non-zero if P is a pointer to a live buffer. M is a
4490 pointer to the mem_block for P. */
4491
4492 static bool
4493 live_buffer_p (struct mem_node *m, void *p)
4494 {
4495 /* P must point to the start of the block, and the buffer
4496 must not have been killed. */
4497 return (m->type == MEM_TYPE_BUFFER
4498 && p == m->start
4499 && !NILP (((struct buffer *) p)->INTERNAL_FIELD (name)));
4500 }
4501
4502 #endif /* GC_MARK_STACK || defined GC_MALLOC_CHECK */
4503
4504 #if GC_MARK_STACK
4505
4506 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4507
4508 /* Currently not used, but may be called from gdb. */
4509
4510 void dump_zombies (void) EXTERNALLY_VISIBLE;
4511
4512 /* Array of objects that are kept alive because the C stack contains
4513 a pattern that looks like a reference to them. */
4514
4515 #define MAX_ZOMBIES 10
4516 static Lisp_Object zombies[MAX_ZOMBIES];
4517
4518 /* Number of zombie objects. */
4519
4520 static EMACS_INT nzombies;
4521
4522 /* Number of garbage collections. */
4523
4524 static EMACS_INT ngcs;
4525
4526 /* Average percentage of zombies per collection. */
4527
4528 static double avg_zombies;
4529
4530 /* Max. number of live and zombie objects. */
4531
4532 static EMACS_INT max_live, max_zombies;
4533
4534 /* Average number of live objects per GC. */
4535
4536 static double avg_live;
4537
4538 DEFUN ("gc-status", Fgc_status, Sgc_status, 0, 0, "",
4539 doc: /* Show information about live and zombie objects. */)
4540 (void)
4541 {
4542 Lisp_Object zombie_list = Qnil;
4543 for (int i = 0; i < min (MAX_ZOMBIES, nzombies); i++)
4544 zombie_list = Fcons (zombies[i], zombie_list);
4545 return CALLN (Fmessage,
4546 build_string ("%d GCs, avg live/zombies = %.2f/%.2f"
4547 " (%f%%), max %d/%d\nzombies: %S"),
4548 make_number (ngcs), make_float (avg_live),
4549 make_float (avg_zombies),
4550 make_float (avg_zombies / avg_live / 100),
4551 make_number (max_live), make_number (max_zombies),
4552 zombie_list);
4553 }
4554
4555 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
4556
4557
4558 /* Mark OBJ if we can prove it's a Lisp_Object. */
4559
4560 static void
4561 mark_maybe_object (Lisp_Object obj)
4562 {
4563 void *po;
4564 struct mem_node *m;
4565
4566 #if USE_VALGRIND
4567 if (valgrind_p)
4568 VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
4569 #endif
4570
4571 if (INTEGERP (obj))
4572 return;
4573
4574 po = (void *) XPNTR (obj);
4575 m = mem_find (po);
4576
4577 if (m != MEM_NIL)
4578 {
4579 bool mark_p = 0;
4580
4581 switch (XTYPE (obj))
4582 {
4583 case Lisp_String:
4584 mark_p = (live_string_p (m, po)
4585 && !STRING_MARKED_P ((struct Lisp_String *) po));
4586 break;
4587
4588 case Lisp_Cons:
4589 mark_p = (live_cons_p (m, po) && !CONS_MARKED_P (XCONS (obj)));
4590 break;
4591
4592 case Lisp_Symbol:
4593 mark_p = (live_symbol_p (m, po) && !XSYMBOL (obj)->gcmarkbit);
4594 break;
4595
4596 case Lisp_Float:
4597 mark_p = (live_float_p (m, po) && !FLOAT_MARKED_P (XFLOAT (obj)));
4598 break;
4599
4600 case Lisp_Vectorlike:
4601 /* Note: can't check BUFFERP before we know it's a
4602 buffer because checking that dereferences the pointer
4603 PO which might point anywhere. */
4604 if (live_vector_p (m, po))
4605 mark_p = !SUBRP (obj) && !VECTOR_MARKED_P (XVECTOR (obj));
4606 else if (live_buffer_p (m, po))
4607 mark_p = BUFFERP (obj) && !VECTOR_MARKED_P (XBUFFER (obj));
4608 break;
4609
4610 case Lisp_Misc:
4611 mark_p = (live_misc_p (m, po) && !XMISCANY (obj)->gcmarkbit);
4612 break;
4613
4614 default:
4615 break;
4616 }
4617
4618 if (mark_p)
4619 {
4620 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4621 if (nzombies < MAX_ZOMBIES)
4622 zombies[nzombies] = obj;
4623 ++nzombies;
4624 #endif
4625 mark_object (obj);
4626 }
4627 }
4628 }
4629
4630 /* Return true if P can point to Lisp data, and false otherwise.
4631 USE_LSB_TAG needs Lisp data to be aligned on multiples of GCALIGNMENT.
4632 Otherwise, assume that Lisp data is aligned on even addresses. */
4633
4634 static bool
4635 maybe_lisp_pointer (void *p)
4636 {
4637 return !((intptr_t) p % (USE_LSB_TAG ? GCALIGNMENT : 2));
4638 }
4639
4640 /* If P points to Lisp data, mark that as live if it isn't already
4641 marked. */
4642
4643 static void
4644 mark_maybe_pointer (void *p)
4645 {
4646 struct mem_node *m;
4647
4648 #if USE_VALGRIND
4649 if (valgrind_p)
4650 VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
4651 #endif
4652
4653 if (!maybe_lisp_pointer (p))
4654 return;
4655
4656 m = mem_find (p);
4657 if (m != MEM_NIL)
4658 {
4659 Lisp_Object obj = Qnil;
4660
4661 switch (m->type)
4662 {
4663 case MEM_TYPE_NON_LISP:
4664 case MEM_TYPE_SPARE:
4665 /* Nothing to do; not a pointer to Lisp memory. */
4666 break;
4667
4668 case MEM_TYPE_BUFFER:
4669 if (live_buffer_p (m, p) && !VECTOR_MARKED_P ((struct buffer *)p))
4670 XSETVECTOR (obj, p);
4671 break;
4672
4673 case MEM_TYPE_CONS:
4674 if (live_cons_p (m, p) && !CONS_MARKED_P ((struct Lisp_Cons *) p))
4675 XSETCONS (obj, p);
4676 break;
4677
4678 case MEM_TYPE_STRING:
4679 if (live_string_p (m, p)
4680 && !STRING_MARKED_P ((struct Lisp_String *) p))
4681 XSETSTRING (obj, p);
4682 break;
4683
4684 case MEM_TYPE_MISC:
4685 if (live_misc_p (m, p) && !((struct Lisp_Free *) p)->gcmarkbit)
4686 XSETMISC (obj, p);
4687 break;
4688
4689 case MEM_TYPE_SYMBOL:
4690 if (live_symbol_p (m, p) && !((struct Lisp_Symbol *) p)->gcmarkbit)
4691 XSETSYMBOL (obj, p);
4692 break;
4693
4694 case MEM_TYPE_FLOAT:
4695 if (live_float_p (m, p) && !FLOAT_MARKED_P (p))
4696 XSETFLOAT (obj, p);
4697 break;
4698
4699 case MEM_TYPE_VECTORLIKE:
4700 case MEM_TYPE_VECTOR_BLOCK:
4701 if (live_vector_p (m, p))
4702 {
4703 Lisp_Object tem;
4704 XSETVECTOR (tem, p);
4705 if (!SUBRP (tem) && !VECTOR_MARKED_P (XVECTOR (tem)))
4706 obj = tem;
4707 }
4708 break;
4709
4710 default:
4711 emacs_abort ();
4712 }
4713
4714 if (!NILP (obj))
4715 mark_object (obj);
4716 }
4717 }
4718
4719
4720 /* Alignment of pointer values. Use alignof, as it sometimes returns
4721 a smaller alignment than GCC's __alignof__ and mark_memory might
4722 miss objects if __alignof__ were used. */
4723 #define GC_POINTER_ALIGNMENT alignof (void *)
4724
4725 /* Define POINTERS_MIGHT_HIDE_IN_OBJECTS to 1 if marking via C pointers does
4726 not suffice, which is the typical case. A host where a Lisp_Object is
4727 wider than a pointer might allocate a Lisp_Object in non-adjacent halves.
4728 If USE_LSB_TAG, the bottom half is not a valid pointer, but it should
4729 suffice to widen it to to a Lisp_Object and check it that way. */
4730 #if USE_LSB_TAG || VAL_MAX < UINTPTR_MAX
4731 # if !USE_LSB_TAG && VAL_MAX < UINTPTR_MAX >> GCTYPEBITS
4732 /* If tag bits straddle pointer-word boundaries, neither mark_maybe_pointer
4733 nor mark_maybe_object can follow the pointers. This should not occur on
4734 any practical porting target. */
4735 # error "MSB type bits straddle pointer-word boundaries"
4736 # endif
4737 /* Marking via C pointers does not suffice, because Lisp_Objects contain
4738 pointer words that hold pointers ORed with type bits. */
4739 # define POINTERS_MIGHT_HIDE_IN_OBJECTS 1
4740 #else
4741 /* Marking via C pointers suffices, because Lisp_Objects contain pointer
4742 words that hold unmodified pointers. */
4743 # define POINTERS_MIGHT_HIDE_IN_OBJECTS 0
4744 #endif
4745
4746 /* Mark Lisp objects referenced from the address range START+OFFSET..END
4747 or END+OFFSET..START. */
4748
4749 static void ATTRIBUTE_NO_SANITIZE_ADDRESS
4750 mark_memory (void *start, void *end)
4751 {
4752 void **pp;
4753 int i;
4754
4755 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4756 nzombies = 0;
4757 #endif
4758
4759 /* Make START the pointer to the start of the memory region,
4760 if it isn't already. */
4761 if (end < start)
4762 {
4763 void *tem = start;
4764 start = end;
4765 end = tem;
4766 }
4767
4768 /* Mark Lisp data pointed to. This is necessary because, in some
4769 situations, the C compiler optimizes Lisp objects away, so that
4770 only a pointer to them remains. Example:
4771
4772 DEFUN ("testme", Ftestme, Stestme, 0, 0, 0, "")
4773 ()
4774 {
4775 Lisp_Object obj = build_string ("test");
4776 struct Lisp_String *s = XSTRING (obj);
4777 Fgarbage_collect ();
4778 fprintf (stderr, "test `%s'\n", s->data);
4779 return Qnil;
4780 }
4781
4782 Here, `obj' isn't really used, and the compiler optimizes it
4783 away. The only reference to the life string is through the
4784 pointer `s'. */
4785
4786 for (pp = start; (void *) pp < end; pp++)
4787 for (i = 0; i < sizeof *pp; i += GC_POINTER_ALIGNMENT)
4788 {
4789 void *p = *(void **) ((char *) pp + i);
4790 mark_maybe_pointer (p);
4791 if (POINTERS_MIGHT_HIDE_IN_OBJECTS)
4792 mark_maybe_object (XIL ((intptr_t) p));
4793 }
4794 }
4795
4796 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
4797
4798 static bool setjmp_tested_p;
4799 static int longjmps_done;
4800
4801 #define SETJMP_WILL_LIKELY_WORK "\
4802 \n\
4803 Emacs garbage collector has been changed to use conservative stack\n\
4804 marking. Emacs has determined that the method it uses to do the\n\
4805 marking will likely work on your system, but this isn't sure.\n\
4806 \n\
4807 If you are a system-programmer, or can get the help of a local wizard\n\
4808 who is, please take a look at the function mark_stack in alloc.c, and\n\
4809 verify that the methods used are appropriate for your system.\n\
4810 \n\
4811 Please mail the result to <emacs-devel@gnu.org>.\n\
4812 "
4813
4814 #define SETJMP_WILL_NOT_WORK "\
4815 \n\
4816 Emacs garbage collector has been changed to use conservative stack\n\
4817 marking. Emacs has determined that the default method it uses to do the\n\
4818 marking will not work on your system. We will need a system-dependent\n\
4819 solution for your system.\n\
4820 \n\
4821 Please take a look at the function mark_stack in alloc.c, and\n\
4822 try to find a way to make it work on your system.\n\
4823 \n\
4824 Note that you may get false negatives, depending on the compiler.\n\
4825 In particular, you need to use -O with GCC for this test.\n\
4826 \n\
4827 Please mail the result to <emacs-devel@gnu.org>.\n\
4828 "
4829
4830
4831 /* Perform a quick check if it looks like setjmp saves registers in a
4832 jmp_buf. Print a message to stderr saying so. When this test
4833 succeeds, this is _not_ a proof that setjmp is sufficient for
4834 conservative stack marking. Only the sources or a disassembly
4835 can prove that. */
4836
4837 static void
4838 test_setjmp (void)
4839 {
4840 char buf[10];
4841 register int x;
4842 sys_jmp_buf jbuf;
4843
4844 /* Arrange for X to be put in a register. */
4845 sprintf (buf, "1");
4846 x = strlen (buf);
4847 x = 2 * x - 1;
4848
4849 sys_setjmp (jbuf);
4850 if (longjmps_done == 1)
4851 {
4852 /* Came here after the longjmp at the end of the function.
4853
4854 If x == 1, the longjmp has restored the register to its
4855 value before the setjmp, and we can hope that setjmp
4856 saves all such registers in the jmp_buf, although that
4857 isn't sure.
4858
4859 For other values of X, either something really strange is
4860 taking place, or the setjmp just didn't save the register. */
4861
4862 if (x == 1)
4863 fprintf (stderr, SETJMP_WILL_LIKELY_WORK);
4864 else
4865 {
4866 fprintf (stderr, SETJMP_WILL_NOT_WORK);
4867 exit (1);
4868 }
4869 }
4870
4871 ++longjmps_done;
4872 x = 2;
4873 if (longjmps_done == 1)
4874 sys_longjmp (jbuf, 1);
4875 }
4876
4877 #endif /* not GC_SAVE_REGISTERS_ON_STACK && not GC_SETJMP_WORKS */
4878
4879
4880 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
4881
4882 /* Abort if anything GCPRO'd doesn't survive the GC. */
4883
4884 static void
4885 check_gcpros (void)
4886 {
4887 struct gcpro *p;
4888 ptrdiff_t i;
4889
4890 for (p = gcprolist; p; p = p->next)
4891 for (i = 0; i < p->nvars; ++i)
4892 if (!survives_gc_p (p->var[i]))
4893 /* FIXME: It's not necessarily a bug. It might just be that the
4894 GCPRO is unnecessary or should release the object sooner. */
4895 emacs_abort ();
4896 }
4897
4898 #elif GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4899
4900 void
4901 dump_zombies (void)
4902 {
4903 int i;
4904
4905 fprintf (stderr, "\nZombies kept alive = %"pI"d:\n", nzombies);
4906 for (i = 0; i < min (MAX_ZOMBIES, nzombies); ++i)
4907 {
4908 fprintf (stderr, " %d = ", i);
4909 debug_print (zombies[i]);
4910 }
4911 }
4912
4913 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
4914
4915
4916 /* Mark live Lisp objects on the C stack.
4917
4918 There are several system-dependent problems to consider when
4919 porting this to new architectures:
4920
4921 Processor Registers
4922
4923 We have to mark Lisp objects in CPU registers that can hold local
4924 variables or are used to pass parameters.
4925
4926 If GC_SAVE_REGISTERS_ON_STACK is defined, it should expand to
4927 something that either saves relevant registers on the stack, or
4928 calls mark_maybe_object passing it each register's contents.
4929
4930 If GC_SAVE_REGISTERS_ON_STACK is not defined, the current
4931 implementation assumes that calling setjmp saves registers we need
4932 to see in a jmp_buf which itself lies on the stack. This doesn't
4933 have to be true! It must be verified for each system, possibly
4934 by taking a look at the source code of setjmp.
4935
4936 If __builtin_unwind_init is available (defined by GCC >= 2.8) we
4937 can use it as a machine independent method to store all registers
4938 to the stack. In this case the macros described in the previous
4939 two paragraphs are not used.
4940
4941 Stack Layout
4942
4943 Architectures differ in the way their processor stack is organized.
4944 For example, the stack might look like this
4945
4946 +----------------+
4947 | Lisp_Object | size = 4
4948 +----------------+
4949 | something else | size = 2
4950 +----------------+
4951 | Lisp_Object | size = 4
4952 +----------------+
4953 | ... |
4954
4955 In such a case, not every Lisp_Object will be aligned equally. To
4956 find all Lisp_Object on the stack it won't be sufficient to walk
4957 the stack in steps of 4 bytes. Instead, two passes will be
4958 necessary, one starting at the start of the stack, and a second
4959 pass starting at the start of the stack + 2. Likewise, if the
4960 minimal alignment of Lisp_Objects on the stack is 1, four passes
4961 would be necessary, each one starting with one byte more offset
4962 from the stack start. */
4963
4964 static void
4965 mark_stack (void *end)
4966 {
4967
4968 /* This assumes that the stack is a contiguous region in memory. If
4969 that's not the case, something has to be done here to iterate
4970 over the stack segments. */
4971 mark_memory (stack_base, end);
4972
4973 /* Allow for marking a secondary stack, like the register stack on the
4974 ia64. */
4975 #ifdef GC_MARK_SECONDARY_STACK
4976 GC_MARK_SECONDARY_STACK ();
4977 #endif
4978
4979 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
4980 check_gcpros ();
4981 #endif
4982 }
4983
4984 #else /* GC_MARK_STACK == 0 */
4985
4986 #define mark_maybe_object(obj) emacs_abort ()
4987
4988 #endif /* GC_MARK_STACK != 0 */
4989
4990 static bool
4991 c_symbol_p (struct Lisp_Symbol *sym)
4992 {
4993 char *lispsym_ptr = (char *) lispsym;
4994 char *sym_ptr = (char *) sym;
4995 ptrdiff_t lispsym_offset = sym_ptr - lispsym_ptr;
4996 return 0 <= lispsym_offset && lispsym_offset < sizeof lispsym;
4997 }
4998
4999 /* Determine whether it is safe to access memory at address P. */
5000 static int
5001 valid_pointer_p (void *p)
5002 {
5003 #ifdef WINDOWSNT
5004 return w32_valid_pointer_p (p, 16);
5005 #else
5006
5007 if (ADDRESS_SANITIZER)
5008 return p ? -1 : 0;
5009
5010 int fd[2];
5011
5012 /* Obviously, we cannot just access it (we would SEGV trying), so we
5013 trick the o/s to tell us whether p is a valid pointer.
5014 Unfortunately, we cannot use NULL_DEVICE here, as emacs_write may
5015 not validate p in that case. */
5016
5017 if (emacs_pipe (fd) == 0)
5018 {
5019 bool valid = emacs_write (fd[1], p, 16) == 16;
5020 emacs_close (fd[1]);
5021 emacs_close (fd[0]);
5022 return valid;
5023 }
5024
5025 return -1;
5026 #endif
5027 }
5028
5029 /* Return 2 if OBJ is a killed or special buffer object, 1 if OBJ is a
5030 valid lisp object, 0 if OBJ is NOT a valid lisp object, or -1 if we
5031 cannot validate OBJ. This function can be quite slow, so its primary
5032 use is the manual debugging. The only exception is print_object, where
5033 we use it to check whether the memory referenced by the pointer of
5034 Lisp_Save_Value object contains valid objects. */
5035
5036 int
5037 valid_lisp_object_p (Lisp_Object obj)
5038 {
5039 void *p;
5040 #if GC_MARK_STACK
5041 struct mem_node *m;
5042 #endif
5043
5044 if (INTEGERP (obj))
5045 return 1;
5046
5047 p = (void *) XPNTR (obj);
5048 if (PURE_POINTER_P (p))
5049 return 1;
5050
5051 if (SYMBOLP (obj) && c_symbol_p (p))
5052 return ((char *) p - (char *) lispsym) % sizeof lispsym[0] == 0;
5053
5054 if (p == &buffer_defaults || p == &buffer_local_symbols)
5055 return 2;
5056
5057 #if !GC_MARK_STACK
5058 return valid_pointer_p (p);
5059 #else
5060
5061 m = mem_find (p);
5062
5063 if (m == MEM_NIL)
5064 {
5065 int valid = valid_pointer_p (p);
5066 if (valid <= 0)
5067 return valid;
5068
5069 if (SUBRP (obj))
5070 return 1;
5071
5072 return 0;
5073 }
5074
5075 switch (m->type)
5076 {
5077 case MEM_TYPE_NON_LISP:
5078 case MEM_TYPE_SPARE:
5079 return 0;
5080
5081 case MEM_TYPE_BUFFER:
5082 return live_buffer_p (m, p) ? 1 : 2;
5083
5084 case MEM_TYPE_CONS:
5085 return live_cons_p (m, p);
5086
5087 case MEM_TYPE_STRING:
5088 return live_string_p (m, p);
5089
5090 case MEM_TYPE_MISC:
5091 return live_misc_p (m, p);
5092
5093 case MEM_TYPE_SYMBOL:
5094 return live_symbol_p (m, p);
5095
5096 case MEM_TYPE_FLOAT:
5097 return live_float_p (m, p);
5098
5099 case MEM_TYPE_VECTORLIKE:
5100 case MEM_TYPE_VECTOR_BLOCK:
5101 return live_vector_p (m, p);
5102
5103 default:
5104 break;
5105 }
5106
5107 return 0;
5108 #endif
5109 }
5110
5111 /* If GC_MARK_STACK, return 1 if STR is a relocatable data of Lisp_String
5112 (i.e. there is a non-pure Lisp_Object X so that SDATA (X) == STR) and 0
5113 if not. Otherwise we can't rely on valid_lisp_object_p and return -1.
5114 This function is slow and should be used for debugging purposes. */
5115
5116 int
5117 relocatable_string_data_p (const char *str)
5118 {
5119 if (PURE_POINTER_P (str))
5120 return 0;
5121 #if GC_MARK_STACK
5122 if (str)
5123 {
5124 struct sdata *sdata
5125 = (struct sdata *) (str - offsetof (struct sdata, data));
5126
5127 if (0 < valid_pointer_p (sdata)
5128 && 0 < valid_pointer_p (sdata->string)
5129 && maybe_lisp_pointer (sdata->string))
5130 return (valid_lisp_object_p
5131 (make_lisp_ptr (sdata->string, Lisp_String))
5132 && (const char *) sdata->string->data == str);
5133 }
5134 return 0;
5135 #endif /* GC_MARK_STACK */
5136 return -1;
5137 }
5138
5139 /***********************************************************************
5140 Pure Storage Management
5141 ***********************************************************************/
5142
5143 /* Allocate room for SIZE bytes from pure Lisp storage and return a
5144 pointer to it. TYPE is the Lisp type for which the memory is
5145 allocated. TYPE < 0 means it's not used for a Lisp object. */
5146
5147 static void *
5148 pure_alloc (size_t size, int type)
5149 {
5150 void *result;
5151 #if USE_LSB_TAG
5152 size_t alignment = GCALIGNMENT;
5153 #else
5154 size_t alignment = alignof (EMACS_INT);
5155
5156 /* Give Lisp_Floats an extra alignment. */
5157 if (type == Lisp_Float)
5158 alignment = alignof (struct Lisp_Float);
5159 #endif
5160
5161 again:
5162 if (type >= 0)
5163 {
5164 /* Allocate space for a Lisp object from the beginning of the free
5165 space with taking account of alignment. */
5166 result = ALIGN (purebeg + pure_bytes_used_lisp, alignment);
5167 pure_bytes_used_lisp = ((char *)result - (char *)purebeg) + size;
5168 }
5169 else
5170 {
5171 /* Allocate space for a non-Lisp object from the end of the free
5172 space. */
5173 pure_bytes_used_non_lisp += size;
5174 result = purebeg + pure_size - pure_bytes_used_non_lisp;
5175 }
5176 pure_bytes_used = pure_bytes_used_lisp + pure_bytes_used_non_lisp;
5177
5178 if (pure_bytes_used <= pure_size)
5179 return result;
5180
5181 /* Don't allocate a large amount here,
5182 because it might get mmap'd and then its address
5183 might not be usable. */
5184 purebeg = xmalloc (10000);
5185 pure_size = 10000;
5186 pure_bytes_used_before_overflow += pure_bytes_used - size;
5187 pure_bytes_used = 0;
5188 pure_bytes_used_lisp = pure_bytes_used_non_lisp = 0;
5189 goto again;
5190 }
5191
5192
5193 /* Print a warning if PURESIZE is too small. */
5194
5195 void
5196 check_pure_size (void)
5197 {
5198 if (pure_bytes_used_before_overflow)
5199 message (("emacs:0:Pure Lisp storage overflow (approx. %"pI"d"
5200 " bytes needed)"),
5201 pure_bytes_used + pure_bytes_used_before_overflow);
5202 }
5203
5204
5205 /* Find the byte sequence {DATA[0], ..., DATA[NBYTES-1], '\0'} from
5206 the non-Lisp data pool of the pure storage, and return its start
5207 address. Return NULL if not found. */
5208
5209 static char *
5210 find_string_data_in_pure (const char *data, ptrdiff_t nbytes)
5211 {
5212 int i;
5213 ptrdiff_t skip, bm_skip[256], last_char_skip, infinity, start, start_max;
5214 const unsigned char *p;
5215 char *non_lisp_beg;
5216
5217 if (pure_bytes_used_non_lisp <= nbytes)
5218 return NULL;
5219
5220 /* Set up the Boyer-Moore table. */
5221 skip = nbytes + 1;
5222 for (i = 0; i < 256; i++)
5223 bm_skip[i] = skip;
5224
5225 p = (const unsigned char *) data;
5226 while (--skip > 0)
5227 bm_skip[*p++] = skip;
5228
5229 last_char_skip = bm_skip['\0'];
5230
5231 non_lisp_beg = purebeg + pure_size - pure_bytes_used_non_lisp;
5232 start_max = pure_bytes_used_non_lisp - (nbytes + 1);
5233
5234 /* See the comments in the function `boyer_moore' (search.c) for the
5235 use of `infinity'. */
5236 infinity = pure_bytes_used_non_lisp + 1;
5237 bm_skip['\0'] = infinity;
5238
5239 p = (const unsigned char *) non_lisp_beg + nbytes;
5240 start = 0;
5241 do
5242 {
5243 /* Check the last character (== '\0'). */
5244 do
5245 {
5246 start += bm_skip[*(p + start)];
5247 }
5248 while (start <= start_max);
5249
5250 if (start < infinity)
5251 /* Couldn't find the last character. */
5252 return NULL;
5253
5254 /* No less than `infinity' means we could find the last
5255 character at `p[start - infinity]'. */
5256 start -= infinity;
5257
5258 /* Check the remaining characters. */
5259 if (memcmp (data, non_lisp_beg + start, nbytes) == 0)
5260 /* Found. */
5261 return non_lisp_beg + start;
5262
5263 start += last_char_skip;
5264 }
5265 while (start <= start_max);
5266
5267 return NULL;
5268 }
5269
5270
5271 /* Return a string allocated in pure space. DATA is a buffer holding
5272 NCHARS characters, and NBYTES bytes of string data. MULTIBYTE
5273 means make the result string multibyte.
5274
5275 Must get an error if pure storage is full, since if it cannot hold
5276 a large string it may be able to hold conses that point to that
5277 string; then the string is not protected from gc. */
5278
5279 Lisp_Object
5280 make_pure_string (const char *data,
5281 ptrdiff_t nchars, ptrdiff_t nbytes, bool multibyte)
5282 {
5283 Lisp_Object string;
5284 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5285 s->data = (unsigned char *) find_string_data_in_pure (data, nbytes);
5286 if (s->data == NULL)
5287 {
5288 s->data = pure_alloc (nbytes + 1, -1);
5289 memcpy (s->data, data, nbytes);
5290 s->data[nbytes] = '\0';
5291 }
5292 s->size = nchars;
5293 s->size_byte = multibyte ? nbytes : -1;
5294 s->intervals = NULL;
5295 XSETSTRING (string, s);
5296 return string;
5297 }
5298
5299 /* Return a string allocated in pure space. Do not
5300 allocate the string data, just point to DATA. */
5301
5302 Lisp_Object
5303 make_pure_c_string (const char *data, ptrdiff_t nchars)
5304 {
5305 Lisp_Object string;
5306 struct Lisp_String *s = pure_alloc (sizeof *s, Lisp_String);
5307 s->size = nchars;
5308 s->size_byte = -1;
5309 s->data = (unsigned char *) data;
5310 s->intervals = NULL;
5311 XSETSTRING (string, s);
5312 return string;
5313 }
5314
5315 static Lisp_Object purecopy (Lisp_Object obj);
5316
5317 /* Return a cons allocated from pure space. Give it pure copies
5318 of CAR as car and CDR as cdr. */
5319
5320 Lisp_Object
5321 pure_cons (Lisp_Object car, Lisp_Object cdr)
5322 {
5323 Lisp_Object new;
5324 struct Lisp_Cons *p = pure_alloc (sizeof *p, Lisp_Cons);
5325 XSETCONS (new, p);
5326 XSETCAR (new, purecopy (car));
5327 XSETCDR (new, purecopy (cdr));
5328 return new;
5329 }
5330
5331
5332 /* Value is a float object with value NUM allocated from pure space. */
5333
5334 static Lisp_Object
5335 make_pure_float (double num)
5336 {
5337 Lisp_Object new;
5338 struct Lisp_Float *p = pure_alloc (sizeof *p, Lisp_Float);
5339 XSETFLOAT (new, p);
5340 XFLOAT_INIT (new, num);
5341 return new;
5342 }
5343
5344
5345 /* Return a vector with room for LEN Lisp_Objects allocated from
5346 pure space. */
5347
5348 static Lisp_Object
5349 make_pure_vector (ptrdiff_t len)
5350 {
5351 Lisp_Object new;
5352 size_t size = header_size + len * word_size;
5353 struct Lisp_Vector *p = pure_alloc (size, Lisp_Vectorlike);
5354 XSETVECTOR (new, p);
5355 XVECTOR (new)->header.size = len;
5356 return new;
5357 }
5358
5359
5360 DEFUN ("purecopy", Fpurecopy, Spurecopy, 1, 1, 0,
5361 doc: /* Make a copy of object OBJ in pure storage.
5362 Recursively copies contents of vectors and cons cells.
5363 Does not copy symbols. Copies strings without text properties. */)
5364 (register Lisp_Object obj)
5365 {
5366 if (NILP (Vpurify_flag))
5367 return obj;
5368 else if (MARKERP (obj) || OVERLAYP (obj)
5369 || HASH_TABLE_P (obj) || SYMBOLP (obj))
5370 /* Can't purify those. */
5371 return obj;
5372 else
5373 return purecopy (obj);
5374 }
5375
5376 static Lisp_Object
5377 purecopy (Lisp_Object obj)
5378 {
5379 if (PURE_POINTER_P (XPNTR (obj)) || INTEGERP (obj) || SUBRP (obj))
5380 return obj; /* Already pure. */
5381
5382 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5383 {
5384 Lisp_Object tmp = Fgethash (obj, Vpurify_flag, Qnil);
5385 if (!NILP (tmp))
5386 return tmp;
5387 }
5388
5389 if (CONSP (obj))
5390 obj = pure_cons (XCAR (obj), XCDR (obj));
5391 else if (FLOATP (obj))
5392 obj = make_pure_float (XFLOAT_DATA (obj));
5393 else if (STRINGP (obj))
5394 obj = make_pure_string (SSDATA (obj), SCHARS (obj),
5395 SBYTES (obj),
5396 STRING_MULTIBYTE (obj));
5397 else if (COMPILEDP (obj) || VECTORP (obj))
5398 {
5399 register struct Lisp_Vector *vec;
5400 register ptrdiff_t i;
5401 ptrdiff_t size;
5402
5403 size = ASIZE (obj);
5404 if (size & PSEUDOVECTOR_FLAG)
5405 size &= PSEUDOVECTOR_SIZE_MASK;
5406 vec = XVECTOR (make_pure_vector (size));
5407 for (i = 0; i < size; i++)
5408 vec->contents[i] = purecopy (AREF (obj, i));
5409 if (COMPILEDP (obj))
5410 {
5411 XSETPVECTYPE (vec, PVEC_COMPILED);
5412 XSETCOMPILED (obj, vec);
5413 }
5414 else
5415 XSETVECTOR (obj, vec);
5416 }
5417 else if (SYMBOLP (obj))
5418 {
5419 if (!XSYMBOL (obj)->pinned && !c_symbol_p (XSYMBOL (obj)))
5420 { /* We can't purify them, but they appear in many pure objects.
5421 Mark them as `pinned' so we know to mark them at every GC cycle. */
5422 XSYMBOL (obj)->pinned = true;
5423 symbol_block_pinned = symbol_block;
5424 }
5425 return obj;
5426 }
5427 else
5428 {
5429 Lisp_Object fmt = build_pure_c_string ("Don't know how to purify: %S");
5430 Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj)));
5431 }
5432
5433 if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */
5434 Fputhash (obj, obj, Vpurify_flag);
5435
5436 return obj;
5437 }
5438
5439
5440 \f
5441 /***********************************************************************
5442 Protection from GC
5443 ***********************************************************************/
5444
5445 /* Put an entry in staticvec, pointing at the variable with address
5446 VARADDRESS. */
5447
5448 void
5449 staticpro (Lisp_Object *varaddress)
5450 {
5451 if (staticidx >= NSTATICS)
5452 fatal ("NSTATICS too small; try increasing and recompiling Emacs.");
5453 staticvec[staticidx++] = varaddress;
5454 }
5455
5456 \f
5457 /***********************************************************************
5458 Protection from GC
5459 ***********************************************************************/
5460
5461 /* Temporarily prevent garbage collection. */
5462
5463 ptrdiff_t
5464 inhibit_garbage_collection (void)
5465 {
5466 ptrdiff_t count = SPECPDL_INDEX ();
5467
5468 specbind (Qgc_cons_threshold, make_number (MOST_POSITIVE_FIXNUM));
5469 return count;
5470 }
5471
5472 /* Used to avoid possible overflows when
5473 converting from C to Lisp integers. */
5474
5475 static Lisp_Object
5476 bounded_number (EMACS_INT number)
5477 {
5478 return make_number (min (MOST_POSITIVE_FIXNUM, number));
5479 }
5480
5481 /* Calculate total bytes of live objects. */
5482
5483 static size_t
5484 total_bytes_of_live_objects (void)
5485 {
5486 size_t tot = 0;
5487 tot += total_conses * sizeof (struct Lisp_Cons);
5488 tot += total_symbols * sizeof (struct Lisp_Symbol);
5489 tot += total_markers * sizeof (union Lisp_Misc);
5490 tot += total_string_bytes;
5491 tot += total_vector_slots * word_size;
5492 tot += total_floats * sizeof (struct Lisp_Float);
5493 tot += total_intervals * sizeof (struct interval);
5494 tot += total_strings * sizeof (struct Lisp_String);
5495 return tot;
5496 }
5497
5498 #ifdef HAVE_WINDOW_SYSTEM
5499
5500 /* This code has a few issues on MS-Windows, see Bug#15876 and Bug#16140. */
5501
5502 #if !defined (HAVE_NTGUI)
5503
5504 /* Remove unmarked font-spec and font-entity objects from ENTRY, which is
5505 (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...), and return changed entry. */
5506
5507 static Lisp_Object
5508 compact_font_cache_entry (Lisp_Object entry)
5509 {
5510 Lisp_Object tail, *prev = &entry;
5511
5512 for (tail = entry; CONSP (tail); tail = XCDR (tail))
5513 {
5514 bool drop = 0;
5515 Lisp_Object obj = XCAR (tail);
5516
5517 /* Consider OBJ if it is (font-spec . [font-entity font-entity ...]). */
5518 if (CONSP (obj) && FONT_SPEC_P (XCAR (obj))
5519 && !VECTOR_MARKED_P (XFONT_SPEC (XCAR (obj)))
5520 && VECTORP (XCDR (obj)))
5521 {
5522 ptrdiff_t i, size = ASIZE (XCDR (obj)) & ~ARRAY_MARK_FLAG;
5523
5524 /* If font-spec is not marked, most likely all font-entities
5525 are not marked too. But we must be sure that nothing is
5526 marked within OBJ before we really drop it. */
5527 for (i = 0; i < size; i++)
5528 if (VECTOR_MARKED_P (XFONT_ENTITY (AREF (XCDR (obj), i))))
5529 break;
5530
5531 if (i == size)
5532 drop = 1;
5533 }
5534 if (drop)
5535 *prev = XCDR (tail);
5536 else
5537 prev = xcdr_addr (tail);
5538 }
5539 return entry;
5540 }
5541
5542 #endif /* not HAVE_NTGUI */
5543
5544 /* Compact font caches on all terminals and mark
5545 everything which is still here after compaction. */
5546
5547 static void
5548 compact_font_caches (void)
5549 {
5550 struct terminal *t;
5551
5552 for (t = terminal_list; t; t = t->next_terminal)
5553 {
5554 Lisp_Object cache = TERMINAL_FONT_CACHE (t);
5555 #if !defined (HAVE_NTGUI)
5556 if (CONSP (cache))
5557 {
5558 Lisp_Object entry;
5559
5560 for (entry = XCDR (cache); CONSP (entry); entry = XCDR (entry))
5561 XSETCAR (entry, compact_font_cache_entry (XCAR (entry)));
5562 }
5563 #endif /* not HAVE_NTGUI */
5564 mark_object (cache);
5565 }
5566 }
5567
5568 #else /* not HAVE_WINDOW_SYSTEM */
5569
5570 #define compact_font_caches() (void)(0)
5571
5572 #endif /* HAVE_WINDOW_SYSTEM */
5573
5574 /* Remove (MARKER . DATA) entries with unmarked MARKER
5575 from buffer undo LIST and return changed list. */
5576
5577 static Lisp_Object
5578 compact_undo_list (Lisp_Object list)
5579 {
5580 Lisp_Object tail, *prev = &list;
5581
5582 for (tail = list; CONSP (tail); tail = XCDR (tail))
5583 {
5584 if (CONSP (XCAR (tail))
5585 && MARKERP (XCAR (XCAR (tail)))
5586 && !XMARKER (XCAR (XCAR (tail)))->gcmarkbit)
5587 *prev = XCDR (tail);
5588 else
5589 prev = xcdr_addr (tail);
5590 }
5591 return list;
5592 }
5593
5594 static void
5595 mark_pinned_symbols (void)
5596 {
5597 struct symbol_block *sblk;
5598 int lim = (symbol_block_pinned == symbol_block
5599 ? symbol_block_index : SYMBOL_BLOCK_SIZE);
5600
5601 for (sblk = symbol_block_pinned; sblk; sblk = sblk->next)
5602 {
5603 union aligned_Lisp_Symbol *sym = sblk->symbols, *end = sym + lim;
5604 for (; sym < end; ++sym)
5605 if (sym->s.pinned)
5606 mark_object (make_lisp_symbol (&sym->s));
5607
5608 lim = SYMBOL_BLOCK_SIZE;
5609 }
5610 }
5611
5612 /* Subroutine of Fgarbage_collect that does most of the work. It is a
5613 separate function so that we could limit mark_stack in searching
5614 the stack frames below this function, thus avoiding the rare cases
5615 where mark_stack finds values that look like live Lisp objects on
5616 portions of stack that couldn't possibly contain such live objects.
5617 For more details of this, see the discussion at
5618 http://lists.gnu.org/archive/html/emacs-devel/2014-05/msg00270.html. */
5619 static Lisp_Object
5620 garbage_collect_1 (void *end)
5621 {
5622 struct buffer *nextb;
5623 char stack_top_variable;
5624 ptrdiff_t i;
5625 bool message_p;
5626 ptrdiff_t count = SPECPDL_INDEX ();
5627 struct timespec start;
5628 Lisp_Object retval = Qnil;
5629 size_t tot_before = 0;
5630
5631 if (abort_on_gc)
5632 emacs_abort ();
5633
5634 /* Can't GC if pure storage overflowed because we can't determine
5635 if something is a pure object or not. */
5636 if (pure_bytes_used_before_overflow)
5637 return Qnil;
5638
5639 /* Record this function, so it appears on the profiler's backtraces. */
5640 record_in_backtrace (Qautomatic_gc, 0, 0);
5641
5642 check_cons_list ();
5643
5644 /* Don't keep undo information around forever.
5645 Do this early on, so it is no problem if the user quits. */
5646 FOR_EACH_BUFFER (nextb)
5647 compact_buffer (nextb);
5648
5649 if (profiler_memory_running)
5650 tot_before = total_bytes_of_live_objects ();
5651
5652 start = current_timespec ();
5653
5654 /* In case user calls debug_print during GC,
5655 don't let that cause a recursive GC. */
5656 consing_since_gc = 0;
5657
5658 /* Save what's currently displayed in the echo area. */
5659 message_p = push_message ();
5660 record_unwind_protect_void (pop_message_unwind);
5661
5662 /* Save a copy of the contents of the stack, for debugging. */
5663 #if MAX_SAVE_STACK > 0
5664 if (NILP (Vpurify_flag))
5665 {
5666 char *stack;
5667 ptrdiff_t stack_size;
5668 if (&stack_top_variable < stack_bottom)
5669 {
5670 stack = &stack_top_variable;
5671 stack_size = stack_bottom - &stack_top_variable;
5672 }
5673 else
5674 {
5675 stack = stack_bottom;
5676 stack_size = &stack_top_variable - stack_bottom;
5677 }
5678 if (stack_size <= MAX_SAVE_STACK)
5679 {
5680 if (stack_copy_size < stack_size)
5681 {
5682 stack_copy = xrealloc (stack_copy, stack_size);
5683 stack_copy_size = stack_size;
5684 }
5685 no_sanitize_memcpy (stack_copy, stack, stack_size);
5686 }
5687 }
5688 #endif /* MAX_SAVE_STACK > 0 */
5689
5690 if (garbage_collection_messages)
5691 message1_nolog ("Garbage collecting...");
5692
5693 block_input ();
5694
5695 shrink_regexp_cache ();
5696
5697 gc_in_progress = 1;
5698
5699 /* Mark all the special slots that serve as the roots of accessibility. */
5700
5701 mark_buffer (&buffer_defaults);
5702 mark_buffer (&buffer_local_symbols);
5703
5704 for (i = 0; i < ARRAYELTS (lispsym); i++)
5705 mark_object (builtin_lisp_symbol (i));
5706
5707 for (i = 0; i < staticidx; i++)
5708 mark_object (*staticvec[i]);
5709
5710 mark_pinned_symbols ();
5711 mark_specpdl ();
5712 mark_terminals ();
5713 mark_kboards ();
5714
5715 #ifdef USE_GTK
5716 xg_mark_data ();
5717 #endif
5718
5719 #if (GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS \
5720 || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
5721 mark_stack (end);
5722 #else
5723 {
5724 register struct gcpro *tail;
5725 for (tail = gcprolist; tail; tail = tail->next)
5726 for (i = 0; i < tail->nvars; i++)
5727 mark_object (tail->var[i]);
5728 }
5729 mark_byte_stack ();
5730 #endif
5731 {
5732 struct handler *handler;
5733 for (handler = handlerlist; handler; handler = handler->next)
5734 {
5735 mark_object (handler->tag_or_ch);
5736 mark_object (handler->val);
5737 }
5738 }
5739 #ifdef HAVE_WINDOW_SYSTEM
5740 mark_fringe_data ();
5741 #endif
5742
5743 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
5744 mark_stack (end);
5745 #endif
5746
5747 /* Everything is now marked, except for the data in font caches,
5748 undo lists, and finalizers. The first two are compacted by
5749 removing an items which aren't reachable otherwise. */
5750
5751 compact_font_caches ();
5752
5753 FOR_EACH_BUFFER (nextb)
5754 {
5755 if (!EQ (BVAR (nextb, undo_list), Qt))
5756 bset_undo_list (nextb, compact_undo_list (BVAR (nextb, undo_list)));
5757 /* Now that we have stripped the elements that need not be
5758 in the undo_list any more, we can finally mark the list. */
5759 mark_object (BVAR (nextb, undo_list));
5760 }
5761
5762 /* Now pre-sweep finalizers. Here, we add any unmarked finalizers
5763 to doomed_finalizers so we can run their associated functions
5764 after GC. It's important to scan finalizers at this stage so
5765 that we can be sure that unmarked finalizers are really
5766 unreachable except for references from their associated functions
5767 and from other finalizers. */
5768
5769 queue_doomed_finalizers (&doomed_finalizers, &finalizers);
5770 mark_finalizer_list (&doomed_finalizers);
5771
5772 gc_sweep ();
5773
5774 /* Clear the mark bits that we set in certain root slots. */
5775
5776 unmark_byte_stack ();
5777 VECTOR_UNMARK (&buffer_defaults);
5778 VECTOR_UNMARK (&buffer_local_symbols);
5779
5780 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES && 0
5781 dump_zombies ();
5782 #endif
5783
5784 check_cons_list ();
5785
5786 gc_in_progress = 0;
5787
5788 unblock_input ();
5789
5790 consing_since_gc = 0;
5791 if (gc_cons_threshold < GC_DEFAULT_THRESHOLD / 10)
5792 gc_cons_threshold = GC_DEFAULT_THRESHOLD / 10;
5793
5794 gc_relative_threshold = 0;
5795 if (FLOATP (Vgc_cons_percentage))
5796 { /* Set gc_cons_combined_threshold. */
5797 double tot = total_bytes_of_live_objects ();
5798
5799 tot *= XFLOAT_DATA (Vgc_cons_percentage);
5800 if (0 < tot)
5801 {
5802 if (tot < TYPE_MAXIMUM (EMACS_INT))
5803 gc_relative_threshold = tot;
5804 else
5805 gc_relative_threshold = TYPE_MAXIMUM (EMACS_INT);
5806 }
5807 }
5808
5809 if (garbage_collection_messages)
5810 {
5811 if (message_p || minibuf_level > 0)
5812 restore_message ();
5813 else
5814 message1_nolog ("Garbage collecting...done");
5815 }
5816
5817 unbind_to (count, Qnil);
5818
5819 Lisp_Object total[] = {
5820 list4 (Qconses, make_number (sizeof (struct Lisp_Cons)),
5821 bounded_number (total_conses),
5822 bounded_number (total_free_conses)),
5823 list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)),
5824 bounded_number (total_symbols),
5825 bounded_number (total_free_symbols)),
5826 list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)),
5827 bounded_number (total_markers),
5828 bounded_number (total_free_markers)),
5829 list4 (Qstrings, make_number (sizeof (struct Lisp_String)),
5830 bounded_number (total_strings),
5831 bounded_number (total_free_strings)),
5832 list3 (Qstring_bytes, make_number (1),
5833 bounded_number (total_string_bytes)),
5834 list3 (Qvectors,
5835 make_number (header_size + sizeof (Lisp_Object)),
5836 bounded_number (total_vectors)),
5837 list4 (Qvector_slots, make_number (word_size),
5838 bounded_number (total_vector_slots),
5839 bounded_number (total_free_vector_slots)),
5840 list4 (Qfloats, make_number (sizeof (struct Lisp_Float)),
5841 bounded_number (total_floats),
5842 bounded_number (total_free_floats)),
5843 list4 (Qintervals, make_number (sizeof (struct interval)),
5844 bounded_number (total_intervals),
5845 bounded_number (total_free_intervals)),
5846 list3 (Qbuffers, make_number (sizeof (struct buffer)),
5847 bounded_number (total_buffers)),
5848
5849 #ifdef DOUG_LEA_MALLOC
5850 list4 (Qheap, make_number (1024),
5851 bounded_number ((mallinfo ().uordblks + 1023) >> 10),
5852 bounded_number ((mallinfo ().fordblks + 1023) >> 10)),
5853 #endif
5854 };
5855 retval = CALLMANY (Flist, total);
5856
5857 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
5858 {
5859 /* Compute average percentage of zombies. */
5860 double nlive
5861 = (total_conses + total_symbols + total_markers + total_strings
5862 + total_vectors + total_floats + total_intervals + total_buffers);
5863
5864 avg_live = (avg_live * ngcs + nlive) / (ngcs + 1);
5865 max_live = max (nlive, max_live);
5866 avg_zombies = (avg_zombies * ngcs + nzombies) / (ngcs + 1);
5867 max_zombies = max (nzombies, max_zombies);
5868 ++ngcs;
5869 }
5870 #endif
5871
5872 /* GC is complete: now we can run our finalizer callbacks. */
5873 run_finalizers (&doomed_finalizers);
5874
5875 if (!NILP (Vpost_gc_hook))
5876 {
5877 ptrdiff_t gc_count = inhibit_garbage_collection ();
5878 safe_run_hooks (Qpost_gc_hook);
5879 unbind_to (gc_count, Qnil);
5880 }
5881
5882 /* Accumulate statistics. */
5883 if (FLOATP (Vgc_elapsed))
5884 {
5885 struct timespec since_start = timespec_sub (current_timespec (), start);
5886 Vgc_elapsed = make_float (XFLOAT_DATA (Vgc_elapsed)
5887 + timespectod (since_start));
5888 }
5889
5890 gcs_done++;
5891
5892 /* Collect profiling data. */
5893 if (profiler_memory_running)
5894 {
5895 size_t swept = 0;
5896 size_t tot_after = total_bytes_of_live_objects ();
5897 if (tot_before > tot_after)
5898 swept = tot_before - tot_after;
5899 malloc_probe (swept);
5900 }
5901
5902 return retval;
5903 }
5904
5905 DEFUN ("garbage-collect", Fgarbage_collect, Sgarbage_collect, 0, 0, "",
5906 doc: /* Reclaim storage for Lisp objects no longer needed.
5907 Garbage collection happens automatically if you cons more than
5908 `gc-cons-threshold' bytes of Lisp data since previous garbage collection.
5909 `garbage-collect' normally returns a list with info on amount of space in use,
5910 where each entry has the form (NAME SIZE USED FREE), where:
5911 - NAME is a symbol describing the kind of objects this entry represents,
5912 - SIZE is the number of bytes used by each one,
5913 - USED is the number of those objects that were found live in the heap,
5914 - FREE is the number of those objects that are not live but that Emacs
5915 keeps around for future allocations (maybe because it does not know how
5916 to return them to the OS).
5917 However, if there was overflow in pure space, `garbage-collect'
5918 returns nil, because real GC can't be done.
5919 See Info node `(elisp)Garbage Collection'. */)
5920 (void)
5921 {
5922 #if (GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS \
5923 || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS \
5924 || GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES)
5925 void *end;
5926
5927 #ifdef HAVE___BUILTIN_UNWIND_INIT
5928 /* Force callee-saved registers and register windows onto the stack.
5929 This is the preferred method if available, obviating the need for
5930 machine dependent methods. */
5931 __builtin_unwind_init ();
5932 end = &end;
5933 #else /* not HAVE___BUILTIN_UNWIND_INIT */
5934 #ifndef GC_SAVE_REGISTERS_ON_STACK
5935 /* jmp_buf may not be aligned enough on darwin-ppc64 */
5936 union aligned_jmpbuf {
5937 Lisp_Object o;
5938 sys_jmp_buf j;
5939 } j;
5940 volatile bool stack_grows_down_p = (char *) &j > (char *) stack_base;
5941 #endif
5942 /* This trick flushes the register windows so that all the state of
5943 the process is contained in the stack. */
5944 /* Fixme: Code in the Boehm GC suggests flushing (with `flushrs') is
5945 needed on ia64 too. See mach_dep.c, where it also says inline
5946 assembler doesn't work with relevant proprietary compilers. */
5947 #ifdef __sparc__
5948 #if defined (__sparc64__) && defined (__FreeBSD__)
5949 /* FreeBSD does not have a ta 3 handler. */
5950 asm ("flushw");
5951 #else
5952 asm ("ta 3");
5953 #endif
5954 #endif
5955
5956 /* Save registers that we need to see on the stack. We need to see
5957 registers used to hold register variables and registers used to
5958 pass parameters. */
5959 #ifdef GC_SAVE_REGISTERS_ON_STACK
5960 GC_SAVE_REGISTERS_ON_STACK (end);
5961 #else /* not GC_SAVE_REGISTERS_ON_STACK */
5962
5963 #ifndef GC_SETJMP_WORKS /* If it hasn't been checked yet that
5964 setjmp will definitely work, test it
5965 and print a message with the result
5966 of the test. */
5967 if (!setjmp_tested_p)
5968 {
5969 setjmp_tested_p = 1;
5970 test_setjmp ();
5971 }
5972 #endif /* GC_SETJMP_WORKS */
5973
5974 sys_setjmp (j.j);
5975 end = stack_grows_down_p ? (char *) &j + sizeof j : (char *) &j;
5976 #endif /* not GC_SAVE_REGISTERS_ON_STACK */
5977 #endif /* not HAVE___BUILTIN_UNWIND_INIT */
5978 return garbage_collect_1 (end);
5979 #elif (GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE)
5980 /* Old GCPROs-based method without stack marking. */
5981 return garbage_collect_1 (NULL);
5982 #else
5983 emacs_abort ();
5984 #endif /* GC_MARK_STACK */
5985 }
5986
5987 /* Mark Lisp objects in glyph matrix MATRIX. Currently the
5988 only interesting objects referenced from glyphs are strings. */
5989
5990 static void
5991 mark_glyph_matrix (struct glyph_matrix *matrix)
5992 {
5993 struct glyph_row *row = matrix->rows;
5994 struct glyph_row *end = row + matrix->nrows;
5995
5996 for (; row < end; ++row)
5997 if (row->enabled_p)
5998 {
5999 int area;
6000 for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
6001 {
6002 struct glyph *glyph = row->glyphs[area];
6003 struct glyph *end_glyph = glyph + row->used[area];
6004
6005 for (; glyph < end_glyph; ++glyph)
6006 if (STRINGP (glyph->object)
6007 && !STRING_MARKED_P (XSTRING (glyph->object)))
6008 mark_object (glyph->object);
6009 }
6010 }
6011 }
6012
6013 /* Mark reference to a Lisp_Object.
6014 If the object referred to has not been seen yet, recursively mark
6015 all the references contained in it. */
6016
6017 #define LAST_MARKED_SIZE 500
6018 static Lisp_Object last_marked[LAST_MARKED_SIZE];
6019 static int last_marked_index;
6020
6021 /* For debugging--call abort when we cdr down this many
6022 links of a list, in mark_object. In debugging,
6023 the call to abort will hit a breakpoint.
6024 Normally this is zero and the check never goes off. */
6025 ptrdiff_t mark_object_loop_halt EXTERNALLY_VISIBLE;
6026
6027 static void
6028 mark_vectorlike (struct Lisp_Vector *ptr)
6029 {
6030 ptrdiff_t size = ptr->header.size;
6031 ptrdiff_t i;
6032
6033 eassert (!VECTOR_MARKED_P (ptr));
6034 VECTOR_MARK (ptr); /* Else mark it. */
6035 if (size & PSEUDOVECTOR_FLAG)
6036 size &= PSEUDOVECTOR_SIZE_MASK;
6037
6038 /* Note that this size is not the memory-footprint size, but only
6039 the number of Lisp_Object fields that we should trace.
6040 The distinction is used e.g. by Lisp_Process which places extra
6041 non-Lisp_Object fields at the end of the structure... */
6042 for (i = 0; i < size; i++) /* ...and then mark its elements. */
6043 mark_object (ptr->contents[i]);
6044 }
6045
6046 /* Like mark_vectorlike but optimized for char-tables (and
6047 sub-char-tables) assuming that the contents are mostly integers or
6048 symbols. */
6049
6050 static void
6051 mark_char_table (struct Lisp_Vector *ptr, enum pvec_type pvectype)
6052 {
6053 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6054 /* Consult the Lisp_Sub_Char_Table layout before changing this. */
6055 int i, idx = (pvectype == PVEC_SUB_CHAR_TABLE ? SUB_CHAR_TABLE_OFFSET : 0);
6056
6057 eassert (!VECTOR_MARKED_P (ptr));
6058 VECTOR_MARK (ptr);
6059 for (i = idx; i < size; i++)
6060 {
6061 Lisp_Object val = ptr->contents[i];
6062
6063 if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->gcmarkbit))
6064 continue;
6065 if (SUB_CHAR_TABLE_P (val))
6066 {
6067 if (! VECTOR_MARKED_P (XVECTOR (val)))
6068 mark_char_table (XVECTOR (val), PVEC_SUB_CHAR_TABLE);
6069 }
6070 else
6071 mark_object (val);
6072 }
6073 }
6074
6075 NO_INLINE /* To reduce stack depth in mark_object. */
6076 static Lisp_Object
6077 mark_compiled (struct Lisp_Vector *ptr)
6078 {
6079 int i, size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
6080
6081 VECTOR_MARK (ptr);
6082 for (i = 0; i < size; i++)
6083 if (i != COMPILED_CONSTANTS)
6084 mark_object (ptr->contents[i]);
6085 return size > COMPILED_CONSTANTS ? ptr->contents[COMPILED_CONSTANTS] : Qnil;
6086 }
6087
6088 /* Mark the chain of overlays starting at PTR. */
6089
6090 static void
6091 mark_overlay (struct Lisp_Overlay *ptr)
6092 {
6093 for (; ptr && !ptr->gcmarkbit; ptr = ptr->next)
6094 {
6095 ptr->gcmarkbit = 1;
6096 /* These two are always markers and can be marked fast. */
6097 XMARKER (ptr->start)->gcmarkbit = 1;
6098 XMARKER (ptr->end)->gcmarkbit = 1;
6099 mark_object (ptr->plist);
6100 }
6101 }
6102
6103 /* Mark Lisp_Objects and special pointers in BUFFER. */
6104
6105 static void
6106 mark_buffer (struct buffer *buffer)
6107 {
6108 /* This is handled much like other pseudovectors... */
6109 mark_vectorlike ((struct Lisp_Vector *) buffer);
6110
6111 /* ...but there are some buffer-specific things. */
6112
6113 MARK_INTERVAL_TREE (buffer_intervals (buffer));
6114
6115 /* For now, we just don't mark the undo_list. It's done later in
6116 a special way just before the sweep phase, and after stripping
6117 some of its elements that are not needed any more. */
6118
6119 mark_overlay (buffer->overlays_before);
6120 mark_overlay (buffer->overlays_after);
6121
6122 /* If this is an indirect buffer, mark its base buffer. */
6123 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
6124 mark_buffer (buffer->base_buffer);
6125 }
6126
6127 /* Mark Lisp faces in the face cache C. */
6128
6129 NO_INLINE /* To reduce stack depth in mark_object. */
6130 static void
6131 mark_face_cache (struct face_cache *c)
6132 {
6133 if (c)
6134 {
6135 int i, j;
6136 for (i = 0; i < c->used; ++i)
6137 {
6138 struct face *face = FACE_FROM_ID (c->f, i);
6139
6140 if (face)
6141 {
6142 if (face->font && !VECTOR_MARKED_P (face->font))
6143 mark_vectorlike ((struct Lisp_Vector *) face->font);
6144
6145 for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
6146 mark_object (face->lface[j]);
6147 }
6148 }
6149 }
6150 }
6151
6152 NO_INLINE /* To reduce stack depth in mark_object. */
6153 static void
6154 mark_localized_symbol (struct Lisp_Symbol *ptr)
6155 {
6156 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
6157 Lisp_Object where = blv->where;
6158 /* If the value is set up for a killed buffer or deleted
6159 frame, restore its global binding. If the value is
6160 forwarded to a C variable, either it's not a Lisp_Object
6161 var, or it's staticpro'd already. */
6162 if ((BUFFERP (where) && !BUFFER_LIVE_P (XBUFFER (where)))
6163 || (FRAMEP (where) && !FRAME_LIVE_P (XFRAME (where))))
6164 swap_in_global_binding (ptr);
6165 mark_object (blv->where);
6166 mark_object (blv->valcell);
6167 mark_object (blv->defcell);
6168 }
6169
6170 NO_INLINE /* To reduce stack depth in mark_object. */
6171 static void
6172 mark_save_value (struct Lisp_Save_Value *ptr)
6173 {
6174 /* If `save_type' is zero, `data[0].pointer' is the address
6175 of a memory area containing `data[1].integer' potential
6176 Lisp_Objects. */
6177 if (GC_MARK_STACK && ptr->save_type == SAVE_TYPE_MEMORY)
6178 {
6179 Lisp_Object *p = ptr->data[0].pointer;
6180 ptrdiff_t nelt;
6181 for (nelt = ptr->data[1].integer; nelt > 0; nelt--, p++)
6182 mark_maybe_object (*p);
6183 }
6184 else
6185 {
6186 /* Find Lisp_Objects in `data[N]' slots and mark them. */
6187 int i;
6188 for (i = 0; i < SAVE_VALUE_SLOTS; i++)
6189 if (save_type (ptr, i) == SAVE_OBJECT)
6190 mark_object (ptr->data[i].object);
6191 }
6192 }
6193
6194 /* Remove killed buffers or items whose car is a killed buffer from
6195 LIST, and mark other items. Return changed LIST, which is marked. */
6196
6197 static Lisp_Object
6198 mark_discard_killed_buffers (Lisp_Object list)
6199 {
6200 Lisp_Object tail, *prev = &list;
6201
6202 for (tail = list; CONSP (tail) && !CONS_MARKED_P (XCONS (tail));
6203 tail = XCDR (tail))
6204 {
6205 Lisp_Object tem = XCAR (tail);
6206 if (CONSP (tem))
6207 tem = XCAR (tem);
6208 if (BUFFERP (tem) && !BUFFER_LIVE_P (XBUFFER (tem)))
6209 *prev = XCDR (tail);
6210 else
6211 {
6212 CONS_MARK (XCONS (tail));
6213 mark_object (XCAR (tail));
6214 prev = xcdr_addr (tail);
6215 }
6216 }
6217 mark_object (tail);
6218 return list;
6219 }
6220
6221 /* Determine type of generic Lisp_Object and mark it accordingly.
6222
6223 This function implements a straightforward depth-first marking
6224 algorithm and so the recursion depth may be very high (a few
6225 tens of thousands is not uncommon). To minimize stack usage,
6226 a few cold paths are moved out to NO_INLINE functions above.
6227 In general, inlining them doesn't help you to gain more speed. */
6228
6229 void
6230 mark_object (Lisp_Object arg)
6231 {
6232 register Lisp_Object obj = arg;
6233 void *po;
6234 #ifdef GC_CHECK_MARKED_OBJECTS
6235 struct mem_node *m;
6236 #endif
6237 ptrdiff_t cdr_count = 0;
6238
6239 loop:
6240
6241 po = XPNTR (obj);
6242 if (PURE_POINTER_P (po))
6243 return;
6244
6245 last_marked[last_marked_index++] = obj;
6246 if (last_marked_index == LAST_MARKED_SIZE)
6247 last_marked_index = 0;
6248
6249 /* Perform some sanity checks on the objects marked here. Abort if
6250 we encounter an object we know is bogus. This increases GC time
6251 by ~80%, and requires compilation with GC_MARK_STACK != 0. */
6252 #ifdef GC_CHECK_MARKED_OBJECTS
6253
6254 /* Check that the object pointed to by PO is known to be a Lisp
6255 structure allocated from the heap. */
6256 #define CHECK_ALLOCATED() \
6257 do { \
6258 m = mem_find (po); \
6259 if (m == MEM_NIL) \
6260 emacs_abort (); \
6261 } while (0)
6262
6263 /* Check that the object pointed to by PO is live, using predicate
6264 function LIVEP. */
6265 #define CHECK_LIVE(LIVEP) \
6266 do { \
6267 if (!LIVEP (m, po)) \
6268 emacs_abort (); \
6269 } while (0)
6270
6271 /* Check both of the above conditions, for non-symbols. */
6272 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) \
6273 do { \
6274 CHECK_ALLOCATED (); \
6275 CHECK_LIVE (LIVEP); \
6276 } while (0) \
6277
6278 /* Check both of the above conditions, for symbols. */
6279 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() \
6280 do { \
6281 if (!c_symbol_p (ptr)) \
6282 { \
6283 CHECK_ALLOCATED (); \
6284 CHECK_LIVE (live_symbol_p); \
6285 } \
6286 } while (0) \
6287
6288 #else /* not GC_CHECK_MARKED_OBJECTS */
6289
6290 #define CHECK_LIVE(LIVEP) ((void) 0)
6291 #define CHECK_ALLOCATED_AND_LIVE(LIVEP) ((void) 0)
6292 #define CHECK_ALLOCATED_AND_LIVE_SYMBOL() ((void) 0)
6293
6294 #endif /* not GC_CHECK_MARKED_OBJECTS */
6295
6296 switch (XTYPE (obj))
6297 {
6298 case Lisp_String:
6299 {
6300 register struct Lisp_String *ptr = XSTRING (obj);
6301 if (STRING_MARKED_P (ptr))
6302 break;
6303 CHECK_ALLOCATED_AND_LIVE (live_string_p);
6304 MARK_STRING (ptr);
6305 MARK_INTERVAL_TREE (ptr->intervals);
6306 #ifdef GC_CHECK_STRING_BYTES
6307 /* Check that the string size recorded in the string is the
6308 same as the one recorded in the sdata structure. */
6309 string_bytes (ptr);
6310 #endif /* GC_CHECK_STRING_BYTES */
6311 }
6312 break;
6313
6314 case Lisp_Vectorlike:
6315 {
6316 register struct Lisp_Vector *ptr = XVECTOR (obj);
6317 register ptrdiff_t pvectype;
6318
6319 if (VECTOR_MARKED_P (ptr))
6320 break;
6321
6322 #ifdef GC_CHECK_MARKED_OBJECTS
6323 m = mem_find (po);
6324 if (m == MEM_NIL && !SUBRP (obj))
6325 emacs_abort ();
6326 #endif /* GC_CHECK_MARKED_OBJECTS */
6327
6328 if (ptr->header.size & PSEUDOVECTOR_FLAG)
6329 pvectype = ((ptr->header.size & PVEC_TYPE_MASK)
6330 >> PSEUDOVECTOR_AREA_BITS);
6331 else
6332 pvectype = PVEC_NORMAL_VECTOR;
6333
6334 if (pvectype != PVEC_SUBR && pvectype != PVEC_BUFFER)
6335 CHECK_LIVE (live_vector_p);
6336
6337 switch (pvectype)
6338 {
6339 case PVEC_BUFFER:
6340 #ifdef GC_CHECK_MARKED_OBJECTS
6341 {
6342 struct buffer *b;
6343 FOR_EACH_BUFFER (b)
6344 if (b == po)
6345 break;
6346 if (b == NULL)
6347 emacs_abort ();
6348 }
6349 #endif /* GC_CHECK_MARKED_OBJECTS */
6350 mark_buffer ((struct buffer *) ptr);
6351 break;
6352
6353 case PVEC_COMPILED:
6354 /* Although we could treat this just like a vector, mark_compiled
6355 returns the COMPILED_CONSTANTS element, which is marked at the
6356 next iteration of goto-loop here. This is done to avoid a few
6357 recursive calls to mark_object. */
6358 obj = mark_compiled (ptr);
6359 if (!NILP (obj))
6360 goto loop;
6361 break;
6362
6363 case PVEC_FRAME:
6364 {
6365 struct frame *f = (struct frame *) ptr;
6366
6367 mark_vectorlike (ptr);
6368 mark_face_cache (f->face_cache);
6369 #ifdef HAVE_WINDOW_SYSTEM
6370 if (FRAME_WINDOW_P (f) && FRAME_X_OUTPUT (f))
6371 {
6372 struct font *font = FRAME_FONT (f);
6373
6374 if (font && !VECTOR_MARKED_P (font))
6375 mark_vectorlike ((struct Lisp_Vector *) font);
6376 }
6377 #endif
6378 }
6379 break;
6380
6381 case PVEC_WINDOW:
6382 {
6383 struct window *w = (struct window *) ptr;
6384
6385 mark_vectorlike (ptr);
6386
6387 /* Mark glyph matrices, if any. Marking window
6388 matrices is sufficient because frame matrices
6389 use the same glyph memory. */
6390 if (w->current_matrix)
6391 {
6392 mark_glyph_matrix (w->current_matrix);
6393 mark_glyph_matrix (w->desired_matrix);
6394 }
6395
6396 /* Filter out killed buffers from both buffer lists
6397 in attempt to help GC to reclaim killed buffers faster.
6398 We can do it elsewhere for live windows, but this is the
6399 best place to do it for dead windows. */
6400 wset_prev_buffers
6401 (w, mark_discard_killed_buffers (w->prev_buffers));
6402 wset_next_buffers
6403 (w, mark_discard_killed_buffers (w->next_buffers));
6404 }
6405 break;
6406
6407 case PVEC_HASH_TABLE:
6408 {
6409 struct Lisp_Hash_Table *h = (struct Lisp_Hash_Table *) ptr;
6410
6411 mark_vectorlike (ptr);
6412 mark_object (h->test.name);
6413 mark_object (h->test.user_hash_function);
6414 mark_object (h->test.user_cmp_function);
6415 /* If hash table is not weak, mark all keys and values.
6416 For weak tables, mark only the vector. */
6417 if (NILP (h->weak))
6418 mark_object (h->key_and_value);
6419 else
6420 VECTOR_MARK (XVECTOR (h->key_and_value));
6421 }
6422 break;
6423
6424 case PVEC_CHAR_TABLE:
6425 case PVEC_SUB_CHAR_TABLE:
6426 mark_char_table (ptr, (enum pvec_type) pvectype);
6427 break;
6428
6429 case PVEC_BOOL_VECTOR:
6430 /* No Lisp_Objects to mark in a bool vector. */
6431 VECTOR_MARK (ptr);
6432 break;
6433
6434 case PVEC_SUBR:
6435 break;
6436
6437 case PVEC_FREE:
6438 emacs_abort ();
6439
6440 default:
6441 mark_vectorlike (ptr);
6442 }
6443 }
6444 break;
6445
6446 case Lisp_Symbol:
6447 {
6448 register struct Lisp_Symbol *ptr = XSYMBOL (obj);
6449 nextsym:
6450 if (ptr->gcmarkbit)
6451 break;
6452 CHECK_ALLOCATED_AND_LIVE_SYMBOL ();
6453 ptr->gcmarkbit = 1;
6454 /* Attempt to catch bogus objects. */
6455 eassert (valid_lisp_object_p (ptr->function));
6456 mark_object (ptr->function);
6457 mark_object (ptr->plist);
6458 switch (ptr->redirect)
6459 {
6460 case SYMBOL_PLAINVAL: mark_object (SYMBOL_VAL (ptr)); break;
6461 case SYMBOL_VARALIAS:
6462 {
6463 Lisp_Object tem;
6464 XSETSYMBOL (tem, SYMBOL_ALIAS (ptr));
6465 mark_object (tem);
6466 break;
6467 }
6468 case SYMBOL_LOCALIZED:
6469 mark_localized_symbol (ptr);
6470 break;
6471 case SYMBOL_FORWARDED:
6472 /* If the value is forwarded to a buffer or keyboard field,
6473 these are marked when we see the corresponding object.
6474 And if it's forwarded to a C variable, either it's not
6475 a Lisp_Object var, or it's staticpro'd already. */
6476 break;
6477 default: emacs_abort ();
6478 }
6479 if (!PURE_POINTER_P (XSTRING (ptr->name)))
6480 MARK_STRING (XSTRING (ptr->name));
6481 MARK_INTERVAL_TREE (string_intervals (ptr->name));
6482 /* Inner loop to mark next symbol in this bucket, if any. */
6483 ptr = ptr->next;
6484 if (ptr)
6485 goto nextsym;
6486 }
6487 break;
6488
6489 case Lisp_Misc:
6490 CHECK_ALLOCATED_AND_LIVE (live_misc_p);
6491
6492 if (XMISCANY (obj)->gcmarkbit)
6493 break;
6494
6495 switch (XMISCTYPE (obj))
6496 {
6497 case Lisp_Misc_Marker:
6498 /* DO NOT mark thru the marker's chain.
6499 The buffer's markers chain does not preserve markers from gc;
6500 instead, markers are removed from the chain when freed by gc. */
6501 XMISCANY (obj)->gcmarkbit = 1;
6502 break;
6503
6504 case Lisp_Misc_Save_Value:
6505 XMISCANY (obj)->gcmarkbit = 1;
6506 mark_save_value (XSAVE_VALUE (obj));
6507 break;
6508
6509 case Lisp_Misc_Overlay:
6510 mark_overlay (XOVERLAY (obj));
6511 break;
6512
6513 case Lisp_Misc_Finalizer:
6514 XMISCANY (obj)->gcmarkbit = true;
6515 mark_object (XFINALIZER (obj)->function);
6516 break;
6517
6518 default:
6519 emacs_abort ();
6520 }
6521 break;
6522
6523 case Lisp_Cons:
6524 {
6525 register struct Lisp_Cons *ptr = XCONS (obj);
6526 if (CONS_MARKED_P (ptr))
6527 break;
6528 CHECK_ALLOCATED_AND_LIVE (live_cons_p);
6529 CONS_MARK (ptr);
6530 /* If the cdr is nil, avoid recursion for the car. */
6531 if (EQ (ptr->u.cdr, Qnil))
6532 {
6533 obj = ptr->car;
6534 cdr_count = 0;
6535 goto loop;
6536 }
6537 mark_object (ptr->car);
6538 obj = ptr->u.cdr;
6539 cdr_count++;
6540 if (cdr_count == mark_object_loop_halt)
6541 emacs_abort ();
6542 goto loop;
6543 }
6544
6545 case Lisp_Float:
6546 CHECK_ALLOCATED_AND_LIVE (live_float_p);
6547 FLOAT_MARK (XFLOAT (obj));
6548 break;
6549
6550 case_Lisp_Int:
6551 break;
6552
6553 default:
6554 emacs_abort ();
6555 }
6556
6557 #undef CHECK_LIVE
6558 #undef CHECK_ALLOCATED
6559 #undef CHECK_ALLOCATED_AND_LIVE
6560 }
6561 /* Mark the Lisp pointers in the terminal objects.
6562 Called by Fgarbage_collect. */
6563
6564 static void
6565 mark_terminals (void)
6566 {
6567 struct terminal *t;
6568 for (t = terminal_list; t; t = t->next_terminal)
6569 {
6570 eassert (t->name != NULL);
6571 #ifdef HAVE_WINDOW_SYSTEM
6572 /* If a terminal object is reachable from a stacpro'ed object,
6573 it might have been marked already. Make sure the image cache
6574 gets marked. */
6575 mark_image_cache (t->image_cache);
6576 #endif /* HAVE_WINDOW_SYSTEM */
6577 if (!VECTOR_MARKED_P (t))
6578 mark_vectorlike ((struct Lisp_Vector *)t);
6579 }
6580 }
6581
6582
6583
6584 /* Value is non-zero if OBJ will survive the current GC because it's
6585 either marked or does not need to be marked to survive. */
6586
6587 bool
6588 survives_gc_p (Lisp_Object obj)
6589 {
6590 bool survives_p;
6591
6592 switch (XTYPE (obj))
6593 {
6594 case_Lisp_Int:
6595 survives_p = 1;
6596 break;
6597
6598 case Lisp_Symbol:
6599 survives_p = XSYMBOL (obj)->gcmarkbit;
6600 break;
6601
6602 case Lisp_Misc:
6603 survives_p = XMISCANY (obj)->gcmarkbit;
6604 break;
6605
6606 case Lisp_String:
6607 survives_p = STRING_MARKED_P (XSTRING (obj));
6608 break;
6609
6610 case Lisp_Vectorlike:
6611 survives_p = SUBRP (obj) || VECTOR_MARKED_P (XVECTOR (obj));
6612 break;
6613
6614 case Lisp_Cons:
6615 survives_p = CONS_MARKED_P (XCONS (obj));
6616 break;
6617
6618 case Lisp_Float:
6619 survives_p = FLOAT_MARKED_P (XFLOAT (obj));
6620 break;
6621
6622 default:
6623 emacs_abort ();
6624 }
6625
6626 return survives_p || PURE_POINTER_P ((void *) XPNTR (obj));
6627 }
6628
6629
6630 \f
6631
6632 NO_INLINE /* For better stack traces */
6633 static void
6634 sweep_conses (void)
6635 {
6636 struct cons_block *cblk;
6637 struct cons_block **cprev = &cons_block;
6638 int lim = cons_block_index;
6639 EMACS_INT num_free = 0, num_used = 0;
6640
6641 cons_free_list = 0;
6642
6643 for (cblk = cons_block; cblk; cblk = *cprev)
6644 {
6645 int i = 0;
6646 int this_free = 0;
6647 int ilim = (lim + BITS_PER_BITS_WORD - 1) / BITS_PER_BITS_WORD;
6648
6649 /* Scan the mark bits an int at a time. */
6650 for (i = 0; i < ilim; i++)
6651 {
6652 if (cblk->gcmarkbits[i] == BITS_WORD_MAX)
6653 {
6654 /* Fast path - all cons cells for this int are marked. */
6655 cblk->gcmarkbits[i] = 0;
6656 num_used += BITS_PER_BITS_WORD;
6657 }
6658 else
6659 {
6660 /* Some cons cells for this int are not marked.
6661 Find which ones, and free them. */
6662 int start, pos, stop;
6663
6664 start = i * BITS_PER_BITS_WORD;
6665 stop = lim - start;
6666 if (stop > BITS_PER_BITS_WORD)
6667 stop = BITS_PER_BITS_WORD;
6668 stop += start;
6669
6670 for (pos = start; pos < stop; pos++)
6671 {
6672 if (!CONS_MARKED_P (&cblk->conses[pos]))
6673 {
6674 this_free++;
6675 cblk->conses[pos].u.chain = cons_free_list;
6676 cons_free_list = &cblk->conses[pos];
6677 #if GC_MARK_STACK
6678 cons_free_list->car = Vdead;
6679 #endif
6680 }
6681 else
6682 {
6683 num_used++;
6684 CONS_UNMARK (&cblk->conses[pos]);
6685 }
6686 }
6687 }
6688 }
6689
6690 lim = CONS_BLOCK_SIZE;
6691 /* If this block contains only free conses and we have already
6692 seen more than two blocks worth of free conses then deallocate
6693 this block. */
6694 if (this_free == CONS_BLOCK_SIZE && num_free > CONS_BLOCK_SIZE)
6695 {
6696 *cprev = cblk->next;
6697 /* Unhook from the free list. */
6698 cons_free_list = cblk->conses[0].u.chain;
6699 lisp_align_free (cblk);
6700 }
6701 else
6702 {
6703 num_free += this_free;
6704 cprev = &cblk->next;
6705 }
6706 }
6707 total_conses = num_used;
6708 total_free_conses = num_free;
6709 }
6710
6711 NO_INLINE /* For better stack traces */
6712 static void
6713 sweep_floats (void)
6714 {
6715 register struct float_block *fblk;
6716 struct float_block **fprev = &float_block;
6717 register int lim = float_block_index;
6718 EMACS_INT num_free = 0, num_used = 0;
6719
6720 float_free_list = 0;
6721
6722 for (fblk = float_block; fblk; fblk = *fprev)
6723 {
6724 register int i;
6725 int this_free = 0;
6726 for (i = 0; i < lim; i++)
6727 if (!FLOAT_MARKED_P (&fblk->floats[i]))
6728 {
6729 this_free++;
6730 fblk->floats[i].u.chain = float_free_list;
6731 float_free_list = &fblk->floats[i];
6732 }
6733 else
6734 {
6735 num_used++;
6736 FLOAT_UNMARK (&fblk->floats[i]);
6737 }
6738 lim = FLOAT_BLOCK_SIZE;
6739 /* If this block contains only free floats and we have already
6740 seen more than two blocks worth of free floats then deallocate
6741 this block. */
6742 if (this_free == FLOAT_BLOCK_SIZE && num_free > FLOAT_BLOCK_SIZE)
6743 {
6744 *fprev = fblk->next;
6745 /* Unhook from the free list. */
6746 float_free_list = fblk->floats[0].u.chain;
6747 lisp_align_free (fblk);
6748 }
6749 else
6750 {
6751 num_free += this_free;
6752 fprev = &fblk->next;
6753 }
6754 }
6755 total_floats = num_used;
6756 total_free_floats = num_free;
6757 }
6758
6759 NO_INLINE /* For better stack traces */
6760 static void
6761 sweep_intervals (void)
6762 {
6763 register struct interval_block *iblk;
6764 struct interval_block **iprev = &interval_block;
6765 register int lim = interval_block_index;
6766 EMACS_INT num_free = 0, num_used = 0;
6767
6768 interval_free_list = 0;
6769
6770 for (iblk = interval_block; iblk; iblk = *iprev)
6771 {
6772 register int i;
6773 int this_free = 0;
6774
6775 for (i = 0; i < lim; i++)
6776 {
6777 if (!iblk->intervals[i].gcmarkbit)
6778 {
6779 set_interval_parent (&iblk->intervals[i], interval_free_list);
6780 interval_free_list = &iblk->intervals[i];
6781 this_free++;
6782 }
6783 else
6784 {
6785 num_used++;
6786 iblk->intervals[i].gcmarkbit = 0;
6787 }
6788 }
6789 lim = INTERVAL_BLOCK_SIZE;
6790 /* If this block contains only free intervals and we have already
6791 seen more than two blocks worth of free intervals then
6792 deallocate this block. */
6793 if (this_free == INTERVAL_BLOCK_SIZE && num_free > INTERVAL_BLOCK_SIZE)
6794 {
6795 *iprev = iblk->next;
6796 /* Unhook from the free list. */
6797 interval_free_list = INTERVAL_PARENT (&iblk->intervals[0]);
6798 lisp_free (iblk);
6799 }
6800 else
6801 {
6802 num_free += this_free;
6803 iprev = &iblk->next;
6804 }
6805 }
6806 total_intervals = num_used;
6807 total_free_intervals = num_free;
6808 }
6809
6810 NO_INLINE /* For better stack traces */
6811 static void
6812 sweep_symbols (void)
6813 {
6814 struct symbol_block *sblk;
6815 struct symbol_block **sprev = &symbol_block;
6816 int lim = symbol_block_index;
6817 EMACS_INT num_free = 0, num_used = ARRAYELTS (lispsym);
6818
6819 symbol_free_list = NULL;
6820
6821 for (int i = 0; i < ARRAYELTS (lispsym); i++)
6822 lispsym[i].gcmarkbit = 0;
6823
6824 for (sblk = symbol_block; sblk; sblk = *sprev)
6825 {
6826 int this_free = 0;
6827 union aligned_Lisp_Symbol *sym = sblk->symbols;
6828 union aligned_Lisp_Symbol *end = sym + lim;
6829
6830 for (; sym < end; ++sym)
6831 {
6832 if (!sym->s.gcmarkbit)
6833 {
6834 if (sym->s.redirect == SYMBOL_LOCALIZED)
6835 xfree (SYMBOL_BLV (&sym->s));
6836 sym->s.next = symbol_free_list;
6837 symbol_free_list = &sym->s;
6838 #if GC_MARK_STACK
6839 symbol_free_list->function = Vdead;
6840 #endif
6841 ++this_free;
6842 }
6843 else
6844 {
6845 ++num_used;
6846 sym->s.gcmarkbit = 0;
6847 /* Attempt to catch bogus objects. */
6848 eassert (valid_lisp_object_p (sym->s.function));
6849 }
6850 }
6851
6852 lim = SYMBOL_BLOCK_SIZE;
6853 /* If this block contains only free symbols and we have already
6854 seen more than two blocks worth of free symbols then deallocate
6855 this block. */
6856 if (this_free == SYMBOL_BLOCK_SIZE && num_free > SYMBOL_BLOCK_SIZE)
6857 {
6858 *sprev = sblk->next;
6859 /* Unhook from the free list. */
6860 symbol_free_list = sblk->symbols[0].s.next;
6861 lisp_free (sblk);
6862 }
6863 else
6864 {
6865 num_free += this_free;
6866 sprev = &sblk->next;
6867 }
6868 }
6869 total_symbols = num_used;
6870 total_free_symbols = num_free;
6871 }
6872
6873 NO_INLINE /* For better stack traces */
6874 static void
6875 sweep_misc (void)
6876 {
6877 register struct marker_block *mblk;
6878 struct marker_block **mprev = &marker_block;
6879 register int lim = marker_block_index;
6880 EMACS_INT num_free = 0, num_used = 0;
6881
6882 /* Put all unmarked misc's on free list. For a marker, first
6883 unchain it from the buffer it points into. */
6884
6885 marker_free_list = 0;
6886
6887 for (mblk = marker_block; mblk; mblk = *mprev)
6888 {
6889 register int i;
6890 int this_free = 0;
6891
6892 for (i = 0; i < lim; i++)
6893 {
6894 if (!mblk->markers[i].m.u_any.gcmarkbit)
6895 {
6896 if (mblk->markers[i].m.u_any.type == Lisp_Misc_Marker)
6897 unchain_marker (&mblk->markers[i].m.u_marker);
6898 if (mblk->markers[i].m.u_any.type == Lisp_Misc_Finalizer)
6899 unchain_finalizer (&mblk->markers[i].m.u_finalizer);
6900 /* Set the type of the freed object to Lisp_Misc_Free.
6901 We could leave the type alone, since nobody checks it,
6902 but this might catch bugs faster. */
6903 mblk->markers[i].m.u_marker.type = Lisp_Misc_Free;
6904 mblk->markers[i].m.u_free.chain = marker_free_list;
6905 marker_free_list = &mblk->markers[i].m;
6906 this_free++;
6907 }
6908 else
6909 {
6910 num_used++;
6911 mblk->markers[i].m.u_any.gcmarkbit = 0;
6912 }
6913 }
6914 lim = MARKER_BLOCK_SIZE;
6915 /* If this block contains only free markers and we have already
6916 seen more than two blocks worth of free markers then deallocate
6917 this block. */
6918 if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE)
6919 {
6920 *mprev = mblk->next;
6921 /* Unhook from the free list. */
6922 marker_free_list = mblk->markers[0].m.u_free.chain;
6923 lisp_free (mblk);
6924 }
6925 else
6926 {
6927 num_free += this_free;
6928 mprev = &mblk->next;
6929 }
6930 }
6931
6932 total_markers = num_used;
6933 total_free_markers = num_free;
6934 }
6935
6936 NO_INLINE /* For better stack traces */
6937 static void
6938 sweep_buffers (void)
6939 {
6940 register struct buffer *buffer, **bprev = &all_buffers;
6941
6942 total_buffers = 0;
6943 for (buffer = all_buffers; buffer; buffer = *bprev)
6944 if (!VECTOR_MARKED_P (buffer))
6945 {
6946 *bprev = buffer->next;
6947 lisp_free (buffer);
6948 }
6949 else
6950 {
6951 VECTOR_UNMARK (buffer);
6952 /* Do not use buffer_(set|get)_intervals here. */
6953 buffer->text->intervals = balance_intervals (buffer->text->intervals);
6954 total_buffers++;
6955 bprev = &buffer->next;
6956 }
6957 }
6958
6959 /* Sweep: find all structures not marked, and free them. */
6960 static void
6961 gc_sweep (void)
6962 {
6963 /* Remove or mark entries in weak hash tables.
6964 This must be done before any object is unmarked. */
6965 sweep_weak_hash_tables ();
6966
6967 sweep_strings ();
6968 check_string_bytes (!noninteractive);
6969 sweep_conses ();
6970 sweep_floats ();
6971 sweep_intervals ();
6972 sweep_symbols ();
6973 sweep_misc ();
6974 sweep_buffers ();
6975 sweep_vectors ();
6976 check_string_bytes (!noninteractive);
6977 }
6978
6979 DEFUN ("memory-info", Fmemory_info, Smemory_info, 0, 0, 0,
6980 doc: /* Return a list of (TOTAL-RAM FREE-RAM TOTAL-SWAP FREE-SWAP).
6981 All values are in Kbytes. If there is no swap space,
6982 last two values are zero. If the system is not supported
6983 or memory information can't be obtained, return nil. */)
6984 (void)
6985 {
6986 #if defined HAVE_LINUX_SYSINFO
6987 struct sysinfo si;
6988 uintmax_t units;
6989
6990 if (sysinfo (&si))
6991 return Qnil;
6992 #ifdef LINUX_SYSINFO_UNIT
6993 units = si.mem_unit;
6994 #else
6995 units = 1;
6996 #endif
6997 return list4i ((uintmax_t) si.totalram * units / 1024,
6998 (uintmax_t) si.freeram * units / 1024,
6999 (uintmax_t) si.totalswap * units / 1024,
7000 (uintmax_t) si.freeswap * units / 1024);
7001 #elif defined WINDOWSNT
7002 unsigned long long totalram, freeram, totalswap, freeswap;
7003
7004 if (w32_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7005 return list4i ((uintmax_t) totalram / 1024,
7006 (uintmax_t) freeram / 1024,
7007 (uintmax_t) totalswap / 1024,
7008 (uintmax_t) freeswap / 1024);
7009 else
7010 return Qnil;
7011 #elif defined MSDOS
7012 unsigned long totalram, freeram, totalswap, freeswap;
7013
7014 if (dos_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
7015 return list4i ((uintmax_t) totalram / 1024,
7016 (uintmax_t) freeram / 1024,
7017 (uintmax_t) totalswap / 1024,
7018 (uintmax_t) freeswap / 1024);
7019 else
7020 return Qnil;
7021 #else /* not HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7022 /* FIXME: add more systems. */
7023 return Qnil;
7024 #endif /* HAVE_LINUX_SYSINFO, not WINDOWSNT, not MSDOS */
7025 }
7026
7027 /* Debugging aids. */
7028
7029 DEFUN ("memory-limit", Fmemory_limit, Smemory_limit, 0, 0, 0,
7030 doc: /* Return the address of the last byte Emacs has allocated, divided by 1024.
7031 This may be helpful in debugging Emacs's memory usage.
7032 We divide the value by 1024 to make sure it fits in a Lisp integer. */)
7033 (void)
7034 {
7035 Lisp_Object end;
7036
7037 #ifdef HAVE_NS
7038 /* Avoid warning. sbrk has no relation to memory allocated anyway. */
7039 XSETINT (end, 0);
7040 #else
7041 XSETINT (end, (intptr_t) (char *) sbrk (0) / 1024);
7042 #endif
7043
7044 return end;
7045 }
7046
7047 DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0,
7048 doc: /* Return a list of counters that measure how much consing there has been.
7049 Each of these counters increments for a certain kind of object.
7050 The counters wrap around from the largest positive integer to zero.
7051 Garbage collection does not decrease them.
7052 The elements of the value are as follows:
7053 (CONSES FLOATS VECTOR-CELLS SYMBOLS STRING-CHARS MISCS INTERVALS STRINGS)
7054 All are in units of 1 = one object consed
7055 except for VECTOR-CELLS and STRING-CHARS, which count the total length of
7056 objects consed.
7057 MISCS include overlays, markers, and some internal types.
7058 Frames, windows, buffers, and subprocesses count as vectors
7059 (but the contents of a buffer's text do not count here). */)
7060 (void)
7061 {
7062 return listn (CONSTYPE_HEAP, 8,
7063 bounded_number (cons_cells_consed),
7064 bounded_number (floats_consed),
7065 bounded_number (vector_cells_consed),
7066 bounded_number (symbols_consed),
7067 bounded_number (string_chars_consed),
7068 bounded_number (misc_objects_consed),
7069 bounded_number (intervals_consed),
7070 bounded_number (strings_consed));
7071 }
7072
7073 static bool
7074 symbol_uses_obj (Lisp_Object symbol, Lisp_Object obj)
7075 {
7076 struct Lisp_Symbol *sym = XSYMBOL (symbol);
7077 Lisp_Object val = find_symbol_value (symbol);
7078 return (EQ (val, obj)
7079 || EQ (sym->function, obj)
7080 || (!NILP (sym->function)
7081 && COMPILEDP (sym->function)
7082 && EQ (AREF (sym->function, COMPILED_BYTECODE), obj))
7083 || (!NILP (val)
7084 && COMPILEDP (val)
7085 && EQ (AREF (val, COMPILED_BYTECODE), obj)));
7086 }
7087
7088 /* Find at most FIND_MAX symbols which have OBJ as their value or
7089 function. This is used in gdbinit's `xwhichsymbols' command. */
7090
7091 Lisp_Object
7092 which_symbols (Lisp_Object obj, EMACS_INT find_max)
7093 {
7094 struct symbol_block *sblk;
7095 ptrdiff_t gc_count = inhibit_garbage_collection ();
7096 Lisp_Object found = Qnil;
7097
7098 if (! DEADP (obj))
7099 {
7100 for (int i = 0; i < ARRAYELTS (lispsym); i++)
7101 {
7102 Lisp_Object sym = builtin_lisp_symbol (i);
7103 if (symbol_uses_obj (sym, obj))
7104 {
7105 found = Fcons (sym, found);
7106 if (--find_max == 0)
7107 goto out;
7108 }
7109 }
7110
7111 for (sblk = symbol_block; sblk; sblk = sblk->next)
7112 {
7113 union aligned_Lisp_Symbol *aligned_sym = sblk->symbols;
7114 int bn;
7115
7116 for (bn = 0; bn < SYMBOL_BLOCK_SIZE; bn++, aligned_sym++)
7117 {
7118 if (sblk == symbol_block && bn >= symbol_block_index)
7119 break;
7120
7121 Lisp_Object sym = make_lisp_symbol (&aligned_sym->s);
7122 if (symbol_uses_obj (sym, obj))
7123 {
7124 found = Fcons (sym, found);
7125 if (--find_max == 0)
7126 goto out;
7127 }
7128 }
7129 }
7130 }
7131
7132 out:
7133 unbind_to (gc_count, Qnil);
7134 return found;
7135 }
7136
7137 #ifdef SUSPICIOUS_OBJECT_CHECKING
7138
7139 static void *
7140 find_suspicious_object_in_range (void *begin, void *end)
7141 {
7142 char *begin_a = begin;
7143 char *end_a = end;
7144 int i;
7145
7146 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7147 {
7148 char *suspicious_object = suspicious_objects[i];
7149 if (begin_a <= suspicious_object && suspicious_object < end_a)
7150 return suspicious_object;
7151 }
7152
7153 return NULL;
7154 }
7155
7156 static void
7157 note_suspicious_free (void* ptr)
7158 {
7159 struct suspicious_free_record* rec;
7160
7161 rec = &suspicious_free_history[suspicious_free_history_index++];
7162 if (suspicious_free_history_index ==
7163 ARRAYELTS (suspicious_free_history))
7164 {
7165 suspicious_free_history_index = 0;
7166 }
7167
7168 memset (rec, 0, sizeof (*rec));
7169 rec->suspicious_object = ptr;
7170 backtrace (&rec->backtrace[0], ARRAYELTS (rec->backtrace));
7171 }
7172
7173 static void
7174 detect_suspicious_free (void* ptr)
7175 {
7176 int i;
7177
7178 eassert (ptr != NULL);
7179
7180 for (i = 0; i < ARRAYELTS (suspicious_objects); ++i)
7181 if (suspicious_objects[i] == ptr)
7182 {
7183 note_suspicious_free (ptr);
7184 suspicious_objects[i] = NULL;
7185 }
7186 }
7187
7188 #endif /* SUSPICIOUS_OBJECT_CHECKING */
7189
7190 DEFUN ("suspicious-object", Fsuspicious_object, Ssuspicious_object, 1, 1, 0,
7191 doc: /* Return OBJ, maybe marking it for extra scrutiny.
7192 If Emacs is compiled with suspicious object checking, capture
7193 a stack trace when OBJ is freed in order to help track down
7194 garbage collection bugs. Otherwise, do nothing and return OBJ. */)
7195 (Lisp_Object obj)
7196 {
7197 #ifdef SUSPICIOUS_OBJECT_CHECKING
7198 /* Right now, we care only about vectors. */
7199 if (VECTORLIKEP (obj))
7200 {
7201 suspicious_objects[suspicious_object_index++] = XVECTOR (obj);
7202 if (suspicious_object_index == ARRAYELTS (suspicious_objects))
7203 suspicious_object_index = 0;
7204 }
7205 #endif
7206 return obj;
7207 }
7208
7209 #ifdef ENABLE_CHECKING
7210
7211 bool suppress_checking;
7212
7213 void
7214 die (const char *msg, const char *file, int line)
7215 {
7216 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: assertion failed: %s\r\n",
7217 file, line, msg);
7218 terminate_due_to_signal (SIGABRT, INT_MAX);
7219 }
7220
7221 #endif /* ENABLE_CHECKING */
7222
7223 #if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
7224
7225 /* Debugging check whether STR is ASCII-only. */
7226
7227 const char *
7228 verify_ascii (const char *str)
7229 {
7230 const unsigned char *ptr = (unsigned char *) str, *end = ptr + strlen (str);
7231 while (ptr < end)
7232 {
7233 int c = STRING_CHAR_ADVANCE (ptr);
7234 if (!ASCII_CHAR_P (c))
7235 emacs_abort ();
7236 }
7237 return str;
7238 }
7239
7240 /* Stress alloca with inconveniently sized requests and check
7241 whether all allocated areas may be used for Lisp_Object. */
7242
7243 NO_INLINE static void
7244 verify_alloca (void)
7245 {
7246 int i;
7247 enum { ALLOCA_CHECK_MAX = 256 };
7248 /* Start from size of the smallest Lisp object. */
7249 for (i = sizeof (struct Lisp_Cons); i <= ALLOCA_CHECK_MAX; i++)
7250 {
7251 void *ptr = alloca (i);
7252 make_lisp_ptr (ptr, Lisp_Cons);
7253 }
7254 }
7255
7256 #else /* not ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7257
7258 #define verify_alloca() ((void) 0)
7259
7260 #endif /* ENABLE_CHECKING && USE_STACK_LISP_OBJECTS */
7261
7262 /* Initialization. */
7263
7264 void
7265 init_alloc_once (void)
7266 {
7267 /* Even though Qt's contents are not set up, its address is known. */
7268 Vpurify_flag = Qt;
7269 gc_precise = (GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE);
7270
7271 purebeg = PUREBEG;
7272 pure_size = PURESIZE;
7273
7274 verify_alloca ();
7275 init_finalizer_list (&finalizers);
7276 init_finalizer_list (&doomed_finalizers);
7277
7278 #if GC_MARK_STACK || defined GC_MALLOC_CHECK
7279 mem_init ();
7280 Vdead = make_pure_string ("DEAD", 4, 4, 0);
7281 #endif
7282
7283 #ifdef DOUG_LEA_MALLOC
7284 mallopt (M_TRIM_THRESHOLD, 128 * 1024); /* Trim threshold. */
7285 mallopt (M_MMAP_THRESHOLD, 64 * 1024); /* Mmap threshold. */
7286 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); /* Max. number of mmap'ed areas. */
7287 #endif
7288 init_strings ();
7289 init_vectors ();
7290
7291 refill_memory_reserve ();
7292 gc_cons_threshold = GC_DEFAULT_THRESHOLD;
7293 }
7294
7295 void
7296 init_alloc (void)
7297 {
7298 gcprolist = 0;
7299 byte_stack_list = 0;
7300 #if GC_MARK_STACK
7301 #if !defined GC_SAVE_REGISTERS_ON_STACK && !defined GC_SETJMP_WORKS
7302 setjmp_tested_p = longjmps_done = 0;
7303 #endif
7304 #endif
7305 Vgc_elapsed = make_float (0.0);
7306 gcs_done = 0;
7307
7308 #if USE_VALGRIND
7309 valgrind_p = RUNNING_ON_VALGRIND != 0;
7310 #endif
7311 }
7312
7313 void
7314 syms_of_alloc (void)
7315 {
7316 DEFVAR_INT ("gc-cons-threshold", gc_cons_threshold,
7317 doc: /* Number of bytes of consing between garbage collections.
7318 Garbage collection can happen automatically once this many bytes have been
7319 allocated since the last garbage collection. All data types count.
7320
7321 Garbage collection happens automatically only when `eval' is called.
7322
7323 By binding this temporarily to a large number, you can effectively
7324 prevent garbage collection during a part of the program.
7325 See also `gc-cons-percentage'. */);
7326
7327 DEFVAR_LISP ("gc-cons-percentage", Vgc_cons_percentage,
7328 doc: /* Portion of the heap used for allocation.
7329 Garbage collection can happen automatically once this portion of the heap
7330 has been allocated since the last garbage collection.
7331 If this portion is smaller than `gc-cons-threshold', this is ignored. */);
7332 Vgc_cons_percentage = make_float (0.1);
7333
7334 DEFVAR_INT ("pure-bytes-used", pure_bytes_used,
7335 doc: /* Number of bytes of shareable Lisp data allocated so far. */);
7336
7337 DEFVAR_INT ("cons-cells-consed", cons_cells_consed,
7338 doc: /* Number of cons cells that have been consed so far. */);
7339
7340 DEFVAR_INT ("floats-consed", floats_consed,
7341 doc: /* Number of floats that have been consed so far. */);
7342
7343 DEFVAR_INT ("vector-cells-consed", vector_cells_consed,
7344 doc: /* Number of vector cells that have been consed so far. */);
7345
7346 DEFVAR_INT ("symbols-consed", symbols_consed,
7347 doc: /* Number of symbols that have been consed so far. */);
7348 symbols_consed += ARRAYELTS (lispsym);
7349
7350 DEFVAR_INT ("string-chars-consed", string_chars_consed,
7351 doc: /* Number of string characters that have been consed so far. */);
7352
7353 DEFVAR_INT ("misc-objects-consed", misc_objects_consed,
7354 doc: /* Number of miscellaneous objects that have been consed so far.
7355 These include markers and overlays, plus certain objects not visible
7356 to users. */);
7357
7358 DEFVAR_INT ("intervals-consed", intervals_consed,
7359 doc: /* Number of intervals that have been consed so far. */);
7360
7361 DEFVAR_INT ("strings-consed", strings_consed,
7362 doc: /* Number of strings that have been consed so far. */);
7363
7364 DEFVAR_LISP ("purify-flag", Vpurify_flag,
7365 doc: /* Non-nil means loading Lisp code in order to dump an executable.
7366 This means that certain objects should be allocated in shared (pure) space.
7367 It can also be set to a hash-table, in which case this table is used to
7368 do hash-consing of the objects allocated to pure space. */);
7369
7370 DEFVAR_BOOL ("garbage-collection-messages", garbage_collection_messages,
7371 doc: /* Non-nil means display messages at start and end of garbage collection. */);
7372 garbage_collection_messages = 0;
7373
7374 DEFVAR_LISP ("post-gc-hook", Vpost_gc_hook,
7375 doc: /* Hook run after garbage collection has finished. */);
7376 Vpost_gc_hook = Qnil;
7377 DEFSYM (Qpost_gc_hook, "post-gc-hook");
7378
7379 DEFVAR_LISP ("memory-signal-data", Vmemory_signal_data,
7380 doc: /* Precomputed `signal' argument for memory-full error. */);
7381 /* We build this in advance because if we wait until we need it, we might
7382 not be able to allocate the memory to hold it. */
7383 Vmemory_signal_data
7384 = listn (CONSTYPE_PURE, 2, Qerror,
7385 build_pure_c_string ("Memory exhausted--use M-x save-some-buffers then exit and restart Emacs"));
7386
7387 DEFVAR_LISP ("memory-full", Vmemory_full,
7388 doc: /* Non-nil means Emacs cannot get much more Lisp memory. */);
7389 Vmemory_full = Qnil;
7390
7391 DEFSYM (Qconses, "conses");
7392 DEFSYM (Qsymbols, "symbols");
7393 DEFSYM (Qmiscs, "miscs");
7394 DEFSYM (Qstrings, "strings");
7395 DEFSYM (Qvectors, "vectors");
7396 DEFSYM (Qfloats, "floats");
7397 DEFSYM (Qintervals, "intervals");
7398 DEFSYM (Qbuffers, "buffers");
7399 DEFSYM (Qstring_bytes, "string-bytes");
7400 DEFSYM (Qvector_slots, "vector-slots");
7401 DEFSYM (Qheap, "heap");
7402 DEFSYM (Qautomatic_gc, "Automatic GC");
7403
7404 DEFSYM (Qgc_cons_threshold, "gc-cons-threshold");
7405 DEFSYM (Qchar_table_extra_slots, "char-table-extra-slots");
7406
7407 DEFVAR_LISP ("gc-elapsed", Vgc_elapsed,
7408 doc: /* Accumulated time elapsed in garbage collections.
7409 The time is in seconds as a floating point value. */);
7410 DEFVAR_INT ("gcs-done", gcs_done,
7411 doc: /* Accumulated number of garbage collections done. */);
7412
7413 DEFVAR_BOOL ("gc-precise", gc_precise,
7414 doc: /* Non-nil means GC stack marking is precise.
7415 Useful mainly for automated GC tests. Build time constant.*/);
7416 XSYMBOL (intern_c_string ("gc-precise"))->constant = 1;
7417
7418 defsubr (&Scons);
7419 defsubr (&Slist);
7420 defsubr (&Svector);
7421 defsubr (&Sbool_vector);
7422 defsubr (&Smake_byte_code);
7423 defsubr (&Smake_list);
7424 defsubr (&Smake_vector);
7425 defsubr (&Smake_string);
7426 defsubr (&Smake_bool_vector);
7427 defsubr (&Smake_symbol);
7428 defsubr (&Smake_marker);
7429 defsubr (&Smake_finalizer);
7430 defsubr (&Spurecopy);
7431 defsubr (&Sgarbage_collect);
7432 defsubr (&Smemory_limit);
7433 defsubr (&Smemory_info);
7434 defsubr (&Smemory_use_counts);
7435 defsubr (&Ssuspicious_object);
7436
7437 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
7438 defsubr (&Sgc_status);
7439 #endif
7440 }
7441
7442 /* When compiled with GCC, GDB might say "No enum type named
7443 pvec_type" if we don't have at least one symbol with that type, and
7444 then xbacktrace could fail. Similarly for the other enums and
7445 their values. Some non-GCC compilers don't like these constructs. */
7446 #ifdef __GNUC__
7447 union
7448 {
7449 enum CHARTAB_SIZE_BITS CHARTAB_SIZE_BITS;
7450 enum char_table_specials char_table_specials;
7451 enum char_bits char_bits;
7452 enum CHECK_LISP_OBJECT_TYPE CHECK_LISP_OBJECT_TYPE;
7453 enum DEFAULT_HASH_SIZE DEFAULT_HASH_SIZE;
7454 enum Lisp_Bits Lisp_Bits;
7455 enum Lisp_Compiled Lisp_Compiled;
7456 enum maxargs maxargs;
7457 enum MAX_ALLOCA MAX_ALLOCA;
7458 enum More_Lisp_Bits More_Lisp_Bits;
7459 enum pvec_type pvec_type;
7460 } const EXTERNALLY_VISIBLE gdb_make_enums_visible = {0};
7461 #endif /* __GNUC__ */