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