elf.mes: remove text-free, softcode data-offset.

This commit is contained in:
Jan Nieuwenhuizen 2016-08-13 19:19:52 +02:00
parent 30076e1b2b
commit 24291da28e
2 changed files with 28 additions and 41 deletions

View file

@ -135,5 +135,5 @@ hello: hello.o
# ld -A i386 -m elf_i386 -A i386 -o $@ $^ # ld -A i386 -m elf_i386 -A i386 -o $@ $^
a.out: elf.mes GNUmakefile a.out: elf.mes GNUmakefile
cat base0.mes base0-$(CONDIF).mes base.mes quasiquote.mes let.mes scm scm.mes lib/rnrs/bytevectors.scm elf.mes | ./mes > a.out cat base0.mes base0-$(CONDIF).mes base.mes quasiquote.mes let.mes scm.mes lib/rnrs/bytevectors.scm elf.mes | ./mes > a.out
chmod +x a.out chmod +x a.out

67
elf.mes
View file

@ -103,9 +103,6 @@
(define (text-offset) (define (text-offset)
(length (headers))) (length (headers)))
(define data-offset #x1076)
(define data-address (+ data-offset vaddress))
(define (i386:puts data) (define (i386:puts data)
`( `(
#xba #x0e #x00 #x00 #x00 ;; mov $0xe,%edx #xba #x0e #x00 #x00 #x00 ;; mov $0xe,%edx
@ -122,19 +119,25 @@
#xcd #x80 ;; int $0x80 #xcd #x80 ;; int $0x80
)) ))
(define text (define (text data)
(append (append
(i386:puts data-address) (i386:puts data)
(i386:exit 0) (i386:exit 0)
)) ))
(define text-free (define (text-length)
(vector->list (make-vector (- data-offset (length text) (text-offset)) #x00))) (length (text 0)))
(define program-length (define (data-offset)
(+ (length text) (length text-free))) (length
(set! p-filesz (int->bv32 program-length)) (append
(set! p-memsz (int->bv32 program-length)) (headers)
(text 0))))
(define (data-address) (+ (data-offset) vaddress))
(set! p-filesz (int->bv32 (text-length)))
(set! p-memsz (int->bv32 (text-length)))
;; 1076 ;; 1076
(define data (define data
@ -143,8 +146,10 @@
(define note (define note
(string->list (string->list
(string-append (string-append
"Mes -- Maxwell Equations of Software\n" "MES"
"https://gitlab.com/janneke/mes") ;;"Mes -- Maxwell Equations of Software\n"
;;"https://gitlab.com/janneke/mes"
)
;; #x05 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x02 #x00 #x00 #x00 ;; #x05 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x02 #x00 #x00 #x00
;; #\i #\3 #\8 #\6 #x00 #x00 #x00 #x00 ;; #\i #\3 #\8 #\6 #x00 #x00 #x00 #x00
)) ))
@ -190,15 +195,13 @@
(define sh-text-name '(#x0b #x00 #x00 #x00)) (define sh-text-name '(#x0b #x00 #x00 #x00))
(define sh-text-type '(#x01 #x00 #x00 #x00)) (define sh-text-type '(#x01 #x00 #x00 #x00))
(define sh-text-flags '(#x06 #x00 #x00 #x00)) (define sh-text-flags '(#x06 #x00 #x00 #x00))
;;(define sh-text-addr '(#x54 #x80 #x04 #x08))
(define sh-text-addr (int->bv32 (+ vaddress (text-offset)))) (define sh-text-addr (int->bv32 (+ vaddress (text-offset))))
(set! e-entry sh-text-addr) (set! e-entry sh-text-addr)
(set! p-vaddr sh-text-addr) (set! p-vaddr sh-text-addr)
(set! p-paddr sh-text-addr) (set! p-paddr sh-text-addr)
;;(define sh-text-offset '(#x54 #x00 #x00 #x00))
(define sh-text-offset (int->bv32 (text-offset))) (define sh-text-offset (int->bv32 (text-offset)))
(set! p-offset sh-text-offset) (set! p-offset sh-text-offset)
(define sh-text-size '(#x22 #x00 #x00 #x00)) (define sh-text-size (int->bv32 (length text)))
(define sh-text-link '(#x00 #x00 #x00 #x00)) (define sh-text-link '(#x00 #x00 #x00 #x00))
(define sh-text-info '(#x00 #x00 #x00 #x00)) (define sh-text-info '(#x00 #x00 #x00 #x00))
(define sh-text-addralign '(#x01 #x00 #x00 #x00)) (define sh-text-addralign '(#x01 #x00 #x00 #x00))
@ -222,11 +225,8 @@
(define sh-data-name '(#x11 #x00 #x00 #x00)) (define sh-data-name '(#x11 #x00 #x00 #x00))
(define sh-data-type '(#x01 #x00 #x00 #x00)) (define sh-data-type '(#x01 #x00 #x00 #x00))
(define sh-data-flags '(#x03 #x00 #x00 #x00)) (define sh-data-flags '(#x03 #x00 #x00 #x00))
;;(define sh-data-addr '(#x76 #x90 #x04 #x08)) (define sh-data-addr (int->bv32 (data-address)))
(define sh-data-addr (int->bv32 data-address)) (define sh-data-offset (int->bv32 (data-offset)))
;;(define sh-data-offset '(#x76 #x10 #x00 #x00))
(define sh-data-offset (int->bv32 data-offset))
;;(define sh-data-size '(#x0e #x00 #x00 #x00))
(define sh-data-size (int->bv32 (length data))) (define sh-data-size (int->bv32 (length data)))
(define sh-data-link '(#x00 #x00 #x00 #x00)) (define sh-data-link '(#x00 #x00 #x00 #x00))
(define sh-data-info '(#x00 #x00 #x00 #x00)) (define sh-data-info '(#x00 #x00 #x00 #x00))
@ -252,11 +252,8 @@
(define sh-note-type '(#x07 #x00 #x00 #x00)) (define sh-note-type '(#x07 #x00 #x00 #x00))
(define sh-note-flags '(#x00 #x00 #x00 #x00)) (define sh-note-flags '(#x00 #x00 #x00 #x00))
(define sh-note-addr '(#x00 #x00 #x00 #x00)) (define sh-note-addr '(#x00 #x00 #x00 #x00))
;;(define sh-note-offset '(#x84 #x10 #x00 #x00))
(define sh-note-offset '(0 0 0 0)) (define sh-note-offset '(0 0 0 0))
(define (note-offset) 0) (define sh-note-size (int->bv32 (length note)))
;;(define sh-note-offset (int->bv32 (note-offset)))
(define sh-note-size '(#x14 #x00 #x00 #x00))
(define sh-note-link '(#x00 #x00 #x00 #x00)) (define sh-note-link '(#x00 #x00 #x00 #x00))
(define sh-note-info '(#x00 #x00 #x00 #x00)) (define sh-note-info '(#x00 #x00 #x00 #x00))
(define sh-note-addralign '(#x01 #x00 #x00 #x00)) (define sh-note-addralign '(#x01 #x00 #x00 #x00))
@ -281,10 +278,8 @@
(define sh-tab-type '(#x03 #x00 #x00 #x00)) (define sh-tab-type '(#x03 #x00 #x00 #x00))
(define sh-tab-flags '(#x00 #x00 #x00 #x00)) (define sh-tab-flags '(#x00 #x00 #x00 #x00))
(define sh-tab-addr '(#x00 #x00 #x00 #x00)) (define sh-tab-addr '(#x00 #x00 #x00 #x00))
;;(define sh-tab-offset '(#x98 #x10 #x00 #x00))
(define sh-tab-offset '(0 0 0 0)) (define sh-tab-offset '(0 0 0 0))
;;(define sh-tab-offset (int->bv32 (tab-offset))) (define sh-tab-size (int->bv32 (length tab)))
(define sh-tab-size '(#x1d #x00 #x00 #x00))
(define sh-tab-link '(#x00 #x00 #x00 #x00)) (define sh-tab-link '(#x00 #x00 #x00 #x00))
(define sh-tab-info '(#x00 #x00 #x00 #x00)) (define sh-tab-info '(#x00 #x00 #x00 #x00))
(define sh-tab-addralign '(#x01 #x00 #x00 #x00)) (define sh-tab-addralign '(#x01 #x00 #x00 #x00))
@ -317,8 +312,7 @@
(length (length
(append (append
(headers) (headers)
text (text 0)
text-free
data data
))) )))
@ -328,8 +322,7 @@
(length (length
(append (append
(headers) (headers)
text (text 0)
text-free
data data
note note
))) )))
@ -340,8 +333,7 @@
(length (length
(append (append
(headers) (headers)
text (text 0)
text-free
data data
note note
tab))) tab)))
@ -351,15 +343,10 @@
(define exe (define exe
(append (append
(headers) (headers)
text (text (data-address))
text-free
;;1076 (+ 0804 8000): 0804 9076
data data
;;1084
note note
;;1098
tab tab
;;10b8
(section-headers) (section-headers)
)) ))
(map write-char exe) (map write-char exe)