mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-20 02:30:23 +02:00
Assembler works on byte offsets, not u32 offsets
* module/system/vm/assembler.scm (u32-ref, u32-set!, s32-ref, s32-set!): Remove these helpers. * module/system/vm/assembler.scm (<asm>): Track offsets in bytes, not u32 units. (emit, assembler, process-relocs, process-labels, link-text-object) (link-frame-maps, link-symtab, write-arities, link-docstrs) (link-procprops, link-debug): Adapt. * module/system/vm/linker.scm (process-reloc): Add addend before dividing by 4 for rel32/4 symbols.
This commit is contained in:
parent
3c271457f1
commit
9e1c07bda6
2 changed files with 48 additions and 56 deletions
|
@ -394,12 +394,10 @@ symbol, as present in @var{symtab}."
|
|||
(target (linker-symbol-address symbol)))
|
||||
(case (linker-reloc-type reloc)
|
||||
((rel32/4)
|
||||
(let ((diff (- target offset)))
|
||||
(let ((diff (+ (- target offset) (linker-reloc-addend reloc))))
|
||||
(unless (zero? (modulo diff 4))
|
||||
(error "Bad offset" reloc symbol offset))
|
||||
(bytevector-s32-set! bv offset
|
||||
(+ (/ diff 4) (linker-reloc-addend reloc))
|
||||
endianness)))
|
||||
(bytevector-s32-set! bv offset (/ diff 4) endianness)))
|
||||
((rel32/1)
|
||||
(let ((diff (- target offset)))
|
||||
(bytevector-s32-set! bv offset
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue