guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 03/12: assembler: Separate effectful part of 'link-symta


From: Ludovic Courtès
Subject: [Guile-commits] 03/12: assembler: Separate effectful part of 'link-symtab'.
Date: Tue, 17 Jan 2023 11:49:49 -0500 (EST)

civodul pushed a commit to branch main
in repository guile.

commit fc5eae5d01b19cbfb4903e032f4172c888e0e52a
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Fri Jan 6 11:19:48 2023 +0100

    assembler: Separate effectful part of 'link-symtab'.
    
    * module/system/vm/assembler.scm (link-symtab): Define 'names' and
    'write-symbols!'.  Use it.
---
 module/system/vm/assembler.scm | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 188f6f236..af16d268d 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -2369,21 +2369,28 @@ procedure with label @var{rw-init}.  @var{rw-init} may 
be false.  If
          (bv (make-bytevector (* n size) 0)))
     (define (intern-string! name)
       (string-table-intern! strtab (if name (symbol->string name) "")))
-    (for-each
-     (lambda (meta n)
-       (let ((name (intern-string! (meta-name meta))))
-         (write-elf-symbol bv (* n size) endianness word-size
-                           (make-elf-symbol
-                            #:name name
-                            ;; Symbol value and size are measured in
-                            ;; bytes, not u32s.
-                            #:value (meta-low-pc meta)
-                            #:size (- (meta-high-pc meta)
-                                      (meta-low-pc meta))
-                            #:type STT_FUNC
-                            #:visibility STV_HIDDEN
-                            #:shndx (elf-section-index text-section)))))
-     meta (iota n))
+    (define names
+      (map (lambda (meta n)
+             (intern-string! (meta-name meta)))
+           meta (iota n)))
+    (define (write-symbols! bv offset)
+      (for-each (lambda (name meta n)
+                  (write-elf-symbol bv (+ offset (* n size))
+                                    endianness word-size
+                                    (make-elf-symbol
+                                     #:name name
+                                     ;; Symbol value and size are measured in
+                                     ;; bytes, not u32s.
+                                     #:value (meta-low-pc meta)
+                                     #:size (- (meta-high-pc meta)
+                                               (meta-low-pc meta))
+                                     #:type STT_FUNC
+                                     #:visibility STV_HIDDEN
+                                     #:shndx (elf-section-index
+                                              text-section))))
+                names meta (iota n)))
+
+    (write-symbols! bv 0)
     (let ((strtab (make-object asm '.strtab
                                (link-string-table! strtab)
                                '() '()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]