elf.mes: error-free header, no program yet.
[mes.git] / elf.mes
1 ;;; -*-scheme-*-
2
3 (define ei-magic '(#x7f #\E #\L #\F))
4 ;;(define ei-magic '(#x7f #x45 #x4c #x46))
5 (define ei-class '(#x01)) ;; 32 bit
6 (define ei-data '(#x01)) ;; little endian
7 (define ei-version '(#x01))
8 (define ei-osabi '(#x00))
9 (define ei-pad '(#x0 #x0 #x0 #x0 #x0 #x0 #x0 #x0))
10 (define e-ident
11   (append
12    ei-magic
13    ei-class
14    ei-data
15    ei-version
16    ei-osabi
17    ei-pad))
18
19 (define e-type '(#x02 #x00)) ;; ET_EXEC
20 (define e-machine '(#x03 #x00))
21 (define e-version '(#x01 #x00 #x00 #x00))
22 (define e-entry '(#x54 #x80 #x04 #x08))
23 (define e-phoff '(#x30 #x00 #x00 #x00))
24 (define e-shoff '(#x50 #x00 #x00 #x00))
25 (define e-flags '(#x00 #x00 #x00 #x00))
26 (define e-ehsize '(#x80 #x00))
27 (define e-phentsize '(#x20 #x00))
28 (define e-phnum '(#x01 #x00))
29 (define e-shentsize '(#x28 #x00))
30 (define e-shnum '(#x05 #x00))
31 (define e-shstrndx '(#x04 #x00))
32
33 (define elf-header
34   (append
35    e-ident
36    e-type
37    e-machine
38    e-version
39    e-entry
40    e-phoff
41    e-shoff
42    e-flags
43    e-ehsize
44    e-phentsize
45    e-phnum
46    e-shentsize
47    e-shnum
48    e-shstrndx
49    ))
50
51 ;;(define elf-header '(#x7f #x45 #x4c #x46 #x01))
52 (define program-header
53   (append
54    ;; p-offset
55    ;; p-type
56    ;; p-offset
57    ;; p-vaddr
58    ;; p-paddr
59    ;; p-filesz
60    ;; p-memsz
61    ;; p-flags
62    ;; p-align
63    ))
64
65 (define rest
66   '(
67     #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
68          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
69          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
70          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
71
72          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
73          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
74          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
75          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
76
77          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
78          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
79          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
80          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
81
82          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
83          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
84          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
85          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
86
87          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
88          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
89          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
90          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
91
92          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
93          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
94          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
95          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
96
97          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
98          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
99          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
100          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
101
102          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
103          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
104          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
105          #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
106
107 ))
108
109 (define exe
110   (append
111    elf-header
112    rest))
113 (map write-char exe)