Upstream version 8.36.161.0
[platform/framework/web/crosswalk.git] / src / third_party / pyelftools / elftools / elf / descriptions.py
1 #-------------------------------------------------------------------------------
2 # elftools: elf/descriptions.py
3 #
4 # Textual descriptions of the various enums and flags of ELF
5 #
6 # Eli Bendersky (eliben@gmail.com)
7 # This code is in the public domain
8 #-------------------------------------------------------------------------------
9 from .enums import ENUM_E_VERSION, ENUM_RELOC_TYPE_i386, ENUM_RELOC_TYPE_x64
10 from .constants import P_FLAGS, SH_FLAGS
11 from ..common.py3compat import iteritems
12
13
14 def describe_ei_class(x):
15     return _DESCR_EI_CLASS.get(x, _unknown)
16
17 def describe_ei_data(x):
18     return _DESCR_EI_DATA.get(x, _unknown)
19
20 def describe_ei_version(x):
21     s = '%d' % ENUM_E_VERSION[x]
22     if x == 'EV_CURRENT':
23         s += ' (current)'
24     return s
25     
26 def describe_ei_osabi(x):
27     return _DESCR_EI_OSABI.get(x, _unknown)
28
29 def describe_e_type(x):
30     return _DESCR_E_TYPE.get(x, _unknown)
31
32 def describe_e_machine(x):
33     return _DESCR_E_MACHINE.get(x, _unknown)
34
35 def describe_e_version_numeric(x):
36     return '0x%x' % ENUM_E_VERSION[x]
37
38 def describe_p_type(x):
39     return _DESCR_P_TYPE.get(x, _unknown)
40
41 def describe_p_flags(x):
42     s = ''
43     for flag in (P_FLAGS.PF_R, P_FLAGS.PF_W, P_FLAGS.PF_X):
44         s += _DESCR_P_FLAGS[flag] if (x & flag) else ' ' 
45     return s
46
47 def describe_sh_type(x):
48     return _DESCR_SH_TYPE.get(x, _unknown)
49
50 def describe_sh_flags(x):
51     s = ''
52     for flag in (
53             SH_FLAGS.SHF_WRITE, SH_FLAGS.SHF_ALLOC, SH_FLAGS.SHF_EXECINSTR,
54             SH_FLAGS.SHF_MERGE, SH_FLAGS.SHF_STRINGS, SH_FLAGS.SHF_INFO_LINK,
55             SH_FLAGS.SHF_LINK_ORDER, SH_FLAGS.SHF_OS_NONCONFORMING,
56             SH_FLAGS.SHF_GROUP, SH_FLAGS.SHF_TLS, SH_FLAGS.SHF_EXCLUDE):
57         s += _DESCR_SH_FLAGS[flag] if (x & flag) else ''
58     return s
59
60 def describe_symbol_type(x):
61     return _DESCR_ST_INFO_TYPE.get(x, _unknown)
62
63 def describe_symbol_bind(x):
64     return _DESCR_ST_INFO_BIND.get(x, _unknown)
65
66 def describe_symbol_visibility(x):
67     return _DESCR_ST_VISIBILITY.get(x, _unknown)
68
69 def describe_symbol_shndx(x):
70     return _DESCR_ST_SHNDX.get(x, '%3s' % x)
71
72 def describe_reloc_type(x, elffile):
73     arch = elffile.get_machine_arch()
74     if arch == 'x86':
75         return _DESCR_RELOC_TYPE_i386.get(x, _unknown)
76     elif arch == 'x64':
77         return _DESCR_RELOC_TYPE_x64.get(x, _unknown)
78     else:
79         return 'unrecognized: %-7x' % (x & 0xFFFFFFFF)
80
81
82 #-------------------------------------------------------------------------------
83 _unknown = '<unknown>'
84
85     
86 _DESCR_EI_CLASS = dict(
87     ELFCLASSNONE='none',
88     ELFCLASS32='ELF32',
89     ELFCLASS64='ELF64',
90 )
91
92 _DESCR_EI_DATA = dict(
93     ELFDATANONE='none',
94     ELFDATA2LSB="2's complement, little endian",
95     ELFDATA2MSB="2's complement, big endian",
96 )
97
98 _DESCR_EI_OSABI = dict(
99     ELFOSABI_SYSV='UNIX - System V',
100     ELFOSABI_HPUX='UNIX - HP-UX',
101     ELFOSABI_NETBSD='UNIX - NetBSD',
102     ELFOSABI_LINUX='UNIX - Linux',
103     ELFOSABI_HURD='UNIX - GNU/Hurd',
104     ELFOSABI_SOLARIS='UNIX - Solaris',
105     ELFOSABI_AIX='UNIX - AIX',
106     ELFOSABI_IRIX='UNIX - IRIX',
107     ELFOSABI_FREEBSD='UNIX - FreeBSD',
108     ELFOSABI_TRU64='UNIX - TRU64',
109     ELFOSABI_MODESTO='Novell - Modesto',
110     ELFOSABI_OPENBSD='UNIX - OpenBSD',
111     ELFOSABI_OPENVMS='VMS - OpenVMS',
112     ELFOSABI_NSK='HP - Non-Stop Kernel',
113     ELFOSABI_AROS='AROS',
114     ELFOSABI_ARM='ARM',
115     ELFOSABI_STANDALONE='Standalone App',
116 )
117
118 _DESCR_E_TYPE = dict(
119     ET_NONE='NONE (None)',
120     ET_REL='REL (Relocatable file)',
121     ET_EXEC='EXEC (Executable file)',
122     ET_DYN='DYN (Shared object file)',
123     ET_CORE='CORE (Core file)',
124     PROC_SPECIFIC='Processor Specific',
125 )
126
127 _DESCR_E_MACHINE = dict(
128     EM_NONE='None',
129     EM_M32='WE32100',
130     EM_SPARC='Sparc',
131     EM_386='Intel 80386',
132     EM_68K='MC68000',
133     EM_88K='MC88000',
134     EM_860='Intel 80860',
135     EM_MIPS='MIPS R3000',
136     EM_S370='IBM System/370',
137     EM_MIPS_RS4_BE='MIPS 4000 big-endian',
138     EM_IA_64='Intel IA-64',
139     EM_X86_64='Advanced Micro Devices X86-64',
140     EM_AVR='Atmel AVR 8-bit microcontroller',
141     RESERVED='RESERVED',
142 )
143
144 _DESCR_P_TYPE = dict(
145     PT_NULL='NULL',
146     PT_LOAD='LOAD',
147     PT_DYNAMIC='DYNAMIC',
148     PT_INTERP='INTERP',
149     PT_NOTE='NOTE',
150     PT_SHLIB='SHLIB',
151     PT_PHDR='PHDR',
152     PT_GNU_EH_FRAME='GNU_EH_FRAME',
153     PT_GNU_STACK='GNU_STACK',
154     PT_GNU_RELRO='GNU_RELRO',
155 )
156
157 _DESCR_P_FLAGS = {
158     P_FLAGS.PF_X: 'E',
159     P_FLAGS.PF_R: 'R',
160     P_FLAGS.PF_W: 'W',
161 }
162
163 _DESCR_SH_TYPE = dict(
164     SHT_NULL='NULL',
165     SHT_PROGBITS='PROGBITS',
166     SHT_SYMTAB='SYMTAB',
167     SHT_STRTAB='STRTAB',
168     SHT_RELA='RELA',
169     SHT_HASH='HASH',
170     SHT_DYNAMIC='DYNAMIC',
171     SHT_NOTE='NOTE',
172     SHT_NOBITS='NOBITS',
173     SHT_REL='REL',
174     SHT_SHLIB='SHLIB',
175     SHT_DYNSYM='DYNSYM',
176     SHT_INIT_ARRAY='INIT_ARRAY',
177     SHT_FINI_ARRAY='FINI_ARRAY',
178     SHT_PREINIT_ARRAY='PREINIT_ARRAY',
179     SHT_GNU_HASH='GNU_HASH',
180     SHT_GROUP='GROUP',
181     SHT_SYMTAB_SHNDX='SYMTAB SECTION INDICIES',
182     SHT_GNU_verdef='VERDEF',
183     SHT_GNU_verneed='VERNEED',
184     SHT_GNU_versym='VERSYM',
185     SHT_GNU_LIBLIST='GNU_LIBLIST',
186 )
187
188 _DESCR_SH_FLAGS = {
189     SH_FLAGS.SHF_WRITE: 'W',
190     SH_FLAGS.SHF_ALLOC: 'A',
191     SH_FLAGS.SHF_EXECINSTR: 'X',
192     SH_FLAGS.SHF_MERGE: 'M',
193     SH_FLAGS.SHF_STRINGS: 'S',
194     SH_FLAGS.SHF_INFO_LINK: 'I',
195     SH_FLAGS.SHF_LINK_ORDER: 'L',
196     SH_FLAGS.SHF_OS_NONCONFORMING: 'O',
197     SH_FLAGS.SHF_GROUP: 'G',
198     SH_FLAGS.SHF_TLS: 'T',
199     SH_FLAGS.SHF_EXCLUDE: 'E',
200 }
201
202 _DESCR_ST_INFO_TYPE = dict(
203     STT_NOTYPE='NOTYPE',
204     STT_OBJECT='OBJECT',
205     STT_FUNC='FUNC',
206     STT_SECTION='SECTION',
207     STT_FILE='FILE',
208     STT_COMMON='COMMON',
209     STT_TLS='TLS',
210     STT_NUM='NUM',
211     STT_RELC='RELC',
212     STT_SRELC='SRELC',
213 )
214
215 _DESCR_ST_INFO_BIND = dict(
216     STB_LOCAL='LOCAL',
217     STB_GLOBAL='GLOBAL',
218     STB_WEAK='WEAK',
219 )
220
221 _DESCR_ST_VISIBILITY = dict(
222     STV_DEFAULT='DEFAULT',
223     STV_INTERNAL='INTERNAL',
224     STV_HIDDEN='HIDDEN',
225     STD_PROTECTED='PROTECTED',
226 )
227
228 _DESCR_ST_SHNDX = dict(
229     SHN_UNDEF='UND',
230     SHN_ABS='ABS',
231     SHN_COMMON='COM',
232 )
233
234 _DESCR_RELOC_TYPE_i386 = dict(
235         (v, k) for k, v in iteritems(ENUM_RELOC_TYPE_i386))
236
237 _DESCR_RELOC_TYPE_x64 = dict(
238         (v, k) for k, v in iteritems(ENUM_RELOC_TYPE_x64))
239
240