[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 06/12: assembler: Separate effectful part of 'link-frame
From: |
Ludovic Courtès |
Subject: |
[Guile-commits] 06/12: assembler: Separate effectful part of 'link-frame-maps'. |
Date: |
Tue, 17 Jan 2023 11:49:51 -0500 (EST) |
civodul pushed a commit to branch main
in repository guile.
commit 13e2d5b66b94d8a9f70937a2889e27d6f4196723
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 main updated (e903b7679 -> 9a004606e), Ludovic Courtès, 2023/01/17
- [Guile-commits] 07/12: assembler: Separate effectful part of 'link-docstrs'., Ludovic Courtès, 2023/01/17
- [Guile-commits] 10/12: linker: Linker object writer takes a single argument., Ludovic Courtès, 2023/01/17
- [Guile-commits] 04/12: assembler: Separate effectful part of 'link-dynamic-section'., Ludovic Courtès, 2023/01/17
- [Guile-commits] 05/12: assembler: Separate effectful part of 'link-procprops'., Ludovic Courtès, 2023/01/17
- [Guile-commits] 08/12: linker: Separate effectful part of 'add-elf-objects'., Ludovic Courtès, 2023/01/17
- [Guile-commits] 09/12: linker, assembler: Avoid intermediate bytevectors., Ludovic Courtès, 2023/01/17
- [Guile-commits] 06/12: assembler: Separate effectful part of 'link-frame-maps'.,
Ludovic Courtès <=
- [Guile-commits] 03/12: assembler: Separate effectful part of 'link-symtab'., Ludovic Courtès, 2023/01/17
- [Guile-commits] 01/12: Add test for 'string-ref' with a negative index at -O2., Ludovic Courtès, 2023/01/17
- [Guile-commits] 02/12: assembler: Separate 'process-relocs' from 'patch-relocs!'., Ludovic Courtès, 2023/01/17
- [Guile-commits] 12/12: Update NEWS., Ludovic Courtès, 2023/01/17
- [Guile-commits] 11/12: linker: Do not store entire ELF in memory when writing to a file., Ludovic Courtès, 2023/01/17