diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-01-06 11:19:48 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-01-17 17:49:05 +0100 |
commit | fc5eae5d01b19cbfb4903e032f4172c888e0e52a (patch) | |
tree | 8ff37dda5c33f1681d10de0b806a3507e9b4dcbe | |
parent | 15c4c4ceb312f7a49273823478904581c0c86c6b (diff) | |
download | guile-fc5eae5d01b19cbfb4903e032f4172c888e0e52a.tar.gz |
assembler: Separate effectful part of 'link-symtab'.
* module/system/vm/assembler.scm (link-symtab): Define 'names' and
'write-symbols!'. Use it.
-rw-r--r-- | module/system/vm/assembler.scm | 37 |
1 files 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) '() '() |