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