Fix typo in stage0 copyright headers.
[mes.git] / lib / x86_64-mes / elf64-header.hex2
1 ### Copyright (C) 2016 Jeremiah Orians
2 ### Copyright (C) 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
3 ### This file is part of stage0.
4 ###
5 ### stage0 is free software: you can 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_64
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 :ELF_base
28 7F 45 4c 46                    # e_ident[EI_MAG0-3] ELF's magic number
29
30 02                             # e_ident[EI_CLASS] Indicating 64 bit
31 01                             # e_ident[EI_DATA] Indicating little endianness
32 01                             # e_ident[EI_VERSION] Indicating original elf
33
34 00                             # e_ident[EI_OSABI] Set at 0 because none cares
35 00                             # e_ident[EI_ABIVERSION] See above
36
37 00 00 00 00 00 00 00           # e_ident[EI_PAD]
38
39 # 0x10
40 02 00                          # e_type Indicating Executable
41 3e 00                          # e_machine Indicating AMD64
42 01 00 00 00                    # e_version Indicating original elf
43
44 # 0x18
45 &ELF_text 00 00 00 00          # e_entry Address of the entry point
46 %ELF_program_headers>ELF_base  # e_phoff Address of program header table
47   00 00 00 00
48
49 %ELF_section_headers>ELF_base  # e_shoff Address of section header table
50   00 00 00 00
51
52 00 00 00 00                    # e_flags
53
54 40 00                          # e_ehsize Indicating our 64 Byte header
55
56 38 00                          # e_phentsize size of a program header table
57 01 00                          # e_phnum number of entries in program table
58
59 40 00                          # e_shentsize size of a section header table
60 07 00                          # e_shnum number of entries in section table
61
62 04 00                          # e_shstrndx index of the section names
63
64 # @40
65 :ELF_program_headers
66 :ELF_program_header__text
67 01 00 00 00                    # ph_type: PT-LOAD = 1
68 07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
69 00 00 00 00 00 00 00 00        # p_offset
70 &ELF_base 00 00 00 00          # ph_vaddr
71 &ELF_base 00 00 00 00          # ph_physaddr
72 %ELF_end>ELF_base 00 00 00 00  # ph_filesz
73 %ELF_end>ELF_base 00 00 00 00  # ph_memsz
74 01 00 00 00 00 00 00 00        # ph_align
75
76
77 # @60
78 #:ELF_program_header__data     # NOT USED
79                                # FIXME: linux 4.17 does not allow this overlap
80                                #    Uhuuh, elf segment at 0000000001000000
81                                #    requested but the memory is mapped already
82 01 00 00 00                    # ph_type: PT-LOAD = 1
83 07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
84 00 00 00 00 00 00 00 00        # ph_offset
85 &ELF_base 00 00 00 00          # ph_vaddr
86 &ELF_base 00 00 00 00          # ph_physaddr
87 %ELF_end>ELF_base 00 00 00 00  # ph_filesz
88 %ELF_end>ELF_base 00 00 00 00  # ph_memsz
89 01 00 00 00 00 00 00 00        # ph_align
90
91 # @b0
92 :ELF_comment
93 4d 45 53 00                     # MES
94 00 00 00 00                     # align
95 00 00 00 00
96 00 00 00 00
97
98 # @c0
99 4d 45 53 00                     # MES
100 00 00 00 00                     # align
101 00 00 00 00
102 00 00 00 00
103
104 # @d0
105 :ELF_shstr
106 00
107 :ELF_shstr__text
108 2e 74 65 78 74 00               # .text
109 :ELF_shstr__data
110 2e 64 61 74 61 00               # .data
111 :ELF_shstr__comment
112 2e 63 6f 6d 6d 65 6e 74 00      # .comment
113 :ELF_shstr__shstr
114 2e 73 68 73 74 72 74 61 62 00   # .shstrtab
115 :ELF_shstr__sym
116 2e 73 79 6d 74 61 62 00         # .symtab
117 :ELF_shstr__str
118 2e 73 74 72 74 61 62 00         # .strtab
119
120 # @100
121
122 :ELF_section_headers
123 00 00 00 00                     # sh_name
124 00 00 00 00                     # sh_type
125 00 00 00 00 00 00 00 00         # sh_flags
126 00 00 00 00 00 00 00 00         # sh_addr
127 00 00 00 00 00 00 00 00         # sh_offset
128 00 00 00 00 00 00 00 00         # sh_length
129 00 00 00 00                     # sh_link
130 00 00 00 00                     # sh_info
131 00 00 00 00 00 00 00 00         # sh_1?
132 00 00 00 00 00 00 00 00         # sh_entsize
133
134 ## FIXME: M0 for calculations?
135 :ELF_section_header_text
136 %ELF_shstr__text>ELF_shstr      # sh_name
137 01 00 00 00                     # sh_type = SHT_PROGBITS = 1
138 06 00 00 00 00 00 00 00         # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
139 &ELF_text 00 00 00 00           # sh_addr
140 %ELF_text>ELF_base 00 00 00 00  # sh_offset
141 %ELF_data>ELF_text 00 00 00 00  # sh_length
142 00 00 00 00                     # sh_link
143 00 00 00 00                     # sh_info
144 01 00 00 00 00 00 00 00         # sh_1?
145 00 00 00 00 00 00 00 00         # sh_entsize
146
147 :ELF_section_header_data
148 %ELF_shstr__data>ELF_shstr     # sh_name
149 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
150 03 00 00 00 00 00 00 00        # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
151 &ELF_data 00 00 00 00          # sh_addr
152 %ELF_data>ELF_base 00 00 00 00 # sh_offset
153 %ELF_sym>ELF_data 00 00 00 00  # sh_length
154 00 00 00 00                    # sh_link
155 00 00 00 00                    # sh_info
156 01 00 00 00 00 00 00 00        # sh_1?
157 00 00 00 00 00 00 00 00        # sh_entsize
158
159 :ELF_section_header_comment
160 %ELF_shstr__comment>ELF_shstr  # sh_name
161 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
162 00 00 00 00 00 00 00 00        # sh_flags
163 &ELF_comment 00 00 00 00       # sh_addr
164 %ELF_comment>ELF_base 00 00 00 00 # sh_offset
165 %ELF_shstr>ELF_comment 00 00 00 00 # sh_length
166 00 00 00 00                    # sh_link
167 00 00 00 00                    # sh_info
168 01 00 00 00 00 00 00 00        # sh_1?
169 00 00 00 00 00 00 00 00        # sh_entsize
170
171 :ELF_section_header_shstr
172 %ELF_shstr__shstr>ELF_shstr    # sh_name
173 03 00 00 00                    # sh_type: str-sht-strtab
174 00 00 00 00 00 00 00 00        # sh_flags
175 &ELF_shstr 00 00 00 00         # sh_addr
176 %ELF_shstr>ELF_base 00 00 00 00 # sh_offset
177 %ELF_section_headers>ELF_shstr 00 00 00 00 # sh_length
178 00 00 00 00                    # sh_link
179 00 00 00 00                    # sh_info
180 01 00 00 00 00 00 00 00        # sh_1?
181 00 00 00 00 00 00 00 00        # sh_entsize
182
183 :ELF_section_header_sym
184 %ELF_shstr__sym>ELF_shstr      # sh_name
185 02 00 00 00                    # sh_type: str-sht-symtab
186 00 00 00 00 00 00 00 00        # sh_flags
187 &ELF_sym 00 00 00 00           # sh_addr
188 %ELF_sym>ELF_base 00 00 00 00  # sh_offset
189 %ELF_end>ELF_sym 00 00 00 00   # sh_length
190 06 00 00 00                    # sh_link:6
191 00 00 00 00                    # sh_info
192 01 00 00 00 00 00 00 00        # sh_1?
193 18 00 00 00 00 00 00 00        # sh_entsize
194
195 :ELF_section_header_str
196 %ELF_shstr__str>ELF_shstr      # sh_name
197 03 00 00 00                    # sh_type: str-sht-strtab
198 00 00 00 00 00 00 00 00        # sh_flags
199 &ELF_str 00 00 00 00           # sh_addr
200 %ELF_str>ELF_base 00 00 00 00  # sh_offset
201 %ELF_sym>ELF_str 00 00 00 00   # sh_length
202 00 00 00 00                    # sh_link
203 00 00 00 00                    # sh_info
204 01 00 00 00 00 00 00 00        # sh_1?
205 00 00 00 00 00 00 00 00        # sh_entsize
206
207 # @2c0
208 00 00 00 00  # align
209 00 00 00 00
210 00 00 00 00
211 00 00 00 00
212
213 # @2d0
214 00 00 00 00  # align
215 00 00 00 00
216 00 00 00 00
217 00 00 00 00
218
219 # @2e0
220 00 00 00 00  # align
221 00 00 00 00
222 00 00 00 00
223 00 00 00 00
224
225 # @2f0
226 00 00 00 00  # align
227 00 00 00 00
228 00 00 00 00
229 00 00 00 00
230
231 # @300
232 :ELF_text