stage0: Leverage label>base in stage0 gdb header.
[mes.git] / stage0 / elf32-header-exit-42.hex2
1 ### Copyright (C) 2016 Jeremiah Orians
2 ### Copyright (C) 2017 Jan 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 #d0 00 00 00                   # e_shoff Address of section header table
50
51 00 00 00 00                    # e_flags
52
53 34 00                          # e_ehsize Indicating our 52 Byte header
54
55 20 00                          # e_phentsize size of a program header table
56 02 00                          # e_phnum number of entries in program table
57
58 28 00                          # e_shentsize size of a section header table
59 07 00                          # e_shnum number of entries in section table
60
61 04 00                          # e_shstrndx index of the section names
62
63 # @34
64 00 00 00 00
65 00 00 00 00
66 00 00 00 00
67
68 # @40
69 :ELF_program_headers
70 :ELF_program_header__text
71 01 00 00 00                    # ph_type: PT-LOAD = 1
72 00 00 00 00                    # ph_offset
73 &ELF_base                      # ph_vaddr
74 &ELF_base                      # ph_physaddr
75 %ELF_end>ELF_base              # ph_filesz
76 %ELF_end>ELF_base              # ph_memsz
77 07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
78 01 00 00 00                    # ph_align
79
80 # @60
81 :ELF_program_header__data
82 01 00 00 00                     # ph_type: PT-LOAD = 1
83 00 00 00 00                     # ph_offset
84 &ELF_base                       # ph_vaddr
85 &ELF_base                       # ph_physaddr
86 %ELF_end>ELF_base               # ph_filesz
87 %ELF_end>ELF_base               # ph_memsz
88 07 00 00 00                     # ph_flags: PF-X|PF-W|PF-R = 7
89 01 00 00 00                     # ph_align
90
91 # @80
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 4d 45 53 00                     # MES
99 00 00 00 00                     # align
100 00 00 00 00
101 00 00 00 00
102
103 # @a0
104 :ELF_shstr
105 00
106 :ELF_shstr__text
107 2e 74 65 78 74 00               # .text
108 :ELF_shstr__data
109 2e 64 61 74 61 00               # .data
110 :ELF_shstr__comment
111 2e 63 6f 6d 6d 65 6e 74 00      # .comment
112 :ELF_shstr__shstr
113 2e 73 68 73 74 72 74 61 62 00   # .shstrtab
114 :ELF_shstr__sym
115 2e 73 79 6d 74 61 62 00         # .symtab
116 :ELF_shstr__str
117 2e 73 74 72 74 61 62 00         # .strtab
118
119 # @d0
120
121 :ELF_section_headers
122 00 00 00 00                     # sh_name
123 00 00 00 00                     # sh_type
124 00 00 00 00                     # sh_flags
125 00 00 00 00                     # sh_addr
126 00 00 00 00                     # sh_offset
127 00 00 00 00                     # sh_length
128 00 00 00 00                     # sh_link
129 00 00 00 00                     # sh_info
130 01 00 00 00                     # sh_1?
131 00 00 00 00                     # sh_entsize
132
133 ## FIXME: M0 for calculations?
134 :ELF_section_header_text
135 %ELF_shstr__text>ELF_shstr      # sh_name
136 01 00 00 00                     # sh_type = SHT_PROGBITS = 1
137 06 00 00 00                     # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
138 &ELF_text                       # sh_addr
139 %ELF_text>ELF_base              # sh_offset
140 %ELF_data>ELF_text              # sh_length
141 00 00 00 00                     # sh_link
142 00 00 00 00                     # sh_info
143 01 00 00 00                     # sh_1?
144 00 00 00 00                     # sh_entsize
145
146 :ELF_section_header_data
147 %ELF_shstr__data>ELF_shstr     # sh_name
148 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
149 03 00 00 00                    # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
150 &ELF_data                      # sh_addr
151 %ELF_data>ELF_base             # sh_offset
152 %ELF_sym>ELF_data              # sh_length
153 00 00 00 00                    # sh_link
154 00 00 00 00                    # sh_info
155 01 00 00 00                    # sh_1?
156 00 00 00 00                    # sh_entsize
157
158 :ELF_section_header_comment
159 %ELF_shstr__comment>ELF_shstr  # sh_name
160 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
161 00 00 00 00                    # sh_flags
162 &ELF_comment                   # sh_addr
163 %ELF_comment>ELF_base          # sh_offset
164 %ELF_shstr>ELF_comment         # sh_length
165 00 00 00 00                    # sh_link
166 00 00 00 00                    # sh_info
167 01 00 00 00                    # sh_1?
168 00 00 00 00                    # sh_entsize
169
170 :ELF_section_header_shstr
171 %ELF_shstr__shstr>ELF_shstr    # sh_name
172 03 00 00 00                    # sh_type: str-sht-strtab
173 00 00 00 00                    # sh_flags
174 &ELF_shstr                     # sh_addr
175 %ELF_shstr>ELF_base            # sh_offset
176 %ELF_section_headers>ELF_shstr # sh_length
177 00 00 00 00                    # sh_link
178 00 00 00 00                    # sh_info
179 01 00 00 00                    # sh_1?
180 00 00 00 00                    # sh_entsize
181
182 :ELF_section_header_sym
183 %ELF_shstr__sym>ELF_shstr      # sh_name
184 02 00 00 00                    # sh_type: str-sht-symtab
185 00 00 00 00                    # sh_flags
186 &ELF_sym                       # sh_addr
187 %ELF_sym>ELF_base              # sh_offset
188 %ELF_end>ELF_sym               # sh_length
189 06 00 00 00                    # sh_link:6
190 00 00 00 00                    # sh_info
191 01 00 00 00                    # sh_1?
192 10 00 00 00                    # sh_entsize
193
194 :ELF_section_header_str
195 %ELF_shstr__str>ELF_shstr      # sh_name
196 03 00 00 00                    # sh_type: str-sht-strtab
197 00 00 00 00                    # sh_flags
198 &ELF_str                       # sh_addr
199 %ELF_str>ELF_base              # sh_offset
200 %ELF_sym>ELF_str               # sh_length
201 00 00 00 00                    # sh_link
202 00 00 00 00                    # sh_info
203 01 00 00 00                    # sh_1?
204 00 00 00 00                    # sh_entsize
205
206 # @1e8
207 00 00 00 00  # align
208 00 00 00 00
209
210 # @1f0
211
212 00 00 00 00  # align
213 00 00 00 00
214 00 00 00 00
215 00 00 00 00
216
217 # @200