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