Imported Upstream version 0.153
[platform/upstream/elfutils.git] / backends / arm_symbol.c
1 /* Arm specific symbolic name handling.
2    Copyright (C) 2002-2009 Red Hat, Inc.
3    This file is part of Red Hat elfutils.
4
5    Red Hat elfutils is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by the
7    Free Software Foundation; version 2 of the License.
8
9    Red Hat elfutils is distributed in the hope that it will be useful, but
10    WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    General Public License for more details.
13
14    You should have received a copy of the GNU General Public License along
15    with Red Hat elfutils; if not, write to the Free Software Foundation,
16    Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
17
18    Red Hat elfutils is an included package of the Open Invention Network.
19    An included package of the Open Invention Network is a package for which
20    Open Invention Network licensees cross-license their patents.  No patent
21    license is granted, either expressly or impliedly, by designation as an
22    included package.  Should you wish to participate in the Open Invention
23    Network licensing program, please visit www.openinventionnetwork.com
24    <http://www.openinventionnetwork.com>.  */
25
26 #ifdef HAVE_CONFIG_H
27 # include <config.h>
28 #endif
29
30 #include <elf.h>
31 #include <stddef.h>
32
33 #define BACKEND         arm_
34 #include "libebl_CPU.h"
35
36
37 const char *
38 arm_segment_type_name (int segment, char *buf __attribute__ ((unused)),
39                        size_t len __attribute__ ((unused)))
40 {
41   switch (segment)
42     {
43     case PT_ARM_EXIDX:
44       return "ARM_EXIDX";
45     }
46   return NULL;
47 }
48
49 /* Return symbolic representation of section type.  */
50 const char *
51 arm_section_type_name (int type,
52                        char *buf __attribute__ ((unused)),
53                        size_t len __attribute__ ((unused)))
54 {
55   switch (type)
56     {
57     case SHT_ARM_EXIDX:
58       return "ARM_EXIDX";
59     case SHT_ARM_PREEMPTMAP:
60       return "ARM_PREEMPTMAP";
61     case SHT_ARM_ATTRIBUTES:
62       return "ARM_ATTRIBUTES";
63     }
64
65   return NULL;
66 }
67
68 /* Check whether machine flags are valid.  */
69 bool
70 arm_machine_flag_check (GElf_Word flags)
71 {
72   switch (flags & EF_ARM_EABIMASK)
73     {
74     case EF_ARM_EABI_UNKNOWN:
75     case EF_ARM_EABI_VER1:
76     case EF_ARM_EABI_VER2:
77     case EF_ARM_EABI_VER3:
78     case EF_ARM_EABI_VER4:
79     case EF_ARM_EABI_VER5:
80       break;
81     default:
82       return false;
83     }
84
85   return ((flags &~ (EF_ARM_EABIMASK
86                      | EF_ARM_RELEXEC
87                      | EF_ARM_HASENTRY
88                      | EF_ARM_INTERWORK
89                      | EF_ARM_APCS_26
90                      | EF_ARM_APCS_FLOAT
91                      | EF_ARM_PIC
92                      | EF_ARM_ALIGN8
93                      | EF_ARM_NEW_ABI
94                      | EF_ARM_OLD_ABI
95                      | EF_ARM_SOFT_FLOAT
96                      | EF_ARM_VFP_FLOAT
97                      | EF_ARM_MAVERICK_FLOAT
98                      | EF_ARM_SYMSARESORTED
99                      | EF_ARM_DYNSYMSUSESEGIDX
100                      | EF_ARM_MAPSYMSFIRST
101                      | EF_ARM_EABIMASK
102                      | EF_ARM_BE8
103                      | EF_ARM_LE8)) == 0);
104 }
105
106 /* Check for the simple reloc types.  */
107 Elf_Type
108 arm_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
109 {
110   switch (type)
111     {
112     case R_ARM_ABS32:
113       return ELF_T_WORD;
114     case R_ARM_ABS16:
115       return ELF_T_HALF;
116     case R_ARM_ABS8:
117       return ELF_T_BYTE;
118     default:
119       return ELF_T_NUM;
120     }
121 }