[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 05/09: assembler: Separate effectful part of 'link-frame
From: |
Ludovic Courtès |
Subject: |
[Guile-commits] 05/09: assembler: Separate effectful part of 'link-frame-maps'. |
Date: |
Sat, 7 Jan 2023 16:54:53 -0500 (EST) |
civodul pushed a commit to branch wip-linker-assembler-memory-consumption
in repository guile.
commit 0a5768addcc18a2175e87148beeb60870ee23a2d
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Fri Jan 6 15:48:50 2023 +0100
assembler: Separate effectful part of 'link-frame-maps'.
* module/system/vm/assembler.scm (link-frame-maps)[make-frame-maps]:
Define 'write!' and use it.
---
module/system/vm/assembler.scm | 43 +++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 1b0bf5c45..872cc31c6 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -2262,25 +2262,30 @@ needed."
(header-pos frame-maps-prefix-len)
(map-pos (+ header-pos (* count frame-map-header-len)))
(bv (make-bytevector (+ map-pos map-len) 0)))
- (bytevector-u32-set! bv 4 map-pos endianness)
- (let lp ((maps maps) (header-pos header-pos) (map-pos map-pos))
- (match maps
- (()
- (make-object asm '.guile.frame-maps bv
- (list (make-linker-reloc 'abs32/1 0 0 '.rtl-text))
- '() #:type SHT_PROGBITS #:flags SHF_ALLOC))
- (((pos proc-slot . map) . maps)
- (bytevector-u32-set! bv header-pos pos endianness)
- (bytevector-u32-set! bv (+ header-pos 4) map-pos endianness)
- (let write-bytes ((map-pos map-pos)
- (map map)
- (byte-length (map-byte-length proc-slot)))
- (if (zero? byte-length)
- (lp maps (+ header-pos frame-map-header-len) map-pos)
- (begin
- (bytevector-u8-set! bv map-pos (logand map #xff))
- (write-bytes (1+ map-pos) (ash map -8)
- (1- byte-length))))))))))
+ (define (write! bv)
+ (bytevector-u32-set! bv 4 map-pos endianness)
+ (let lp ((maps maps) (header-pos header-pos) (map-pos map-pos))
+ (match maps
+ (()
+ #t)
+ (((pos proc-slot . map) . maps)
+ (bytevector-u32-set! bv header-pos pos endianness)
+ (bytevector-u32-set! bv (+ header-pos 4) map-pos endianness)
+ (let write-bytes ((map-pos map-pos)
+ (map map)
+ (byte-length (map-byte-length proc-slot)))
+ (if (zero? byte-length)
+ (lp maps (+ header-pos frame-map-header-len) map-pos)
+ (begin
+ (bytevector-u8-set! bv map-pos (logand map #xff))
+ (write-bytes (1+ map-pos) (ash map -8)
+ (1- byte-length)))))))))
+
+ (write! bv)
+ (make-object asm '.guile.frame-maps
+ bv
+ (list (make-linker-reloc 'abs32/1 0 0 '.rtl-text))
+ '() #:type SHT_PROGBITS #:flags SHF_ALLOC)))
(match (asm-slot-maps asm)
(() #f)
(in
- [Guile-commits] branch wip-linker-assembler-memory-consumption created (now 2ac4e5a3d), Ludovic Courtès, 2023/01/07
- [Guile-commits] 02/09: assembler: Separate effectful part of 'link-symtab'., Ludovic Courtès, 2023/01/07
- [Guile-commits] 01/09: assembler: Separate 'process-relocs' from 'patch-relocs!'., Ludovic Courtès, 2023/01/07
- [Guile-commits] 03/09: assembler: Separate effectful part of 'link-dynamic-section'., Ludovic Courtès, 2023/01/07
- [Guile-commits] 04/09: assembler: Separate effectful part of 'link-procprops'., Ludovic Courtès, 2023/01/07
- [Guile-commits] 05/09: assembler: Separate effectful part of 'link-frame-maps'.,
Ludovic Courtès <=
- [Guile-commits] 07/09: linker: Separate effectful part of 'add-elf-objects'., Ludovic Courtès, 2023/01/07
- [Guile-commits] 06/09: assembler: Separate effectful part of 'link-docstrs'., Ludovic Courtès, 2023/01/07
- [Guile-commits] 08/09: DRAFT Add 'bytevector-slice'., Ludovic Courtès, 2023/01/07
- [Guile-commits] 09/09: linker, assembler: Avoid intermediate bytevectors., Ludovic Courtès, 2023/01/07