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