1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-23 13:00:34 +02:00

assembler: Separate effectful part of 'link-symtab'.

* module/system/vm/assembler.scm (link-symtab): Define 'names' and
'write-symbols!'.  Use it.
This commit is contained in:
Ludovic Courtès 2023-01-06 11:19:48 +01:00
parent 15c4c4ceb3
commit fc5eae5d01

View file

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