error is near the end of file
** fix a double-error case in unibyte octet conversions, when the first
use of USE-VALUE is ignored.
+ * enhancement: SB-INTROSPECT:ALLOCATION-INFORMATION also reports if the
+ object is allocated in a boxed region of dynamic space.
* bug fix: uses of slot accessors on specialized method parameters within
the bodies of SLOT-VALUE-USING-CLASS methods no longer triggers a type
error while finalizing the class. This fix may cause classes with slot
Indicates a \"large\" object subject to non-copying
promotion. (GENCGC and :SPACE :DYNAMIC only.)
+ :BOXED
+ Indicates that the object is allocated in a boxed region. Unboxed
+ allocation is used for eg. specialized arrays after they have survived one
+ collection. (GENCGC and :SPACE :DYNAMIC only.)
+
:PINNED
Indicates that the page(s) on which the object resides are kept live due
to conservative references. Note that object may reside on a pinned page
(list :space space
:generation (sb-alien:slot page 'sb-vm::gen)
:write-protected (logbitp 0 flags)
+ :boxed (logbitp 2 flags)
:pinned (logbitp 5 flags)
:large (logbitp 6 flags)))))
(list :space space))
/* The verbose argument controls how much to print: 0 for normal
* level of detail; 1 for debugging. */
-static void
-print_generation_stats(int verbose) /* FIXME: should take FILE argument */
+extern void
+print_generation_stats() /* FIXME: should take FILE argument, or construct a string */
{
- generation_index_t i, gens;
+ generation_index_t i;
#if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)
#define FPU_STATE_SIZE 27
* so they need to be saved and reset for C. */
fpu_save(fpu_state);
- /* highest generation to print */
- if (verbose)
- gens = SCRATCH_GENERATION;
- else
- gens = PSEUDO_STATIC_GENERATION;
-
/* Print the heap stats. */
fprintf(stderr,
" Gen StaPg UbSta LaSta LUbSt Boxed Unboxed LB LUB !move Alloc Waste Trig WP GCs Mem-age\n");
- for (i = 0; i < gens; i++) {
+ for (i = 0; i < SCRATCH_GENERATION; i++) {
page_index_t j;
long boxed_cnt = 0;
long unboxed_cnt = 0;
/* If we are in GC, or totally out of memory there is no way
* to sanely transfer control to the lisp-side of things.
*/
- print_generation_stats(1);
+ print_generation_stats();
fprintf(stderr, "GC control variables:\n");
fprintf(stderr, " *GC-INHIBIT* = %s\n *GC-PENDING* = %s\n",
SymbolValue(GC_INHIBIT,thread)==NIL ? "false" : "true",
}
if (gencgc_verbose > 1)
- print_generation_stats(0);
+ print_generation_stats();
do {
/* Collect the generation. */
if (gencgc_verbose > 1) {
FSHOW((stderr, "GC of generation %d finished:\n", gen));
- print_generation_stats(0);
+ print_generation_stats();
}
gen++;
}
if (gencgc_verbose > 1)
- print_generation_stats(0);
+ print_generation_stats();
/* Initialize gc_alloc(). */
gc_alloc_generation = 0;