1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-27 21:40:34 +02:00

copy-space: Fix bug computing field logging byte location

Also re-enable survivors in generational-pcc :)
This commit is contained in:
Andy Wingo 2025-01-13 09:12:34 +01:00
parent 27f9a1f01e
commit b37a7f3862
2 changed files with 2 additions and 2 deletions

View file

@ -346,7 +346,7 @@ copy_space_field_logged_byte(struct gc_edge edge) {
base += offsetof(struct copy_space_slab, blocks);
uintptr_t field = (addr & (COPY_SPACE_SLAB_SIZE - 1)) / sizeof(uintptr_t);
uintptr_t byte = field / 8;
return (uint8_t*) (base + field);
return (uint8_t*) (base + byte);
}
static uint8_t

View file

@ -324,7 +324,7 @@ static inline int do_minor_trace(struct gc_heap *heap, struct gc_edge edge,
// However however, it is hard to distinguish between edges from promoted
// objects and edges from old objects, so we mostly just rely on an
// idempotent "log if unlogged" operation instead.
int promote = copy_space_should_promote(new_space, ref) || 1;
int promote = copy_space_should_promote(new_space, ref);
struct copy_space *dst_space = promote ? old_space : new_space;
struct copy_space_allocator *alloc = promote
? trace_worker_old_space_allocator(data)