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$"); 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); 45210340Skaiw#if __FreeBSD_version >= 800062 46210340Skaiw case SHT_GNU_HASH: 47210340Skaiw return (ELF_T_GNUHASH); 48210340Skaiw#endif 49164190Sjkoshy case SHT_GROUP: 50164190Sjkoshy return (ELF_T_WORD); 51164190Sjkoshy case SHT_HASH: 52164190Sjkoshy return (ELF_T_WORD); 53164190Sjkoshy case SHT_INIT_ARRAY: 54164190Sjkoshy return (ELF_T_ADDR); 55164190Sjkoshy case SHT_NOBITS: 56164190Sjkoshy return (ELF_T_BYTE); 57164190Sjkoshy case SHT_NOTE: 58164190Sjkoshy return (ELF_T_NOTE); 59164190Sjkoshy case SHT_PREINIT_ARRAY: 60164190Sjkoshy return (ELF_T_ADDR); 61164190Sjkoshy case SHT_PROGBITS: 62164190Sjkoshy return (ELF_T_BYTE); 63164190Sjkoshy case SHT_REL: 64164190Sjkoshy return (ELF_T_REL); 65164190Sjkoshy case SHT_RELA: 66164190Sjkoshy return (ELF_T_RELA); 67164190Sjkoshy case SHT_STRTAB: 68164190Sjkoshy return (ELF_T_BYTE); 69164190Sjkoshy case SHT_SYMTAB: 70164190Sjkoshy return (ELF_T_SYM); 71164190Sjkoshy case SHT_SYMTAB_SHNDX: 72164190Sjkoshy return (ELF_T_WORD); 73165316Sjkoshy#if __FreeBSD_version >= 700025 74164190Sjkoshy case SHT_GNU_verdef: /* == SHT_SUNW_verdef */ 75164190Sjkoshy return (ELF_T_VDEF); 76164190Sjkoshy case SHT_GNU_verneed: /* == SHT_SUNW_verneed */ 77164190Sjkoshy return (ELF_T_VNEED); 78164190Sjkoshy case SHT_GNU_versym: /* == SHT_SUNW_versym */ 79173869Sjkoshy return (ELF_T_HALF); 80164190Sjkoshy case SHT_SUNW_move: 81164190Sjkoshy return (ELF_T_MOVE); 82164190Sjkoshy case SHT_SUNW_syminfo: 83164190Sjkoshy return (ELF_T_SYMINFO); 84211192Skaiw case SHT_SUNW_dof: 85211192Skaiw return (ELF_T_BYTE); 86164190Sjkoshy#endif 87221569Sobrien case SHT_MIPS_DWARF: 88221569Sobrien /* FALLTHROUGH */ 89179239Sjb case SHT_AMD64_UNWIND: /* == SHT_IA_64_UNWIND */ 90179239Sjb return (ELF_T_BYTE); 91164190Sjkoshy default: 92164190Sjkoshy return (-1); 93164190Sjkoshy } 94164190Sjkoshy} 95