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