comparison src/alloc.c @ 50468:16fdb9f87d89

(VALIDATE_LISP_STORAGE): Macro deleted. All calls deleted. (lisp_malloc): Do the work here directly.
author Richard M. Stallman <rms@gnu.org>
date Sun, 06 Apr 2003 20:27:19 +0000
parents a617ca0d5d85
children a5a77c7717cb
comparison
equal deleted inserted replaced
50467:cb9a2b0620a3 50468:16fdb9f87d89
81 #define __malloc_size_t size_t 81 #define __malloc_size_t size_t
82 extern __malloc_size_t _bytes_used; 82 extern __malloc_size_t _bytes_used;
83 extern __malloc_size_t __malloc_extra_blocks; 83 extern __malloc_size_t __malloc_extra_blocks;
84 84
85 #endif /* not DOUG_LEA_MALLOC */ 85 #endif /* not DOUG_LEA_MALLOC */
86
87 /* Macro to verify that storage intended for Lisp objects is not
88 out of range to fit in the space for a pointer.
89 ADDRESS is the start of the block, and SIZE
90 is the amount of space within which objects can start. */
91
92 #define VALIDATE_LISP_STORAGE(address, size) \
93 do \
94 { \
95 Lisp_Object val; \
96 XSETCONS (val, (char *) address + size); \
97 if ((char *) XCONS (val) != (char *) address + size) \
98 { \
99 xfree (address); \
100 memory_full (); \
101 } \
102 } while (0)
103 86
104 /* Value of _bytes_used, when spare_memory was freed. */ 87 /* Value of _bytes_used, when spare_memory was freed. */
105 88
106 static __malloc_size_t bytes_used_when_full; 89 static __malloc_size_t bytes_used_when_full;
107 90
582 565
583 /* Like malloc but used for allocating Lisp data. NBYTES is the 566 /* Like malloc but used for allocating Lisp data. NBYTES is the
584 number of bytes to allocate, TYPE describes the intended use of the 567 number of bytes to allocate, TYPE describes the intended use of the
585 allcated memory block (for strings, for conses, ...). */ 568 allcated memory block (for strings, for conses, ...). */
586 569
570 static void *lisp_malloc_loser;
571
587 static POINTER_TYPE * 572 static POINTER_TYPE *
588 lisp_malloc (nbytes, type) 573 lisp_malloc (nbytes, type)
589 size_t nbytes; 574 size_t nbytes;
590 enum mem_type type; 575 enum mem_type type;
591 { 576 {
597 allocated_mem_type = type; 582 allocated_mem_type = type;
598 #endif 583 #endif
599 584
600 val = (void *) malloc (nbytes); 585 val = (void *) malloc (nbytes);
601 586
587 /* If the memory just allocated cannot be addressed thru a Lisp
588 object's pointer, and it needs to be,
589 that's equivalent to running out of memory. */
590 if (val && type != MEM_TYPE_NON_LISP)
591 {
592 Lisp_Object tem;
593 XSETCONS (tem, (char *) val + nbytes - 1);
594 if ((char *) XCONS (tem) != (char *) val + nbytes - 1)
595 {
596 lisp_malloc_loser = val;
597 free (val);
598 val = 0;
599 }
600 }
601
602 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK 602 #if GC_MARK_STACK && !defined GC_MALLOC_CHECK
603 if (val && type != MEM_TYPE_NON_LISP) 603 if (val && type != MEM_TYPE_NON_LISP)
604 mem_insert (val, (char *) val + nbytes, type); 604 mem_insert (val, (char *) val + nbytes, type);
605 #endif 605 #endif
606 606
618 allocate_buffer () 618 allocate_buffer ()
619 { 619 {
620 struct buffer *b 620 struct buffer *b
621 = (struct buffer *) lisp_malloc (sizeof (struct buffer), 621 = (struct buffer *) lisp_malloc (sizeof (struct buffer),
622 MEM_TYPE_BUFFER); 622 MEM_TYPE_BUFFER);
623 VALIDATE_LISP_STORAGE (b, sizeof *b);
624 return b; 623 return b;
625 } 624 }
626 625
627 626
628 /* Free BLOCK. This must be called to free memory allocated with a 627 /* Free BLOCK. This must be called to free memory allocated with a
930 register struct interval_block *newi; 929 register struct interval_block *newi;
931 930
932 newi = (struct interval_block *) lisp_malloc (sizeof *newi, 931 newi = (struct interval_block *) lisp_malloc (sizeof *newi,
933 MEM_TYPE_NON_LISP); 932 MEM_TYPE_NON_LISP);
934 933
935 VALIDATE_LISP_STORAGE (newi, sizeof *newi);
936 newi->next = interval_block; 934 newi->next = interval_block;
937 interval_block = newi; 935 interval_block = newi;
938 interval_block_index = 0; 936 interval_block_index = 0;
939 n_interval_blocks++; 937 n_interval_blocks++;
940 } 938 }
1313 { 1311 {
1314 struct string_block *b; 1312 struct string_block *b;
1315 int i; 1313 int i;
1316 1314
1317 b = (struct string_block *) lisp_malloc (sizeof *b, MEM_TYPE_STRING); 1315 b = (struct string_block *) lisp_malloc (sizeof *b, MEM_TYPE_STRING);
1318 VALIDATE_LISP_STORAGE (b, sizeof *b);
1319 bzero (b, sizeof *b); 1316 bzero (b, sizeof *b);
1320 b->next = string_blocks; 1317 b->next = string_blocks;
1321 string_blocks = b; 1318 string_blocks = b;
1322 ++n_string_blocks; 1319 ++n_string_blocks;
1323 1320
1981 { 1978 {
1982 register struct float_block *new; 1979 register struct float_block *new;
1983 1980
1984 new = (struct float_block *) lisp_malloc (sizeof *new, 1981 new = (struct float_block *) lisp_malloc (sizeof *new,
1985 MEM_TYPE_FLOAT); 1982 MEM_TYPE_FLOAT);
1986 VALIDATE_LISP_STORAGE (new, sizeof *new);
1987 new->next = float_block; 1983 new->next = float_block;
1988 float_block = new; 1984 float_block = new;
1989 float_block_index = 0; 1985 float_block_index = 0;
1990 n_float_blocks++; 1986 n_float_blocks++;
1991 } 1987 }
2088 if (cons_block_index == CONS_BLOCK_SIZE) 2084 if (cons_block_index == CONS_BLOCK_SIZE)
2089 { 2085 {
2090 register struct cons_block *new; 2086 register struct cons_block *new;
2091 new = (struct cons_block *) lisp_malloc (sizeof *new, 2087 new = (struct cons_block *) lisp_malloc (sizeof *new,
2092 MEM_TYPE_CONS); 2088 MEM_TYPE_CONS);
2093 VALIDATE_LISP_STORAGE (new, sizeof *new);
2094 new->next = cons_block; 2089 new->next = cons_block;
2095 cons_block = new; 2090 cons_block = new;
2096 cons_block_index = 0; 2091 cons_block_index = 0;
2097 n_cons_blocks++; 2092 n_cons_blocks++;
2098 } 2093 }
2248 #ifdef DOUG_LEA_MALLOC 2243 #ifdef DOUG_LEA_MALLOC
2249 /* Back to a reasonable maximum of mmap'ed areas. */ 2244 /* Back to a reasonable maximum of mmap'ed areas. */
2250 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); 2245 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
2251 #endif 2246 #endif
2252 2247
2253 VALIDATE_LISP_STORAGE (p, 0);
2254 consing_since_gc += nbytes; 2248 consing_since_gc += nbytes;
2255 vector_cells_consed += len; 2249 vector_cells_consed += len;
2256 2250
2257 p->next = all_vectors; 2251 p->next = all_vectors;
2258 all_vectors = p; 2252 all_vectors = p;
2546 if (symbol_block_index == SYMBOL_BLOCK_SIZE) 2540 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
2547 { 2541 {
2548 struct symbol_block *new; 2542 struct symbol_block *new;
2549 new = (struct symbol_block *) lisp_malloc (sizeof *new, 2543 new = (struct symbol_block *) lisp_malloc (sizeof *new,
2550 MEM_TYPE_SYMBOL); 2544 MEM_TYPE_SYMBOL);
2551 VALIDATE_LISP_STORAGE (new, sizeof *new);
2552 new->next = symbol_block; 2545 new->next = symbol_block;
2553 symbol_block = new; 2546 symbol_block = new;
2554 symbol_block_index = 0; 2547 symbol_block_index = 0;
2555 n_symbol_blocks++; 2548 n_symbol_blocks++;
2556 } 2549 }
2627 if (marker_block_index == MARKER_BLOCK_SIZE) 2620 if (marker_block_index == MARKER_BLOCK_SIZE)
2628 { 2621 {
2629 struct marker_block *new; 2622 struct marker_block *new;
2630 new = (struct marker_block *) lisp_malloc (sizeof *new, 2623 new = (struct marker_block *) lisp_malloc (sizeof *new,
2631 MEM_TYPE_MISC); 2624 MEM_TYPE_MISC);
2632 VALIDATE_LISP_STORAGE (new, sizeof *new);
2633 new->next = marker_block; 2625 new->next = marker_block;
2634 marker_block = new; 2626 marker_block = new;
2635 marker_block_index = 0; 2627 marker_block_index = 0;
2636 n_marker_blocks++; 2628 n_marker_blocks++;
2637 } 2629 }