source: rtems-tools/rtemstoolkit/elftoolchain/libelf/libelf_data.c @ 771e7f1

5
Last change on this file since 771e7f1 was 771e7f1, checked in by Chris Johns <chrisj@…>, on 04/30/18 at 04:20:32

rtemstoolkit: Update elftoolchain to the latest code.

The update is taken from:

https://svn.code.sf.net/p/elftoolchain/code/trunk

Update #3417

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*-
2 * Copyright (c) 2006,2008 Joseph Koshy
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <libelf.h>
28
29#include "_libelf.h"
30
31ELFTC_VCSID("$Id: libelf_data.c 3174 2015-03-27 17:13:41Z emaste $");
32
33int
34_libelf_xlate_shtype(uint32_t sht)
35{
36        /*
37         * Look for known section types.
38         */
39        switch (sht) {
40        case SHT_DYNAMIC:
41                return (ELF_T_DYN);
42        case SHT_DYNSYM:
43                return (ELF_T_SYM);
44        case SHT_FINI_ARRAY:
45                return (ELF_T_ADDR);
46        case SHT_GNU_HASH:
47                return (ELF_T_GNUHASH);
48        case SHT_GNU_LIBLIST:
49                return (ELF_T_WORD);
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        case SHT_SUNW_dof:
75                return (ELF_T_BYTE);
76        case SHT_SUNW_move:
77                return (ELF_T_MOVE);
78        case SHT_SUNW_syminfo:
79                return (ELF_T_SYMINFO);
80        case SHT_SUNW_verdef:   /* == SHT_GNU_verdef */
81                return (ELF_T_VDEF);
82        case SHT_SUNW_verneed:  /* == SHT_GNU_verneed */
83                return (ELF_T_VNEED);
84        case SHT_SUNW_versym:   /* == SHT_GNU_versym */
85                return (ELF_T_HALF);
86        default:
87                /*
88                 * Values in the range [SHT_LOOS..SHT_HIUSER] (i.e.,
89                 * OS, processor and user-defined section types) are
90                 * legal, but since we do not know anything more about
91                 * their semantics, we return a type of ELF_T_BYTE.
92                 */
93                if (sht >= SHT_LOOS && sht <= SHT_HIUSER)
94                        return (ELF_T_BYTE);
95
96                /*
97                 * Other values are unsupported.
98                 */
99                return (-1);
100        }
101}
Note: See TracBrowser for help on using the repository browser.