14484Sbinkertn@umich.edu/*- 24484Sbinkertn@umich.edu * Copyright (c) 2006 Joseph Koshy 34484Sbinkertn@umich.edu * All rights reserved. 44484Sbinkertn@umich.edu * 54484Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without 64484Sbinkertn@umich.edu * modification, are permitted provided that the following conditions 74484Sbinkertn@umich.edu * are met: 84484Sbinkertn@umich.edu * 1. Redistributions of source code must retain the above copyright 94484Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer. 104484Sbinkertn@umich.edu * 2. Redistributions in binary form must reproduce the above copyright 114484Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer in the 124484Sbinkertn@umich.edu * documentation and/or other materials provided with the distribution. 134484Sbinkertn@umich.edu * 144484Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 154484Sbinkertn@umich.edu * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 164484Sbinkertn@umich.edu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 174484Sbinkertn@umich.edu * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 184484Sbinkertn@umich.edu * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 194484Sbinkertn@umich.edu * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 204484Sbinkertn@umich.edu * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 214484Sbinkertn@umich.edu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 224484Sbinkertn@umich.edu * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 234484Sbinkertn@umich.edu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 244484Sbinkertn@umich.edu * SUCH DAMAGE. 254484Sbinkertn@umich.edu * 264484Sbinkertn@umich.edu * $FreeBSD: src/lib/libelf/elf_types.m4,v 1.2 2006/12/18 05:40:01 jkoshy Exp $ 274484Sbinkertn@umich.edu */ 284484Sbinkertn@umich.edu 294484Sbinkertn@umich.edu/* 304484Sbinkertn@umich.edu * ELF types, defined in the "enum Elf_Type" API. 314484Sbinkertn@umich.edu * 324484Sbinkertn@umich.edu * The members of the list form a 3-tuple: (name, C-type-suffix, OSversion). 334484Sbinkertn@umich.edu * + `name' is an Elf_Type symbol without the `ELF_T_' prefix. 344484Sbinkertn@umich.edu * + `C-type-suffix' is the suffix for Elf32_ and Elf64_ type names. 354484Sbinkertn@umich.edu * + `version' is the OS version the symbol first appeared in. 364484Sbinkertn@umich.edu * 374484Sbinkertn@umich.edu */ 384484Sbinkertn@umich.edu 394484Sbinkertn@umich.edudefine(`ELF_TYPE_LIST', 404484Sbinkertn@umich.edu ``ADDR, Addr, 600102', 414484Sbinkertn@umich.edu `BYTE, Byte, 600102', 424484Sbinkertn@umich.edu `CAP, Cap, 700025', 434484Sbinkertn@umich.edu `DYN, Dyn, 600102', 444484Sbinkertn@umich.edu `EHDR, Ehdr, 600102', 454484Sbinkertn@umich.edu `HALF, Half, 600102', 464484Sbinkertn@umich.edu `LWORD, Lword, 700025', 474484Sbinkertn@umich.edu `MOVE, Move, 700025', 484484Sbinkertn@umich.edu `MOVEP, MoveP, 700025', 494484Sbinkertn@umich.edu `NOTE, Note, 600102', 504484Sbinkertn@umich.edu `OFF, Off, 600102', 514484Sbinkertn@umich.edu `PHDR, Phdr, 600102', 524484Sbinkertn@umich.edu `REL, Rel, 600102', 534484Sbinkertn@umich.edu `RELA, Rela, 600102', 544484Sbinkertn@umich.edu `SHDR, Shdr, 600102', 554484Sbinkertn@umich.edu `SWORD, Sword, 600102', 564484Sbinkertn@umich.edu `SXWORD, Sxword, 700009', 574484Sbinkertn@umich.edu `SYMINFO, Syminfo, 700025', 584484Sbinkertn@umich.edu `SYM, Sym, 600102', 594484Sbinkertn@umich.edu `VDEF, Verdef, 700009', 604484Sbinkertn@umich.edu `VNEED, Verneed, 700009', 614484Sbinkertn@umich.edu `WORD, Word, 600102', 624484Sbinkertn@umich.edu `XWORD, Xword, 700009', 634484Sbinkertn@umich.edu `NUM, _, _'') 644484Sbinkertn@umich.edu 654484Sbinkertn@umich.edu/* 664484Sbinkertn@umich.edu * DEFINE_STRUCT(NAME,MEMBERLIST...) 674484Sbinkertn@umich.edu * 684484Sbinkertn@umich.edu * Map a type name to its members. 694484Sbinkertn@umich.edu * 704484Sbinkertn@umich.edu * Each member-list element comprises of pairs of (field name, type), 714484Sbinkertn@umich.edu * in the sequence used in the file representation of `NAME'. 724484Sbinkertn@umich.edu * 734484Sbinkertn@umich.edu * Each member list element comprises a pair containing a field name 744484Sbinkertn@umich.edu * and a basic type. Basic types include IDENT, HALF, WORD, LWORD, 754484Sbinkertn@umich.edu * ADDR{32,64}, OFF{32,64}, SWORD, XWORD, SXWORD. 764484Sbinkertn@umich.edu * 774484Sbinkertn@umich.edu * The last element of a member list is the null element: `_,_'. 784484Sbinkertn@umich.edu */ 794484Sbinkertn@umich.edu 804484Sbinkertn@umich.edudefine(`DEFINE_STRUCT',`define(`$1_DEF',shift($@))dnl') 814484Sbinkertn@umich.edu 824484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Cap', 834484Sbinkertn@umich.edu ``c_tag, WORD', 844484Sbinkertn@umich.edu `c_un.c_val, WORD', 854484Sbinkertn@umich.edu `_,_'') 864484Sbinkertn@umich.edu 874484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Cap', 884484Sbinkertn@umich.edu ``c_tag, XWORD', 894484Sbinkertn@umich.edu `c_un.c_val, XWORD', 904484Sbinkertn@umich.edu `_,_'') 914484Sbinkertn@umich.edu 924484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Dyn', 934484Sbinkertn@umich.edu ``d_tag, SWORD', 944484Sbinkertn@umich.edu `d_un.d_ptr, WORD', 954484Sbinkertn@umich.edu `_,_'') 964484Sbinkertn@umich.edu 974484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Dyn', 984484Sbinkertn@umich.edu ``d_tag, SXWORD', 994484Sbinkertn@umich.edu `d_un.d_ptr, XWORD', 1004484Sbinkertn@umich.edu `_,_'') 1014484Sbinkertn@umich.edu 1024484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Ehdr', 1034484Sbinkertn@umich.edu ``e_ident, IDENT', 1044484Sbinkertn@umich.edu `e_type, HALF', 1054484Sbinkertn@umich.edu `e_machine, HALF', 1064484Sbinkertn@umich.edu `e_version, WORD', 1074484Sbinkertn@umich.edu `e_entry, ADDR', 1084484Sbinkertn@umich.edu `e_phoff, OFF', 1094484Sbinkertn@umich.edu `e_shoff, OFF', 1104484Sbinkertn@umich.edu `e_flags, WORD', 1114484Sbinkertn@umich.edu `e_ehsize, HALF', 1124484Sbinkertn@umich.edu `e_phentsize, HALF', 1134484Sbinkertn@umich.edu `e_phnum, HALF', 1144484Sbinkertn@umich.edu `e_shentsize, HALF', 1154484Sbinkertn@umich.edu `e_shnum, HALF', 1164484Sbinkertn@umich.edu `e_shstrndx, HALF', 1174484Sbinkertn@umich.edu `_,_'') 1184484Sbinkertn@umich.edu 1194484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Ehdr', 1204484Sbinkertn@umich.edu ``e_ident, IDENT', 1214484Sbinkertn@umich.edu `e_type, HALF', 1224484Sbinkertn@umich.edu `e_machine, HALF', 1234484Sbinkertn@umich.edu `e_version, WORD', 1244484Sbinkertn@umich.edu `e_entry, ADDR', 1254484Sbinkertn@umich.edu `e_phoff, OFF', 1264484Sbinkertn@umich.edu `e_shoff, OFF', 1274484Sbinkertn@umich.edu `e_flags, WORD', 1284484Sbinkertn@umich.edu `e_ehsize, HALF', 1294484Sbinkertn@umich.edu `e_phentsize, HALF', 1304484Sbinkertn@umich.edu `e_phnum, HALF', 1314484Sbinkertn@umich.edu `e_shentsize, HALF', 1324484Sbinkertn@umich.edu `e_shnum, HALF', 1334484Sbinkertn@umich.edu `e_shstrndx, HALF', 1344484Sbinkertn@umich.edu `_,_'') 1354484Sbinkertn@umich.edu 1364484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Move', 1374484Sbinkertn@umich.edu ``m_value, LWORD', 1384484Sbinkertn@umich.edu `m_info, WORD', 1394484Sbinkertn@umich.edu `m_poffset, WORD', 1404484Sbinkertn@umich.edu `m_repeat, HALF', 1414484Sbinkertn@umich.edu `m_stride, HALF', 1424484Sbinkertn@umich.edu `_,_'') 1434484Sbinkertn@umich.edu 1444484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Move', 1454484Sbinkertn@umich.edu ``m_value, LWORD', 1464484Sbinkertn@umich.edu `m_info, XWORD', 1474484Sbinkertn@umich.edu `m_poffset, XWORD', 1484484Sbinkertn@umich.edu `m_repeat, HALF', 1494484Sbinkertn@umich.edu `m_stride, HALF', 1504484Sbinkertn@umich.edu `_,_'') 1514484Sbinkertn@umich.edu 1524484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Phdr', 1534484Sbinkertn@umich.edu ``p_type, WORD', 1544484Sbinkertn@umich.edu `p_offset, OFF', 1554484Sbinkertn@umich.edu `p_vaddr, ADDR', 1564484Sbinkertn@umich.edu `p_paddr, ADDR', 1574484Sbinkertn@umich.edu `p_filesz, WORD', 1584484Sbinkertn@umich.edu `p_memsz, WORD', 1594484Sbinkertn@umich.edu `p_flags, WORD', 1604484Sbinkertn@umich.edu `p_align, WORD', 1614484Sbinkertn@umich.edu `_,_'') 1624484Sbinkertn@umich.edu 1634484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Phdr', 1644484Sbinkertn@umich.edu ``p_type, WORD', 1654484Sbinkertn@umich.edu `p_flags, WORD', 1664484Sbinkertn@umich.edu `p_offset, OFF', 1674484Sbinkertn@umich.edu `p_vaddr, ADDR', 1684484Sbinkertn@umich.edu `p_paddr, ADDR', 1694484Sbinkertn@umich.edu `p_filesz, XWORD', 1704484Sbinkertn@umich.edu `p_memsz, XWORD', 1714484Sbinkertn@umich.edu `p_align, XWORD', 1724484Sbinkertn@umich.edu `_,_'') 1734484Sbinkertn@umich.edu 1744484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Rel', 1754484Sbinkertn@umich.edu ``r_offset, ADDR', 1764484Sbinkertn@umich.edu `r_info, WORD', 1774484Sbinkertn@umich.edu `_,_'') 1784484Sbinkertn@umich.edu 1794484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Rel', 1804484Sbinkertn@umich.edu ``r_offset, ADDR', 1814484Sbinkertn@umich.edu `r_info, XWORD', 1824484Sbinkertn@umich.edu `_,_'') 1834484Sbinkertn@umich.edu 1844484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Rela', 1854484Sbinkertn@umich.edu ``r_offset, ADDR', 1864484Sbinkertn@umich.edu `r_info, WORD', 1874484Sbinkertn@umich.edu `r_addend, SWORD', 1884484Sbinkertn@umich.edu `_,_'') 1894484Sbinkertn@umich.edu 1904484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Rela', 1914484Sbinkertn@umich.edu ``r_offset, ADDR', 1924484Sbinkertn@umich.edu `r_info, XWORD', 1934484Sbinkertn@umich.edu `r_addend, SXWORD', 1944484Sbinkertn@umich.edu `_,_'') 1954484Sbinkertn@umich.edu 1964484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Shdr', 1974484Sbinkertn@umich.edu ``sh_name, WORD', 1984484Sbinkertn@umich.edu `sh_type, WORD', 1994484Sbinkertn@umich.edu `sh_flags, WORD', 2004484Sbinkertn@umich.edu `sh_addr, ADDR', 2014484Sbinkertn@umich.edu `sh_offset, OFF', 2024484Sbinkertn@umich.edu `sh_size, WORD', 2034484Sbinkertn@umich.edu `sh_link, WORD', 2044484Sbinkertn@umich.edu `sh_info, WORD', 2054484Sbinkertn@umich.edu `sh_addralign, WORD', 2064484Sbinkertn@umich.edu `sh_entsize, WORD', 2074484Sbinkertn@umich.edu `_,_'') 2084484Sbinkertn@umich.edu 2094484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Shdr', 2104484Sbinkertn@umich.edu ``sh_name, WORD', 2114484Sbinkertn@umich.edu `sh_type, WORD', 2124484Sbinkertn@umich.edu `sh_flags, XWORD', 2134484Sbinkertn@umich.edu `sh_addr, ADDR', 2144484Sbinkertn@umich.edu `sh_offset, OFF', 2154484Sbinkertn@umich.edu `sh_size, XWORD', 2164484Sbinkertn@umich.edu `sh_link, WORD', 2174484Sbinkertn@umich.edu `sh_info, WORD', 2184484Sbinkertn@umich.edu `sh_addralign, XWORD', 2194484Sbinkertn@umich.edu `sh_entsize, XWORD', 2204484Sbinkertn@umich.edu `_,_'') 2214484Sbinkertn@umich.edu 2224484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Sym', 2234484Sbinkertn@umich.edu ``st_name, WORD', 2244484Sbinkertn@umich.edu `st_value, ADDR', 2254484Sbinkertn@umich.edu `st_size, WORD', 2264484Sbinkertn@umich.edu `st_info, BYTE', 2274484Sbinkertn@umich.edu `st_other, BYTE', 2284484Sbinkertn@umich.edu `st_shndx, HALF', 2294484Sbinkertn@umich.edu `_,_'') 2304484Sbinkertn@umich.edu 2314484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Sym', 2324484Sbinkertn@umich.edu ``st_name, WORD', 2334484Sbinkertn@umich.edu `st_info, BYTE', 2344484Sbinkertn@umich.edu `st_other, BYTE', 2354484Sbinkertn@umich.edu `st_shndx, HALF', 2364484Sbinkertn@umich.edu `st_value, ADDR', 2374484Sbinkertn@umich.edu `st_size, XWORD', 2384484Sbinkertn@umich.edu `_,_'') 2394484Sbinkertn@umich.edu 2404484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Syminfo', 2414484Sbinkertn@umich.edu ``si_boundto, HALF', 2424484Sbinkertn@umich.edu `si_flags, HALF', 2434484Sbinkertn@umich.edu `_,_'') 2444484Sbinkertn@umich.edu 2454484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Syminfo', 2464484Sbinkertn@umich.edu ``si_boundto, HALF', 2474484Sbinkertn@umich.edu `si_flags, HALF', 2484484Sbinkertn@umich.edu `_,_'') 2494484Sbinkertn@umich.edu 2504484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Verdaux', 2514484Sbinkertn@umich.edu ``vda_name, WORD', 2524484Sbinkertn@umich.edu `vda_next, WORD', 2534484Sbinkertn@umich.edu `_,_'') 2544484Sbinkertn@umich.edu 2554484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Verdaux', 2564484Sbinkertn@umich.edu ``vda_name, WORD', 2574484Sbinkertn@umich.edu `vda_next, WORD', 2584484Sbinkertn@umich.edu `_,_'') 2594484Sbinkertn@umich.edu 2604484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Verdef', 2614484Sbinkertn@umich.edu ``vd_version, HALF', 2624484Sbinkertn@umich.edu `vd_flags, HALF', 2634484Sbinkertn@umich.edu `vd_ndx, HALF', 2644484Sbinkertn@umich.edu `vd_cnt, HALF', 2654484Sbinkertn@umich.edu `vd_hash, WORD', 2664484Sbinkertn@umich.edu `vd_aux, WORD', 2674484Sbinkertn@umich.edu `vd_next, WORD', 2684484Sbinkertn@umich.edu `_,_'') 2694484Sbinkertn@umich.edu 2704484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Verdef', 2714484Sbinkertn@umich.edu ``vd_version, HALF', 2724484Sbinkertn@umich.edu `vd_flags, HALF', 2734484Sbinkertn@umich.edu `vd_ndx, HALF', 2744484Sbinkertn@umich.edu `vd_cnt, HALF', 2754484Sbinkertn@umich.edu `vd_hash, WORD', 2764484Sbinkertn@umich.edu `vd_aux, WORD', 2774484Sbinkertn@umich.edu `vd_next, WORD', 2784484Sbinkertn@umich.edu `_,_'') 2794484Sbinkertn@umich.edu 2804484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Verneed', 2814484Sbinkertn@umich.edu ``vn_version, HALF', 2824484Sbinkertn@umich.edu `vn_cnt, HALF', 2834484Sbinkertn@umich.edu `vn_file, WORD', 2844484Sbinkertn@umich.edu `vn_aux, WORD', 2854484Sbinkertn@umich.edu `vn_next, WORD', 2864484Sbinkertn@umich.edu `_,_'') 2874484Sbinkertn@umich.edu 2884484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Verneed', 2894484Sbinkertn@umich.edu ``vn_version, HALF', 2904484Sbinkertn@umich.edu `vn_cnt, HALF', 2914484Sbinkertn@umich.edu `vn_file, WORD', 2924484Sbinkertn@umich.edu `vn_aux, WORD', 2934484Sbinkertn@umich.edu `vn_next, WORD', 2944484Sbinkertn@umich.edu `_,_'') 2954484Sbinkertn@umich.edu 2964484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf32_Vernaux', 2974484Sbinkertn@umich.edu ``vna_hash, WORD', 2984484Sbinkertn@umich.edu `vna_flags, HALF', 2994484Sbinkertn@umich.edu `vna_other, HALF', 3004484Sbinkertn@umich.edu `vna_name, WORD', 3014484Sbinkertn@umich.edu `vna_next, WORD', 3024484Sbinkertn@umich.edu `_,_'') 3034484Sbinkertn@umich.edu 3044484Sbinkertn@umich.eduDEFINE_STRUCT(`Elf64_Vernaux', 3054484Sbinkertn@umich.edu ``vna_hash, WORD', 3064484Sbinkertn@umich.edu `vna_flags, HALF', 3074484Sbinkertn@umich.edu `vna_other, HALF', 3084484Sbinkertn@umich.edu `vna_name, WORD', 3094484Sbinkertn@umich.edu `vna_next, WORD', 3104484Sbinkertn@umich.edu `_,_'') 311