diff options
author | Andy Wingo <wingo@pobox.com> | 2013-04-21 16:06:36 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-05-23 11:02:02 +0200 |
commit | 6756d265ed53d7b107d31746e8455f10e2ecebdd (patch) | |
tree | 098cc14e9ff6f481e3d0ccad6a929faa310bbc8e /test-suite/tests/linker.test | |
parent | 45037e75277b622334f347ef261ea347eec6e28d (diff) | |
download | guile-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.test | 7 |
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))) |