summaryrefslogtreecommitdiff
path: root/test-suite/tests/linker.test
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2013-04-21 16:06:36 +0200
committerAndy Wingo <wingo@pobox.com>2013-05-23 11:02:02 +0200
commit6756d265ed53d7b107d31746e8455f10e2ecebdd (patch)
tree098cc14e9ff6f481e3d0ccad6a929faa310bbc8e /test-suite/tests/linker.test
parent45037e75277b622334f347ef261ea347eec6e28d (diff)
downloadguile-6756d265ed53d7b107d31746e8455f10e2ecebdd.tar.gz
ELF refactor and consequent linker simplifications
* module/system/vm/elf.scm: Add commentary. (make-elf): Add a constructor similar to make-elf-segment and make-elf-section. (write-elf32-header, write-elf64-header, write-elf-header): Take an <elf> instead of all the fields separately. (<elf-segment>, <elf-section>): Add "index" property. Adapt constructors accordingly. * module/language/objcode/elf.scm (bytecode->elf): Arrange to set the section indexes when creating ELF sections. * module/system/vm/linker.scm (fold-values): New helper. (alloc-segment, relocate-section-header): Arrange to set segment and section indexes. (find-shstrndx): New helper, replaces compute-sections-by-name. Now that sections know their indexes, this is easier. (allocate-elf, write-elf): New helpers, factored out of link-elf. Easier now that sections have indexes. (link-elf): Simplify. Check that the incoming objects have sensible numbers. * test-suite/tests/linker.test: Update to set #:index on the linker objects.
Diffstat (limited to 'test-suite/tests/linker.test')
-rw-r--r--test-suite/tests/linker.test7
1 files changed, 4 insertions, 3 deletions
diff --git a/test-suite/tests/linker.test b/test-suite/tests/linker.test
index 7ea263199..97f791210 100644
--- a/test-suite/tests/linker.test
+++ b/test-suite/tests/linker.test
@@ -31,9 +31,10 @@
(lambda (table idx)
(set! string-table table)
idx)))
- (define (make-object name bv relocs . kwargs)
+ (define (make-object index name bv relocs . kwargs)
(let ((name-idx (intern-string! (symbol->string name))))
(make-linker-object (apply make-elf-section
+ #:index index
#:name name-idx
#:size (bytevector-length bv)
kwargs)
@@ -41,11 +42,11 @@
(list (make-linker-symbol name 0)))))
(define (make-string-table)
(intern-string! ".shstrtab")
- (make-object '.shstrtab (link-string-table string-table) '()
+ (make-object 2 '.shstrtab (link-string-table string-table) '()
#:type SHT_STRTAB #:flags 0))
(let* ((word-size (target-word-size))
(endianness (target-endianness))
- (sec (make-object name bytes '()))
+ (sec (make-object 1 name bytes '()))
;; This needs to be linked last, because linking other
;; sections adds entries to the string table.
(shstrtab (make-string-table)))