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