libelf_msize.m4 revision 4484
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 274484Sbinkertn@umich.edu#include <sys/types.h> 284484Sbinkertn@umich.edu 294484Sbinkertn@umich.edu#include <assert.h> 304484Sbinkertn@umich.edu#include <string.h> 314484Sbinkertn@umich.edu 324484Sbinkertn@umich.edu#include "elf32.h" 334484Sbinkertn@umich.edu#include "elf64.h" 344484Sbinkertn@umich.edu#include "libelf.h" 354484Sbinkertn@umich.edu#include "_libelf.h" 364484Sbinkertn@umich.edu 374484Sbinkertn@umich.edu/* WARNING: GENERATED FROM __file__. */ 384484Sbinkertn@umich.edu 394484Sbinkertn@umich.edustruct msize { 404484Sbinkertn@umich.edu size_t msz32; 414484Sbinkertn@umich.edu size_t msz64; 424484Sbinkertn@umich.edu}; 434484Sbinkertn@umich.edu 444484Sbinkertn@umich.edudivert(-1) 454484Sbinkertn@umich.eduinclude(SRCDIR`/elf_types.m4') 464484Sbinkertn@umich.edu 474484Sbinkertn@umich.edudefine(BYTE_SIZE, 1) 484484Sbinkertn@umich.edudefine(NOTE_SIZE, 1) 494484Sbinkertn@umich.edu 504484Sbinkertn@umich.edu/* 514484Sbinkertn@umich.edu * Unimplemented types. 524484Sbinkertn@umich.edu */ 534484Sbinkertn@umich.edudefine(MOVEP_SIZE, 0) 544484Sbinkertn@umich.edudefine(SXWORD_SIZE32, 0) 554484Sbinkertn@umich.edudefine(XWORD_SIZE32, 0) 564484Sbinkertn@umich.edu 574484Sbinkertn@umich.edudefine(`DEFINE_ELF_MSIZE', 584484Sbinkertn@umich.edu `ifdef($1`_SIZE', 594484Sbinkertn@umich.edu `define($1_SIZE32,$1_SIZE) 604484Sbinkertn@umich.edu define($1_SIZE64,$1_SIZE)', 614484Sbinkertn@umich.edu `ifdef($1`_SIZE32',`', 624484Sbinkertn@umich.edu `define($1_SIZE32,sizeof(Elf32_$2))') 634484Sbinkertn@umich.edu ifdef($1`_SIZE64',`', 644484Sbinkertn@umich.edu `define($1_SIZE64,sizeof(Elf64_$2))')')') 654484Sbinkertn@umich.edudefine(`DEFINE_ELF_MSIZES', 664484Sbinkertn@umich.edu `ifelse($#,1,`', 674484Sbinkertn@umich.edu `DEFINE_ELF_MSIZE($1) 684484Sbinkertn@umich.edu DEFINE_ELF_MSIZES(shift($@))')') 694484Sbinkertn@umich.edu 704484Sbinkertn@umich.eduDEFINE_ELF_MSIZES(ELF_TYPE_LIST) 714484Sbinkertn@umich.edu 724484Sbinkertn@umich.edudefine(`MSIZE', 734484Sbinkertn@umich.edu `[ELF_T_$1] = { .msz32 = $1_SIZE32, .msz64 = $1_SIZE64 },') 744484Sbinkertn@umich.edudefine(`MSIZES', 754484Sbinkertn@umich.edu `ifelse($#,1,`', 764484Sbinkertn@umich.edu `MSIZE($1) 774484Sbinkertn@umich.eduMSIZES(shift($@))')') 784484Sbinkertn@umich.edu 794484Sbinkertn@umich.edudivert(0) 804484Sbinkertn@umich.edu 814484Sbinkertn@umich.edustatic struct msize msize[ELF_T_NUM] = { 824484Sbinkertn@umich.eduMSIZES(ELF_TYPE_LIST) 834484Sbinkertn@umich.edu}; 844484Sbinkertn@umich.edu 854484Sbinkertn@umich.edusize_t 864484Sbinkertn@umich.edu_libelf_msize(Elf_Type t, int elfclass, unsigned int version) 874484Sbinkertn@umich.edu{ 884484Sbinkertn@umich.edu size_t sz; 894484Sbinkertn@umich.edu 904484Sbinkertn@umich.edu assert(elfclass == ELFCLASS32 || elfclass == ELFCLASS64); 914484Sbinkertn@umich.edu assert((signed) t >= ELF_T_FIRST && t <= ELF_T_LAST); 924484Sbinkertn@umich.edu 934484Sbinkertn@umich.edu if (version != EV_CURRENT) { 944484Sbinkertn@umich.edu LIBELF_SET_ERROR(VERSION, 0); 954484Sbinkertn@umich.edu return (0); 964484Sbinkertn@umich.edu } 974484Sbinkertn@umich.edu 984484Sbinkertn@umich.edu sz = (elfclass == ELFCLASS32) ? msize[t].msz32 : msize[t].msz64; 994484Sbinkertn@umich.edu 1004484Sbinkertn@umich.edu return (sz); 1014484Sbinkertn@umich.edu} 102