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