core: Remove pmatch-car, pmatch-cdr hack.
[mes.git] / stage0 / elf32-header.hex2
1 ### Copyright (C) 2016 Jeremiah Orians
2 ### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
3 ### This file is part of stage0.
4 ###
5 ### stage0 is free software: you an redistribute it and/or modify
6 ### it under the terms of the GNU General Public License as published by
7 ### the Free Software Foundation, either version 3 of the License, or
8 ### (at your option) any later version.
9 ###
10 ### stage0 is distributed in the hope that it will be useful,
11 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 ### GNU General Public License for more details.
14 ###
15 ### You should have received a copy of the GNU General Public License
16 ### along with stage0.  If not, see <http://www.gnu.org/licenses/>.
17
18 ### stage0's hex2 format for x86
19 ###    !<label>          1 byte relative
20 ###    $<label>          2 byte address
21 ###    @<label>          2 byte relative
22 ###    &<label>          4 byte address
23 ###    %<label>          4 byte relative
24 ###    local_<label>     function-local
25 ###    string_<index>    string #<index>
26
27 ### elf32-header-exit-42.hex2: 32 bit elf header in hex2 for `exit 42'
28
29 :ELF_base
30 7F 45 4C 46                    # e_ident[EI_MAG0-3] ELF's magic number
31
32 01                             # e_ident[EI_CLASS] Indicating 32 bit
33 01                             # e_ident[EI_DATA] Indicating little endianness
34 01                             # e_ident[EI_VERSION] Indicating original elf
35
36 00                             # e_ident[EI_OSABI] Set at 0 because none cares
37 00                             # e_ident[EI_ABIVERSION] See above
38
39 00 00 00 00 00 00 00           # e_ident[EI_PAD]
40
41 02 00                          # e_type Indicating Executable
42 03 00                          # e_machine Indicating AMD64
43 01 00 00 00                    # e_version Indicating original elf
44
45 &ELF_text                      # e_entry Address of the entry point
46 %ELF_program_headers>ELF_base  # e_phoff Address of program header table
47 %ELF_section_headers>ELF_base  # e_shoff Address of section header table
48
49 00 00 00 00                    # e_flags
50
51 34 00                          # e_ehsize Indicating our 52 Byte header
52
53 20 00                          # e_phentsize size of a program header table
54 02 00                          # e_phnum number of entries in program table
55
56 28 00                          # e_shentsize size of a section header table
57 07 00                          # e_shnum number of entries in section table
58
59 04 00                          # e_shstrndx index of the section names
60
61 # @34
62 00 00 00 00
63 00 00 00 00
64 00 00 00 00
65
66 # @40
67 :ELF_program_headers
68 :ELF_program_header__text
69 01 00 00 00                    # ph_type: PT-LOAD = 1
70 00 00 00 00                    # ph_offset
71 &ELF_base                      # ph_vaddr
72 &ELF_base                      # ph_physaddr
73 %ELF_end>ELF_base              # ph_filesz
74 %ELF_end>ELF_base              # ph_memsz
75 07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
76 01 00 00 00                    # ph_align
77
78 # @60
79 :ELF_program_header__data
80 01 00 00 00                     # ph_type: PT-LOAD = 1
81 00 00 00 00                     # ph_offset
82 &ELF_base                       # ph_vaddr
83 &ELF_base                       # ph_physaddr
84 %ELF_end>ELF_base               # ph_filesz
85 %ELF_end>ELF_base               # ph_memsz
86 07 00 00 00                     # ph_flags: PF-X|PF-W|PF-R = 7
87 01 00 00 00                     # ph_align
88
89 # @80
90 :ELF_comment
91 4d 45 53 00                     # MES
92 00 00 00 00                     # align
93 00 00 00 00
94 00 00 00 00
95
96 4d 45 53 00                     # MES
97 00 00 00 00                     # align
98 00 00 00 00
99 00 00 00 00
100
101 # @a0
102 :ELF_shstr
103 00
104 :ELF_shstr__text
105 2e 74 65 78 74 00               # .text
106 :ELF_shstr__data
107 2e 64 61 74 61 00               # .data
108 :ELF_shstr__comment
109 2e 63 6f 6d 6d 65 6e 74 00      # .comment
110 :ELF_shstr__shstr
111 2e 73 68 73 74 72 74 61 62 00   # .shstrtab
112 :ELF_shstr__sym
113 2e 73 79 6d 74 61 62 00         # .symtab
114 :ELF_shstr__str
115 2e 73 74 72 74 61 62 00         # .strtab
116
117 # @d0
118
119 :ELF_section_headers
120 00 00 00 00                     # sh_name
121 00 00 00 00                     # sh_type
122 00 00 00 00                     # sh_flags
123 00 00 00 00                     # sh_addr
124 00 00 00 00                     # sh_offset
125 00 00 00 00                     # sh_length
126 00 00 00 00                     # sh_link
127 00 00 00 00                     # sh_info
128 01 00 00 00                     # sh_1?
129 00 00 00 00                     # sh_entsize
130
131 ## FIXME: M0 for calculations?
132 :ELF_section_header_text
133 %ELF_shstr__text>ELF_shstr      # sh_name
134 01 00 00 00                     # sh_type = SHT_PROGBITS = 1
135 06 00 00 00                     # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
136 &ELF_text                       # sh_addr
137 %ELF_text>ELF_base              # sh_offset
138 %ELF_data>ELF_text              # sh_length
139 00 00 00 00                     # sh_link
140 00 00 00 00                     # sh_info
141 01 00 00 00                     # sh_1?
142 00 00 00 00                     # sh_entsize
143
144 :ELF_section_header_data
145 %ELF_shstr__data>ELF_shstr     # sh_name
146 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
147 03 00 00 00                    # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
148 &ELF_data                      # sh_addr
149 %ELF_data>ELF_base             # sh_offset
150 %ELF_sym>ELF_data              # sh_length
151 00 00 00 00                    # sh_link
152 00 00 00 00                    # sh_info
153 01 00 00 00                    # sh_1?
154 00 00 00 00                    # sh_entsize
155
156 :ELF_section_header_comment
157 %ELF_shstr__comment>ELF_shstr  # sh_name
158 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
159 00 00 00 00                    # sh_flags
160 &ELF_comment                   # sh_addr
161 %ELF_comment>ELF_base          # sh_offset
162 %ELF_shstr>ELF_comment         # sh_length
163 00 00 00 00                    # sh_link
164 00 00 00 00                    # sh_info
165 01 00 00 00                    # sh_1?
166 00 00 00 00                    # sh_entsize
167
168 :ELF_section_header_shstr
169 %ELF_shstr__shstr>ELF_shstr    # sh_name
170 03 00 00 00                    # sh_type: str-sht-strtab
171 00 00 00 00                    # sh_flags
172 &ELF_shstr                     # sh_addr
173 %ELF_shstr>ELF_base            # sh_offset
174 %ELF_section_headers>ELF_shstr # sh_length
175 00 00 00 00                    # sh_link
176 00 00 00 00                    # sh_info
177 01 00 00 00                    # sh_1?
178 00 00 00 00                    # sh_entsize
179
180 :ELF_section_header_sym
181 %ELF_shstr__sym>ELF_shstr      # sh_name
182 02 00 00 00                    # sh_type: str-sht-symtab
183 00 00 00 00                    # sh_flags
184 &ELF_sym                       # sh_addr
185 %ELF_sym>ELF_base              # sh_offset
186 %ELF_end>ELF_sym               # sh_length
187 06 00 00 00                    # sh_link:6
188 00 00 00 00                    # sh_info
189 01 00 00 00                    # sh_1?
190 10 00 00 00                    # sh_entsize
191
192 :ELF_section_header_str
193 %ELF_shstr__str>ELF_shstr      # sh_name
194 03 00 00 00                    # sh_type: str-sht-strtab
195 00 00 00 00                    # sh_flags
196 &ELF_str                       # sh_addr
197 %ELF_str>ELF_base              # sh_offset
198 %ELF_sym>ELF_str               # sh_length
199 00 00 00 00                    # sh_link
200 00 00 00 00                    # sh_info
201 01 00 00 00                    # sh_1?
202 00 00 00 00                    # sh_entsize
203
204 # @1e8
205 00 00 00 00  # align
206 00 00 00 00
207
208 # @1f0
209
210 00 00 00 00  # align
211 00 00 00 00
212 00 00 00 00
213 00 00 00 00
214
215 # @200
216 :ELF_text