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