diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-01-08 23:32:34 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-01-17 17:49:05 +0100 |
commit | 3cd64feb2e069042f453305a0736f8ae277b2015 (patch) | |
tree | 55fec030cf925f507448cdda6fc3ca50ed8be921 /libguile/gc-malloc.c | |
parent | 4ab71e1f0d623edc3d11eeba5db8b22229954dff (diff) | |
download | guile-3cd64feb2e069042f453305a0736f8ae277b2015.tar.gz |
linker: Do not store entire ELF in memory when writing to a file.
This reduces the amount of memory that needs to be allocated while
writing the ELF file to disk.
Note: We're abusing #:page-aligned? in 'link-elf' to choose whether to
return a bytevector or a procedure.
* module/system/vm/linker.scm (process-reloc): Subtract SECTION-OFFSET
when writing to BV.
(write-linker-object): Pass BV directly to the linker object writer.
(link-elf): When PAGE-ALIGNED? is false, call 'bytevector-slice' from
here. When it is true, return a procedure that takes a port and writes
to it, without having to allocate a bytevector for the whole ELF
container.
* module/language/bytecode/spec.scm (bytecode->value): Handle X being a
procedure instead of a bytevector.
(bytecode) <#:printer>: Likewise.
* test-suite/tests/linker.test (link-elf-with-one-main-section): Pass
#:page-aligned? #f.
Diffstat (limited to 'libguile/gc-malloc.c')
0 files changed, 0 insertions, 0 deletions