elf_types.m4 revision 164190
1/*- 2 * Copyright (c) 2006 Joseph Koshy 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD: head/lib/libelf/elf_types.m4 164190 2006-11-11 17:16:35Z jkoshy $ 27 */ 28 29/* 30 * ELF types, defined in the "enum Elf_Type" API. 31 */ 32 33define(`ELF_TYPE_LIST', 34 ``ADDR, Addr', 35 `BYTE, Byte', 36 `CAP, Cap', 37 `DYN, Dyn', 38 `EHDR, Ehdr', 39 `HALF, Half', 40 `LWORD, Lword', 41 `MOVE, Move', 42 `MOVEP, MoveP', 43 `NOTE, Note', 44 `OFF, Off', 45 `PHDR, Phdr', 46 `REL, Rel', 47 `RELA, Rela', 48 `SHDR, Shdr', 49 `SWORD, Sword', 50 `SXWORD, Sxword', 51 `SYMINFO, Syminfo', 52 `SYM, Sym', 53 `VDEF, Verdef', 54 `VNEED, Verneed', 55 `WORD, Word', 56 `XWORD, Xword', 57 `NUM, _'') 58 59/* 60 * DEFINE_STRUCT(NAME,MEMBERLIST...) 61 * 62 * Map a type name to its members. 63 * 64 * Each member-list element comprises of pairs of (field name, type), 65 * in the sequence used in the file representation of `NAME'. 66 * 67 * Each member list element comprises a pair containing a field name 68 * and a basic type. Basic types include IDENT, HALF, WORD, LWORD, 69 * ADDR{32,64}, OFF{32,64}, SWORD, XWORD, SXWORD. 70 * 71 * The last element of a member list is the null element: `_,_'. 72 */ 73 74define(`DEFINE_STRUCT',`define(`$1_DEF',shift($@))dnl') 75 76DEFINE_STRUCT(`Elf32_Cap', 77 ``c_tag, WORD', 78 `c_un.c_val, WORD', 79 `_,_'') 80 81DEFINE_STRUCT(`Elf64_Cap', 82 ``c_tag, XWORD', 83 `c_un.c_val, XWORD', 84 `_,_'') 85 86DEFINE_STRUCT(`Elf32_Dyn', 87 ``d_tag, SWORD', 88 `d_un.d_ptr, WORD', 89 `_,_'') 90 91DEFINE_STRUCT(`Elf64_Dyn', 92 ``d_tag, SXWORD', 93 `d_un.d_ptr, XWORD', 94 `_,_'') 95 96DEFINE_STRUCT(`Elf32_Ehdr', 97 ``e_ident, IDENT', 98 `e_type, HALF', 99 `e_machine, HALF', 100 `e_version, WORD', 101 `e_entry, ADDR', 102 `e_phoff, OFF', 103 `e_shoff, OFF', 104 `e_flags, WORD', 105 `e_ehsize, HALF', 106 `e_phentsize, HALF', 107 `e_phnum, HALF', 108 `e_shentsize, HALF', 109 `e_shnum, HALF', 110 `e_shstrndx, HALF', 111 `_,_'') 112 113DEFINE_STRUCT(`Elf64_Ehdr', 114 ``e_ident, IDENT', 115 `e_type, HALF', 116 `e_machine, HALF', 117 `e_version, WORD', 118 `e_entry, ADDR', 119 `e_phoff, OFF', 120 `e_shoff, OFF', 121 `e_flags, WORD', 122 `e_ehsize, HALF', 123 `e_phentsize, HALF', 124 `e_phnum, HALF', 125 `e_shentsize, HALF', 126 `e_shnum, HALF', 127 `e_shstrndx, HALF', 128 `_,_'') 129 130DEFINE_STRUCT(`Elf32_Move', 131 ``m_value, LWORD', 132 `m_info, WORD', 133 `m_poffset, WORD', 134 `m_repeat, HALF', 135 `m_stride, HALF', 136 `_,_'') 137 138DEFINE_STRUCT(`Elf64_Move', 139 ``m_value, LWORD', 140 `m_info, XWORD', 141 `m_poffset, XWORD', 142 `m_repeat, HALF', 143 `m_stride, HALF', 144 `_,_'') 145 146DEFINE_STRUCT(`Elf32_Phdr', 147 ``p_type, WORD', 148 `p_offset, OFF', 149 `p_vaddr, ADDR', 150 `p_paddr, ADDR', 151 `p_filesz, WORD', 152 `p_memsz, WORD', 153 `p_flags, WORD', 154 `p_align, WORD', 155 `_,_'') 156 157DEFINE_STRUCT(`Elf64_Phdr', 158 ``p_type, WORD', 159 `p_flags, WORD', 160 `p_offset, OFF', 161 `p_vaddr, ADDR', 162 `p_paddr, ADDR', 163 `p_filesz, XWORD', 164 `p_memsz, XWORD', 165 `p_align, XWORD', 166 `_,_'') 167 168DEFINE_STRUCT(`Elf32_Rel', 169 ``r_offset, ADDR', 170 `r_info, WORD', 171 `_,_'') 172 173DEFINE_STRUCT(`Elf64_Rel', 174 ``r_offset, ADDR', 175 `r_info, XWORD', 176 `_,_'') 177 178DEFINE_STRUCT(`Elf32_Rela', 179 ``r_offset, ADDR', 180 `r_info, WORD', 181 `r_addend, SWORD', 182 `_,_'') 183 184DEFINE_STRUCT(`Elf64_Rela', 185 ``r_offset, ADDR', 186 `r_info, XWORD', 187 `r_addend, SXWORD', 188 `_,_'') 189 190DEFINE_STRUCT(`Elf32_Shdr', 191 ``sh_name, WORD', 192 `sh_type, WORD', 193 `sh_flags, WORD', 194 `sh_addr, ADDR', 195 `sh_offset, OFF', 196 `sh_size, WORD', 197 `sh_link, WORD', 198 `sh_info, WORD', 199 `sh_addralign, WORD', 200 `sh_entsize, WORD', 201 `_,_'') 202 203DEFINE_STRUCT(`Elf64_Shdr', 204 ``sh_name, WORD', 205 `sh_type, WORD', 206 `sh_flags, XWORD', 207 `sh_addr, ADDR', 208 `sh_offset, OFF', 209 `sh_size, XWORD', 210 `sh_link, WORD', 211 `sh_info, WORD', 212 `sh_addralign, XWORD', 213 `sh_entsize, XWORD', 214 `_,_'') 215 216DEFINE_STRUCT(`Elf32_Sym', 217 ``st_name, WORD', 218 `st_value, ADDR', 219 `st_size, WORD', 220 `st_info, BYTE', 221 `st_other, BYTE', 222 `st_shndx, HALF', 223 `_,_'') 224 225DEFINE_STRUCT(`Elf64_Sym', 226 ``st_name, WORD', 227 `st_info, BYTE', 228 `st_other, BYTE', 229 `st_shndx, HALF', 230 `st_value, ADDR', 231 `st_size, XWORD', 232 `_,_'') 233 234DEFINE_STRUCT(`Elf32_Syminfo', 235 ``si_boundto, HALF', 236 `si_flags, HALF', 237 `_,_'') 238 239DEFINE_STRUCT(`Elf64_Syminfo', 240 ``si_boundto, HALF', 241 `si_flags, HALF', 242 `_,_'') 243 244DEFINE_STRUCT(`Elf32_Verdaux', 245 ``vda_name, WORD', 246 `vda_next, WORD', 247 `_,_'') 248 249DEFINE_STRUCT(`Elf64_Verdaux', 250 ``vda_name, WORD', 251 `vda_next, WORD', 252 `_,_'') 253 254DEFINE_STRUCT(`Elf32_Verdef', 255 ``vd_version, HALF', 256 `vd_flags, HALF', 257 `vd_ndx, HALF', 258 `vd_cnt, HALF', 259 `vd_hash, WORD', 260 `vd_aux, WORD', 261 `vd_next, WORD', 262 `_,_'') 263 264DEFINE_STRUCT(`Elf64_Verdef', 265 ``vd_version, HALF', 266 `vd_flags, HALF', 267 `vd_ndx, HALF', 268 `vd_cnt, HALF', 269 `vd_hash, WORD', 270 `vd_aux, WORD', 271 `vd_next, WORD', 272 `_,_'') 273 274DEFINE_STRUCT(`Elf32_Verneed', 275 ``vn_version, HALF', 276 `vn_cnt, HALF', 277 `vn_file, WORD', 278 `vn_aux, WORD', 279 `vn_next, WORD', 280 `_,_'') 281 282DEFINE_STRUCT(`Elf64_Verneed', 283 ``vn_version, HALF', 284 `vn_cnt, HALF', 285 `vn_file, WORD', 286 `vn_aux, WORD', 287 `vn_next, WORD', 288 `_,_'') 289 290DEFINE_STRUCT(`Elf32_Vernaux', 291 ``vna_hash, WORD', 292 `vna_flags, HALF', 293 `vna_other, HALF', 294 `vna_name, WORD', 295 `vna_next, WORD', 296 `_,_'') 297 298DEFINE_STRUCT(`Elf64_Vernaux', 299 ``vna_hash, WORD', 300 `vna_flags, HALF', 301 `vna_other, HALF', 302 `vna_name, WORD', 303 `vna_next, WORD', 304 `_,_'') 305