elf: add accessors for header members that might need relocation
authorAndy Wingo <wingo@pobox.com>
Sun, 28 Apr 2013 05:51:42 +0000 (07:51 +0200)
committerAndy Wingo <wingo@pobox.com>
Thu, 23 May 2013 09:02:14 +0000 (11:02 +0200)
* module/system/vm/elf.scm (elf-header-shoff-offset)
  (elf-section-header-addr-offset, elf-section-header-offset-offset):
  New accessors.

module/system/vm/elf.scm

index efa9782..b59970c 100644 (file)
@@ -47,7 +47,8 @@
             elf-entry elf-phoff elf-shoff elf-flags elf-ehsize
             elf-phentsize elf-phnum elf-shentsize elf-shnum elf-shstrndx
 
-            elf-header-len write-elf-header
+            elf-header-len elf-header-shoff-offset
+            write-elf-header
 
             (make-elf-segment* . make-elf-segment)
             elf-segment?
@@ -72,7 +73,9 @@
             elf-section-link elf-section-info elf-section-addralign
             elf-section-entsize
 
-            elf-section-header-len write-elf-section-header
+            elf-section-header-len elf-section-header-addr-offset
+            elf-section-header-offset-offset
+            write-elf-section-header
 
             make-elf-symbol elf-symbol?
             elf-symbol-name elf-symbol-value elf-symbol-size
     ((4) elf32-header-len)
     ((8) elf64-header-len)
     (else (error "invalid word size" word-size))))
+(define (elf-header-shoff-offset word-size)
+  (case word-size
+    ((4) 32)
+    ((8) 40)
+    (else (error "bad word size" word-size))))
 
 (define ELFCLASS32      1)              ; 32-bit objects
 (define ELFCLASS64      2)              ; 64-bit objects
     ((8) 64)
     (else (error "bad word size" word-size))))
 
+(define (elf-section-header-addr-offset word-size)
+  (case word-size
+    ((4) 12)
+    ((8) 16)
+    (else (error "bad word size" word-size))))
+
+(define (elf-section-header-offset-offset word-size)
+  (case word-size
+    ((4) 16)
+    ((8) 24)
+    (else (error "bad word size" word-size))))
+
 (define (parse-elf64-section-header index bv offset byte-order)
   (if (<= (+ offset 64) (bytevector-length bv))
       (make-elf-section index