libelf_data.c revision 179239
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_data.c 179239 2008-05-23 07:32:19Z jb $"); 29164190Sjkoshy 30164190Sjkoshy#include <libelf.h> 31164190Sjkoshy#include <osreldate.h> 32164190Sjkoshy 33164190Sjkoshy#include "_libelf.h" 34164190Sjkoshy 35164190Sjkoshyint 36164190Sjkoshy_libelf_xlate_shtype(uint32_t sht) 37164190Sjkoshy{ 38164190Sjkoshy switch (sht) { 39164190Sjkoshy case SHT_DYNAMIC: 40164190Sjkoshy return (ELF_T_DYN); 41164190Sjkoshy case SHT_DYNSYM: 42164190Sjkoshy return (ELF_T_SYM); 43164190Sjkoshy case SHT_FINI_ARRAY: 44164190Sjkoshy return (ELF_T_ADDR); 45164190Sjkoshy case SHT_GROUP: 46164190Sjkoshy return (ELF_T_WORD); 47164190Sjkoshy case SHT_HASH: 48164190Sjkoshy return (ELF_T_WORD); 49164190Sjkoshy case SHT_INIT_ARRAY: 50164190Sjkoshy return (ELF_T_ADDR); 51164190Sjkoshy case SHT_NOBITS: 52164190Sjkoshy return (ELF_T_BYTE); 53164190Sjkoshy case SHT_NOTE: 54164190Sjkoshy return (ELF_T_NOTE); 55164190Sjkoshy case SHT_PREINIT_ARRAY: 56164190Sjkoshy return (ELF_T_ADDR); 57164190Sjkoshy case SHT_PROGBITS: 58164190Sjkoshy return (ELF_T_BYTE); 59164190Sjkoshy case SHT_REL: 60164190Sjkoshy return (ELF_T_REL); 61164190Sjkoshy case SHT_RELA: 62164190Sjkoshy return (ELF_T_RELA); 63164190Sjkoshy case SHT_STRTAB: 64164190Sjkoshy return (ELF_T_BYTE); 65164190Sjkoshy case SHT_SYMTAB: 66164190Sjkoshy return (ELF_T_SYM); 67164190Sjkoshy case SHT_SYMTAB_SHNDX: 68164190Sjkoshy return (ELF_T_WORD); 69165316Sjkoshy#if __FreeBSD_version >= 700025 70164190Sjkoshy case SHT_GNU_verdef: /* == SHT_SUNW_verdef */ 71164190Sjkoshy return (ELF_T_VDEF); 72164190Sjkoshy case SHT_GNU_verneed: /* == SHT_SUNW_verneed */ 73164190Sjkoshy return (ELF_T_VNEED); 74164190Sjkoshy case SHT_GNU_versym: /* == SHT_SUNW_versym */ 75173869Sjkoshy return (ELF_T_HALF); 76164190Sjkoshy case SHT_SUNW_move: 77164190Sjkoshy return (ELF_T_MOVE); 78164190Sjkoshy case SHT_SUNW_syminfo: 79164190Sjkoshy return (ELF_T_SYMINFO); 80164190Sjkoshy#endif 81179239Sjb case SHT_AMD64_UNWIND: /* == SHT_IA_64_UNWIND */ 82179239Sjb return (ELF_T_BYTE); 83164190Sjkoshy default: 84164190Sjkoshy return (-1); 85164190Sjkoshy } 86164190Sjkoshy} 87