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