On Thu 23 May 2013 22:35, l...@gnu.org (Ludovic Courtès) writes: >> The best is to use mmap. But if you fall back, malloc is OK, and we can >> manually align it. In any case the loader ends up adding part of the >> image to the GC roots, so it's probably best that the memory not be >> managed by the GC itself. > > But malloc’d and mmap’d regions are not scanned by default, so here they > would need to be scanned, or the GC-managed data they refer to would > need to be registered as root, no? > > (This reminds me of > <http://thread.gmane.org/gmane.comp.programming.garbage-collection.boehmgc/2576>, > except that with Guile’s loader GNU_RELRO regions could refer to > GC-managed data.)
See the patch :) There is a part of the dynamic section that specifies the GC roots, which are added using GC_add_roots. >>> Since .go are only produced by Guile, can it really happen to have .go >>> files without 8-byte alignment? >> >> Yes! If the system supports mmap, .go files should be produced with >> 4096-byte alignment so that the whole thing can be mapped read-only, and >> write permissions only need be given to the writable pages. (Mprotect >> only works on a page level.) > > Oh, I’m lost. Is it 8B or 4KiB? Can’t .go files always be > page-aligned? In 2.0 the alignment is 8 bytes. In 2.2, it can be any multiple of 8 bytes -- including 4096. >From linker.scm: ;;; By default, the ELF files created by the linker include some padding ;;; so that different parts of the file can be loaded in with different ;;; permissions. For example, some parts of the file are read-only and ;;; thus can be shared between processes. Some parts of the file don't ;;; need to be loaded at all. However this padding can be too much for ;;; interactive compilation, when the code is never written out to disk; ;;; in that case, pass #:page-aligned? #f to `link-elf'. And: If @var{page-aligned?} is true, read-only and writable data are separated so that only those writable parts of the image need be mapped with writable permissions. This is suitable for situations where you would write a file out to disk and read it in with @code{mmap}. Otherwise if @var{page-aligned?} is false, sections default to 8-byte alignment. Andy -- http://wingolog.org/