1/* $NetBSD: libelf_data.c,v 1.3 2009/12/29 17:05:58 thorpej Exp $ */ 2 3/*- 4 * Copyright (c) 2006 Joseph Koshy 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29#if HAVE_NBTOOL_CONFIG_H 30# include "nbtool_config.h" 31#endif 32 33#include <sys/cdefs.h> 34/* __FBSDID("$FreeBSD: src/lib/libelf/libelf_data.c,v 1.4.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $"); */ 35 36#include <libelf.h> 37 38#include "_libelf.h" 39 40int 41_libelf_xlate_shtype(uint32_t sht) 42{ 43 switch (sht) { 44 case SHT_DYNAMIC: 45 return (ELF_T_DYN); 46 case SHT_DYNSYM: 47 return (ELF_T_SYM); 48 case SHT_FINI_ARRAY: 49 return (ELF_T_ADDR); 50 case SHT_GROUP: 51 return (ELF_T_WORD); 52 case SHT_HASH: 53 return (ELF_T_WORD); 54 case SHT_INIT_ARRAY: 55 return (ELF_T_ADDR); 56 case SHT_NOBITS: 57 return (ELF_T_BYTE); 58 case SHT_NOTE: 59 return (ELF_T_NOTE); 60 case SHT_PREINIT_ARRAY: 61 return (ELF_T_ADDR); 62 case SHT_PROGBITS: 63 return (ELF_T_BYTE); 64 case SHT_REL: 65 return (ELF_T_REL); 66 case SHT_RELA: 67 return (ELF_T_RELA); 68 case SHT_STRTAB: 69 return (ELF_T_BYTE); 70 case SHT_SYMTAB: 71 return (ELF_T_SYM); 72 case SHT_SYMTAB_SHNDX: 73 return (ELF_T_WORD); 74#if defined(__LIBELF_HAVE_ELF_VERS) 75 case SHT_GNU_verdef: /* == SHT_SUNW_verdef */ 76 return (ELF_T_VDEF); 77 case SHT_GNU_verneed: /* == SHT_SUNW_verneed */ 78 return (ELF_T_VNEED); 79 case SHT_GNU_versym: /* == SHT_SUNW_versym */ 80 return (ELF_T_HALF); 81#endif /* __LIBELF_HAVE_ELF_VERS */ 82#if defined(__LIBELF_HAVE_ELF_MOVE) 83 case SHT_SUNW_move: 84 return (ELF_T_MOVE); 85#endif /* __LIBELF_HAVE_ELF_MOVE */ 86#if defined(__LIBELF_HAVE_ELF_SYMINFO) 87 case SHT_SUNW_syminfo: 88 return (ELF_T_SYMINFO); 89#endif /* __LIBELF_HAVE_ELF_SYMINFO */ 90 case SHT_AMD64_UNWIND: /* == SHT_IA_64_UNWIND */ 91 return (ELF_T_BYTE); 92 default: 93 return (-1); 94 } 95} 96