libelf_msize.m4 revision 164190
1164190Sjkoshy/*- 2164190Sjkoshy * Copyright (c) 2006 Joseph Koshy 3164190Sjkoshy * All rights reserved. 4164190Sjkoshy * 5164190Sjkoshy * Redistribution and use in source and binary forms, with or without 6164190Sjkoshy * modification, are permitted provided that the following conditions 7164190Sjkoshy * are met: 8164190Sjkoshy * 1. Redistributions of source code must retain the above copyright 9164190Sjkoshy * notice, this list of conditions and the following disclaimer. 10164190Sjkoshy * 2. Redistributions in binary form must reproduce the above copyright 11164190Sjkoshy * notice, this list of conditions and the following disclaimer in the 12164190Sjkoshy * documentation and/or other materials provided with the distribution. 13164190Sjkoshy * 14164190Sjkoshy * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15164190Sjkoshy * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16164190Sjkoshy * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17164190Sjkoshy * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18164190Sjkoshy * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19164190Sjkoshy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20164190Sjkoshy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21164190Sjkoshy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22164190Sjkoshy * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23164190Sjkoshy * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24164190Sjkoshy * SUCH DAMAGE. 25164190Sjkoshy */ 26164190Sjkoshy 27164190Sjkoshy#include <sys/cdefs.h> 28164190Sjkoshy__FBSDID("$FreeBSD: head/lib/libelf/libelf_msize.m4 164190 2006-11-11 17:16:35Z jkoshy $"); 29164190Sjkoshy 30164190Sjkoshy#include <sys/types.h> 31164190Sjkoshy#include <sys/elf32.h> 32164190Sjkoshy#include <sys/elf64.h> 33164190Sjkoshy 34164190Sjkoshy#include <assert.h> 35164190Sjkoshy#include <libelf.h> 36164190Sjkoshy#include <string.h> 37164190Sjkoshy 38164190Sjkoshy#include "_libelf.h" 39164190Sjkoshy 40164190Sjkoshy/* WARNING: GENERATED FROM __file__. */ 41164190Sjkoshy 42164190Sjkoshystruct msize { 43164190Sjkoshy size_t msz32; 44164190Sjkoshy size_t msz64; 45164190Sjkoshy}; 46164190Sjkoshy 47164190Sjkoshydivert(-1) 48164190Sjkoshyinclude(SRCDIR`/elf_types.m4') 49164190Sjkoshy 50164190Sjkoshydefine(BYTE_SIZE, 1) 51164190Sjkoshydefine(NOTE_SIZE, 1) 52164190Sjkoshy 53164190Sjkoshy/* 54164190Sjkoshy * Unimplemented types. 55164190Sjkoshy */ 56164190Sjkoshydefine(MOVEP_SIZE, 0) 57164190Sjkoshydefine(SXWORD_SIZE32, 0) 58164190Sjkoshydefine(XWORD_SIZE32, 0) 59164190Sjkoshy 60164190Sjkoshyifelse(eval(OSRELDATE < 700009),1, 61164190Sjkoshy `define(`CAP_SIZE', 0) 62164190Sjkoshy define(`LWORD_SIZE', 0) 63164190Sjkoshy define(`MOVE_SIZE', 0) 64164190Sjkoshy define(`SYMINFO_SIZE', 0) 65164190Sjkoshy define(`VDEF_SIZE', 0) 66164190Sjkoshy define(`VNEED_SIZE', 0)',`') 67164190Sjkoshy 68164190Sjkoshydefine(`DEFINE_ELF_MSIZE', 69164190Sjkoshy `ifdef($1`_SIZE', 70164190Sjkoshy `define($1_SIZE32,$1_SIZE) 71164190Sjkoshy define($1_SIZE64,$1_SIZE)', 72164190Sjkoshy `ifdef($1`_SIZE32',`', 73164190Sjkoshy `define($1_SIZE32,sizeof(Elf32_$2))') 74164190Sjkoshy ifdef($1`_SIZE64',`', 75164190Sjkoshy `define($1_SIZE64,sizeof(Elf64_$2))')')') 76164190Sjkoshydefine(`DEFINE_ELF_MSIZES', 77164190Sjkoshy `ifelse($#,1,`', 78164190Sjkoshy `DEFINE_ELF_MSIZE($1) 79164190Sjkoshy DEFINE_ELF_MSIZES(shift($@))')') 80164190Sjkoshy 81164190SjkoshyDEFINE_ELF_MSIZES(ELF_TYPE_LIST) 82164190Sjkoshy 83164190Sjkoshydefine(`MSIZE', 84164190Sjkoshy `[ELF_T_$1] = { .msz32 = $1_SIZE32, .msz64 = $1_SIZE64 },') 85164190Sjkoshydefine(`MSIZES', 86164190Sjkoshy `ifelse($#,1,`', 87164190Sjkoshy `MSIZE($1) 88164190SjkoshyMSIZES(shift($@))')') 89164190Sjkoshy 90164190Sjkoshydivert(0) 91164190Sjkoshy 92164190Sjkoshystatic struct msize msize[ELF_T_NUM] = { 93164190SjkoshyMSIZES(ELF_TYPE_LIST) 94164190Sjkoshy}; 95164190Sjkoshy 96164190Sjkoshysize_t 97164190Sjkoshy_libelf_msize(Elf_Type t, int elfclass, unsigned int version) 98164190Sjkoshy{ 99164190Sjkoshy size_t sz; 100164190Sjkoshy 101164190Sjkoshy assert(elfclass == ELFCLASS32 || elfclass == ELFCLASS64); 102164190Sjkoshy assert((signed) t >= ELF_T_FIRST && t <= ELF_T_LAST); 103164190Sjkoshy 104164190Sjkoshy if (version != EV_CURRENT) { 105164190Sjkoshy LIBELF_SET_ERROR(VERSION, 0); 106164190Sjkoshy return (0); 107164190Sjkoshy } 108164190Sjkoshy 109164190Sjkoshy sz = (elfclass == ELFCLASS32) ? msize[t].msz32 : msize[t].msz64; 110164190Sjkoshy 111164190Sjkoshy return (sz); 112164190Sjkoshy} 113