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