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