1 /* Generate ELF backend handle.
2 Copyright (C) 2000-2011 Red Hat, Inc.
3 This file is part of Red Hat elfutils.
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.
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.
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.
18 In addition, as a special exception, Red Hat, Inc. gives You the
19 additional right to link the code of Red Hat elfutils with code licensed
20 under any Open Source Initiative certified open source license
21 (http://www.opensource.org/licenses/index.php) which requires the
22 distribution of source code with any binary distribution and to
23 distribute linked combinations of the two. Non-GPL Code permitted under
24 this exception must only link to the code of Red Hat elfutils through
25 those well defined interfaces identified in the file named EXCEPTION
26 found in the source code files (the "Approved Interfaces"). The files
27 of Non-GPL Code may instantiate templates or use macros or inline
28 functions from the Approved Interfaces without causing the resulting
29 work to be covered by the GNU General Public License. Only Red Hat,
30 Inc. may make changes or additions to the list of Approved Interfaces.
31 Red Hat's grant of this exception is conditioned upon your not adding
32 any new exceptions. If you wish to add a new Approved Interface or
33 exception, please contact Red Hat. You must obey the GNU General Public
34 License in all respects for all of the Red Hat elfutils code and other
35 code used in conjunction with Red Hat elfutils except the Non-GPL Code
36 covered by this exception. If you modify this file, you may extend this
37 exception to your version of the file, but you are not obligated to do
38 so. If you do not wish to provide this exception without modification,
39 you must delete this exception statement from your version and license
40 this file solely under the GPL without exception.
42 Red Hat elfutils is an included package of the Open Invention Network.
43 An included package of the Open Invention Network is a package for which
44 Open Invention Network licensees cross-license their patents. No patent
45 license is granted, either expressly or impliedly, by designation as an
46 included package. Should you wish to participate in the Open Invention
47 Network licensing program, please visit www.openinventionnetwork.com
48 <http://www.openinventionnetwork.com>. */
66 /* This table should contain the complete list of architectures as far
67 as the ELF specification is concerned. */
68 /* XXX When things are stable replace the string pointers with char
69 arrays to avoid relocations. */
73 const char *emulation;
81 { "i386", "elf_i386", "i386", 4, EM_386, ELFCLASS32, ELFDATA2LSB },
82 { "ia64", "elf_ia64", "ia64", 4, EM_IA_64, ELFCLASS64, ELFDATA2LSB },
83 { "alpha", "elf_alpha", "alpha", 5, EM_ALPHA, ELFCLASS64, ELFDATA2LSB },
84 { "x86_64", "elf_x86_64", "x86_64", 6, EM_X86_64, ELFCLASS64, ELFDATA2LSB },
85 { "ppc", "elf_ppc", "ppc", 3, EM_PPC, ELFCLASS32, ELFDATA2MSB },
86 { "ppc64", "elf_ppc64", "ppc64", 5, EM_PPC64, ELFCLASS64, ELFDATA2MSB },
87 // XXX class and machine fields need to be filled in for all archs.
88 { "sh", "elf_sh", "sh", 2, EM_SH, 0, 0 },
89 { "arm", "ebl_arm", "arm", 3, EM_ARM, 0, 0 },
90 { "sparc", "elf_sparcv9", "sparc", 5, EM_SPARCV9, 0, 0 },
91 { "sparc", "elf_sparc", "sparc", 5, EM_SPARC, 0, 0 },
92 { "sparc", "elf_sparcv8plus", "sparc", 5, EM_SPARC32PLUS, 0, 0 },
93 { "s390", "ebl_s390", "s390", 4, EM_S390, 0, 0 },
95 { "m32", "elf_m32", "m32", 3, EM_M32, 0, 0 },
96 { "m68k", "elf_m68k", "m68k", 4, EM_68K, 0, 0 },
97 { "m88k", "elf_m88k", "m88k", 4, EM_88K, 0, 0 },
98 { "i860", "elf_i860", "i860", 4, EM_860, 0, 0 },
99 { "s370", "ebl_s370", "s370", 4, EM_S370, 0, 0 },
100 { "parisc", "elf_parisc", "parisc", 6, EM_PARISC, 0, 0 },
101 { "vpp500", "elf_vpp500", "vpp500", 5, EM_VPP500, 0, 0 },
102 { "sparc", "elf_v8plus", "v8plus", 6, EM_SPARC32PLUS, 0, 0 },
103 { "i960", "elf_i960", "i960", 4, EM_960, 0, 0 },
104 { "v800", "ebl_v800", "v800", 4, EM_V800, 0, 0 },
105 { "fr20", "ebl_fr20", "fr20", 4, EM_FR20, 0, 0 },
106 { "rh32", "ebl_rh32", "rh32", 4, EM_RH32, 0, 0 },
107 { "rce", "ebl_rce", "rce", 3, EM_RCE, 0, 0 },
108 { "tricore", "elf_tricore", "tricore", 7, EM_TRICORE, 0, 0 },
109 { "arc", "elf_arc", "arc", 3, EM_ARC, 0, 0 },
110 { "h8", "elf_h8_300", "h8_300", 6, EM_H8_300, 0, 0 },
111 { "h8", "elf_h8_300h", "h8_300h", 6, EM_H8_300H, 0, 0 },
112 { "h8", "elf_h8s", "h8s", 6, EM_H8S, 0, 0 },
113 { "h8", "elf_h8_500", "h8_500", 6, EM_H8_500, 0, 0 },
114 { "coldfire", "elf_coldfire", "coldfire", 8, EM_COLDFIRE, 0, 0 },
115 { "m68k", "elf_68hc12", "68hc12", 6, EM_68HC12, 0, 0 },
116 { "mma", "elf_mma", "mma", 3, EM_MMA, 0, 0 },
117 { "pcp", "elf_pcp", "pcp", 3, EM_PCP, 0, 0 },
118 { "ncpu", "elf_ncpu", "ncpu", 4, EM_NCPU, 0, 0 },
119 { "ndr1", "elf_ndr1", "ndr1", 4, EM_NDR1, 0, 0 },
120 { "starcore", "elf_starcore", "starcore", 8, EM_STARCORE, 0, 0 },
121 { "me16", "elf_me16", "em16", 4, EM_ME16, 0, 0 },
122 { "st100", "elf_st100", "st100", 5, EM_ST100, 0, 0 },
123 { "tinyj", "elf_tinyj", "tinyj", 5, EM_TINYJ, 0, 0 },
124 { "pdsp", "elf_pdsp", "pdsp", 4, EM_PDSP, 0, 0 },
125 { "fx66", "elf_fx66", "fx66", 4, EM_FX66, 0, 0 },
126 { "st9plus", "elf_st9plus", "st9plus", 7, EM_ST9PLUS, 0, 0 },
127 { "st7", "elf_st7", "st7", 3, EM_ST7, 0, 0 },
128 { "m68k", "elf_68hc16", "68hc16", 6, EM_68HC16, 0, 0 },
129 { "m68k", "elf_68hc11", "68hc11", 6, EM_68HC11, 0, 0 },
130 { "m68k", "elf_68hc08", "68hc08", 6, EM_68HC08, 0, 0 },
131 { "m68k", "elf_68hc05", "68hc05", 6, EM_68HC05, 0, 0 },
132 { "svx", "elf_svx", "svx", 3, EM_SVX, 0, 0 },
133 { "st19", "elf_st19", "st19", 4, EM_ST19, 0, 0 },
134 { "vax", "elf_vax", "vax", 3, EM_VAX, 0, 0 },
135 { "cris", "elf_cris", "cris", 4, EM_CRIS, 0, 0 },
136 { "javelin", "elf_javelin", "javelin", 7, EM_JAVELIN, 0, 0 },
137 { "firepath", "elf_firepath", "firepath", 8, EM_FIREPATH, 0, 0 },
138 { "zsp", "elf_zsp", "zsp", 3, EM_ZSP, 0, 0 },
139 { "mmix", "elf_mmix", "mmix", 4, EM_MMIX, 0, 0 },
140 { "hunay", "elf_huany", "huany", 5, EM_HUANY, 0, 0 },
141 { "prism", "elf_prism", "prism", 5, EM_PRISM, 0, 0 },
142 { "avr", "elf_avr", "avr", 3, EM_AVR, 0, 0 },
143 { "fr30", "elf_fr30", "fr30", 4, EM_FR30, 0, 0 },
144 { "dv10", "elf_dv10", "dv10", 4, EM_D10V, 0, 0 },
145 { "dv30", "elf_dv30", "dv30", 4, EM_D30V, 0, 0 },
146 { "v850", "elf_v850", "v850", 4, EM_V850, 0, 0 },
147 { "m32r", "elf_m32r", "m32r", 4, EM_M32R, 0, 0 },
148 { "mn10300", "elf_mn10300", "mn10300", 7, EM_MN10300, 0, 0 },
149 { "mn10200", "elf_mn10200", "mn10200", 7, EM_MN10200, 0, 0 },
150 { "pj", "elf_pj", "pj", 2, EM_PJ, 0, 0 },
151 { "openrisc", "elf_openrisc", "openrisc", 8, EM_OPENRISC, 0, 0 },
152 { "arc", "elf_arc_a5", "arc_a5", 6, EM_ARC_A5, 0, 0 },
153 { "xtensa", "elf_xtensa", "xtensa", 6, EM_XTENSA, 0, 0 },
155 #define nmachines (sizeof (machines) / sizeof (machines[0]))
158 /* Default callbacks. Mostly they just return the error value. */
159 static const char *default_object_type_name (int ignore, char *buf,
161 static const char *default_reloc_type_name (int ignore, char *buf, size_t len);
162 static bool default_reloc_type_check (int ignore);
163 static bool default_reloc_valid_use (Elf *elf, int ignore);
164 static Elf_Type default_reloc_simple_type (Ebl *ebl, int ignore);
165 static bool default_gotpc_reloc_check (Elf *elf, int ignore);
166 static const char *default_segment_type_name (int ignore, char *buf,
168 static const char *default_section_type_name (int ignore, char *buf,
170 static const char *default_section_name (int ignore, int ignore2, char *buf,
172 static const char *default_machine_flag_name (Elf64_Word *ignore);
173 static bool default_machine_flag_check (Elf64_Word flags);
174 static bool default_machine_section_flag_check (GElf_Xword flags);
175 static const char *default_symbol_type_name (int ignore, char *buf,
177 static const char *default_symbol_binding_name (int ignore, char *buf,
179 static const char *default_dynamic_tag_name (int64_t ignore, char *buf,
181 static bool default_dynamic_tag_check (int64_t ignore);
182 static GElf_Word default_sh_flags_combine (GElf_Word flags1, GElf_Word flags2);
183 static const char *default_osabi_name (int ignore, char *buf, size_t len);
184 static void default_destr (struct ebl *ignore);
185 static const char *default_core_note_type_name (uint32_t, char *buf,
187 static const char *default_object_note_type_name (const char *name, uint32_t,
188 char *buf, size_t len);
189 static int default_core_note (const GElf_Nhdr *nhdr, const char *name,
190 GElf_Word *regs_offset, size_t *nregloc,
191 const Ebl_Register_Location **reglocs,
192 size_t *nitems, const Ebl_Core_Item **);
193 static int default_auxv_info (GElf_Xword a_type,
194 const char **name, const char **format);
195 static bool default_object_note (const char *name, uint32_t type,
196 uint32_t descsz, const char *desc);
197 static bool default_debugscn_p (const char *name);
198 static bool default_copy_reloc_p (int reloc);
199 static bool default_none_reloc_p (int reloc);
200 static bool default_relative_reloc_p (int reloc);
201 static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
204 const GElf_Shdr *destshdr);
205 static bool default_check_st_other_bits (unsigned char st_other);
206 static bool default_check_special_section (Ebl *, int,
207 const GElf_Shdr *, const char *);
208 static bool default_bss_plt_p (Elf *elf, GElf_Ehdr *ehdr);
209 static int default_return_value_location (Dwarf_Die *functypedie,
210 const Dwarf_Op **locops);
211 static ssize_t default_register_info (Ebl *ebl,
212 int regno, char *name, size_t namelen,
214 const char **setname,
215 int *bits, int *type);
216 static int default_syscall_abi (Ebl *ebl, int *sp, int *pc,
217 int *callno, int args[6]);
218 static bool default_check_object_attribute (Ebl *ebl, const char *vendor,
219 int tag, uint64_t value,
220 const char **tag_name,
221 const char **value_name);
222 static int default_abi_cfi (Ebl *ebl, Dwarf_CIE *abi_info);
226 fill_defaults (Ebl *result)
228 result->object_type_name = default_object_type_name;
229 result->reloc_type_name = default_reloc_type_name;
230 result->reloc_type_check = default_reloc_type_check;
231 result->reloc_valid_use = default_reloc_valid_use;
232 result->reloc_simple_type = default_reloc_simple_type;
233 result->gotpc_reloc_check = default_gotpc_reloc_check;
234 result->segment_type_name = default_segment_type_name;
235 result->section_type_name = default_section_type_name;
236 result->section_name = default_section_name;
237 result->machine_flag_name = default_machine_flag_name;
238 result->machine_flag_check = default_machine_flag_check;
239 result->machine_section_flag_check = default_machine_section_flag_check;
240 result->check_special_section = default_check_special_section;
241 result->symbol_type_name = default_symbol_type_name;
242 result->symbol_binding_name = default_symbol_binding_name;
243 result->dynamic_tag_name = default_dynamic_tag_name;
244 result->dynamic_tag_check = default_dynamic_tag_check;
245 result->sh_flags_combine = default_sh_flags_combine;
246 result->osabi_name = default_osabi_name;
247 result->core_note_type_name = default_core_note_type_name;
248 result->object_note_type_name = default_object_note_type_name;
249 result->core_note = default_core_note;
250 result->auxv_info = default_auxv_info;
251 result->object_note = default_object_note;
252 result->debugscn_p = default_debugscn_p;
253 result->copy_reloc_p = default_copy_reloc_p;
254 result->none_reloc_p = default_none_reloc_p;
255 result->relative_reloc_p = default_relative_reloc_p;
256 result->check_special_symbol = default_check_special_symbol;
257 result->check_st_other_bits = default_check_st_other_bits;
258 result->bss_plt_p = default_bss_plt_p;
259 result->return_value_location = default_return_value_location;
260 result->register_info = default_register_info;
261 result->syscall_abi = default_syscall_abi;
262 result->check_object_attribute = default_check_object_attribute;
263 result->disasm = NULL;
264 result->abi_cfi = default_abi_cfi;
265 result->destr = default_destr;
266 result->sysvhash_entrysize = sizeof (Elf32_Word);
270 /* Find an appropriate backend for the file associated with ELF. */
272 openbackend (elf, emulation, machine)
274 const char *emulation;
280 /* First allocate the data structure for the result. We do this
281 here since this assures that the structure is always large
283 result = (Ebl *) calloc (1, sizeof (Ebl));
287 // __libebl_seterror (ELF_E_NOMEM);
291 /* Fill in the default callbacks. The initializer for the machine
292 specific module can overwrite the values. */
293 fill_defaults (result);
295 /* XXX Currently all we do is to look at 'e_machine' value in the
296 ELF header. With an internal mapping table from EM_* value to
297 DSO name we try to load the appropriate module to handle this
300 Multiple modules for the same machine type are possible and they
301 will be tried in sequence. The lookup process will only stop
302 when a module which can handle the machine type is found or all
303 available matching modules are tried. */
304 for (cnt = 0; cnt < nmachines; ++cnt)
305 if ((emulation != NULL && strcmp (emulation, machines[cnt].emulation) == 0)
306 || (emulation == NULL && machines[cnt].em == machine))
308 /* Well, we know the emulation name now. */
309 result->emulation = machines[cnt].emulation;
311 /* We access some data structures directly. Make sure the 32 and
312 64 bit variants are laid out the same. */
313 assert (offsetof (Elf32_Ehdr, e_machine)
314 == offsetof (Elf64_Ehdr, e_machine));
315 assert (sizeof (((Elf32_Ehdr *) 0)->e_machine)
316 == sizeof (((Elf64_Ehdr *) 0)->e_machine));
317 assert (offsetof (Elf, state.elf32.ehdr)
318 == offsetof (Elf, state.elf64.ehdr));
320 /* Prefer taking the information from the ELF file. */
323 result->machine = machines[cnt].em;
324 result->class = machines[cnt].class;
325 result->data = machines[cnt].data;
329 result->machine = elf->state.elf32.ehdr->e_machine;
330 result->class = elf->state.elf32.ehdr->e_ident[EI_CLASS];
331 result->data = elf->state.elf32.ehdr->e_ident[EI_DATA];
334 #ifndef LIBEBL_SUBDIR
335 # define LIBEBL_SUBDIR PACKAGE
337 #define ORIGINDIR "$ORIGIN/../$LIB/" LIBEBL_SUBDIR "/"
339 /* Give it a try. At least the machine type matches. First
340 try to load the module. */
342 strcpy (stpcpy (stpcpy (dsoname, ORIGINDIR "libebl_"),
343 machines[cnt].dsoname),
346 void *h = dlopen (dsoname, RTLD_LAZY);
349 strcpy (stpcpy (stpcpy (dsoname, "libebl_"),
350 machines[cnt].dsoname),
352 h = dlopen (dsoname, RTLD_LAZY);
355 /* Try without an explicit path. */
358 /* We managed to load the object. Now see whether the
359 initialization function likes our file. */
360 static const char version[] = MODVERSION;
361 const char *modversion;
363 char symname[machines[cnt].prefix_len + sizeof "_init"];
365 strcpy (mempcpy (symname, machines[cnt].prefix,
366 machines[cnt].prefix_len), "_init");
368 initp = (ebl_bhinit_t) dlsym (h, symname);
370 && (modversion = initp (elf, machine, result, sizeof (Ebl)))
371 && strcmp (version, modversion) == 0)
373 /* We found a module to handle our file. */
374 result->dlhandle = h;
377 /* A few entries are mandatory. */
378 assert (result->name != NULL);
379 assert (result->destr != NULL);
384 /* Not the module we need. */
388 /* We cannot find a DSO but the emulation/machine ID matches.
389 Return that information. */
390 result->dlhandle = NULL;
392 result->name = machines[cnt].prefix;
393 fill_defaults (result);
398 /* Nothing matched. We use only the default callbacks. */
399 result->dlhandle = NULL;
401 result->emulation = "<unknown>";
402 result->name = "<unknown>";
403 fill_defaults (result);
409 /* Find an appropriate backend for the file associated with ELF. */
411 ebl_openbackend (elf)
417 /* Get the ELF header of the object. */
418 ehdr = gelf_getehdr (elf, &ehdr_mem);
422 // __libebl_seterror (elf_errno ());
426 return openbackend (elf, NULL, ehdr->e_machine);
430 /* Find backend without underlying ELF file. */
432 ebl_openbackend_machine (machine)
435 return openbackend (NULL, NULL, machine);
439 /* Find backend with given emulation name. */
441 ebl_openbackend_emulation (const char *emulation)
443 return openbackend (NULL, emulation, EM_NONE);
447 /* Default callbacks. Mostly they just return the error value. */
449 default_object_type_name (int ignore __attribute__ ((unused)),
450 char *buf __attribute__ ((unused)),
451 size_t len __attribute__ ((unused)))
457 default_reloc_type_name (int ignore __attribute__ ((unused)),
458 char *buf __attribute__ ((unused)),
459 size_t len __attribute__ ((unused)))
465 default_reloc_type_check (int ignore __attribute__ ((unused)))
471 default_reloc_valid_use (Elf *elf __attribute__ ((unused)),
472 int ignore __attribute__ ((unused)))
478 default_reloc_simple_type (Ebl *eh __attribute__ ((unused)),
479 int ignore __attribute__ ((unused)))
485 default_gotpc_reloc_check (Elf *elf __attribute__ ((unused)),
486 int ignore __attribute__ ((unused)))
492 default_segment_type_name (int ignore __attribute__ ((unused)),
493 char *buf __attribute__ ((unused)),
494 size_t len __attribute__ ((unused)))
500 default_section_type_name (int ignore __attribute__ ((unused)),
501 char *buf __attribute__ ((unused)),
502 size_t len __attribute__ ((unused)))
508 default_section_name (int ignore __attribute__ ((unused)),
509 int ignore2 __attribute__ ((unused)),
510 char *buf __attribute__ ((unused)),
511 size_t len __attribute__ ((unused)))
517 default_machine_flag_name (Elf64_Word *ignore __attribute__ ((unused)))
523 default_machine_flag_check (Elf64_Word flags __attribute__ ((unused)))
529 default_machine_section_flag_check (GElf_Xword flags)
535 default_check_special_section (Ebl *ebl __attribute__ ((unused)),
536 int ndx __attribute__ ((unused)),
537 const GElf_Shdr *shdr __attribute__ ((unused)),
538 const char *sname __attribute__ ((unused)))
544 default_symbol_type_name (int ignore __attribute__ ((unused)),
545 char *buf __attribute__ ((unused)),
546 size_t len __attribute__ ((unused)))
552 default_symbol_binding_name (int ignore __attribute__ ((unused)),
553 char *buf __attribute__ ((unused)),
554 size_t len __attribute__ ((unused)))
560 default_dynamic_tag_name (int64_t ignore __attribute__ ((unused)),
561 char *buf __attribute__ ((unused)),
562 size_t len __attribute__ ((unused)))
568 default_dynamic_tag_check (int64_t ignore __attribute__ ((unused)))
574 default_sh_flags_combine (GElf_Word flags1, GElf_Word flags2)
576 return SH_FLAGS_COMBINE (flags1, flags2);
580 default_destr (struct ebl *ignore __attribute__ ((unused)))
585 default_osabi_name (int ignore __attribute__ ((unused)),
586 char *buf __attribute__ ((unused)),
587 size_t len __attribute__ ((unused)))
593 default_core_note_type_name (uint32_t ignore __attribute__ ((unused)),
594 char *buf __attribute__ ((unused)),
595 size_t len __attribute__ ((unused)))
601 default_auxv_info (GElf_Xword a_type __attribute__ ((unused)),
602 const char **name __attribute__ ((unused)),
603 const char **format __attribute__ ((unused)))
609 default_core_note (const GElf_Nhdr *nhdr __attribute__ ((unused)),
610 const char *name __attribute__ ((unused)),
611 GElf_Word *ro __attribute__ ((unused)),
612 size_t *nregloc __attribute__ ((unused)),
613 const Ebl_Register_Location **reglocs
614 __attribute__ ((unused)),
615 size_t *nitems __attribute__ ((unused)),
616 const Ebl_Core_Item **items __attribute__ ((unused)))
622 default_object_note_type_name (const char *name __attribute__ ((unused)),
623 uint32_t ignore __attribute__ ((unused)),
624 char *buf __attribute__ ((unused)),
625 size_t len __attribute__ ((unused)))
631 default_object_note (const char *name __attribute__ ((unused)),
632 uint32_t type __attribute__ ((unused)),
633 uint32_t descsz __attribute__ ((unused)),
634 const char *desc __attribute__ ((unused)))
640 default_debugscn_p (const char *name)
642 /* We know by default only about the DWARF debug sections which have
644 static const char *dwarf_scn_names[] =
649 /* GNU DWARF 1 extensions */
652 /* DWARF 1.1 and DWARF 2 */
668 /* GDB DWARF 4 extension */
670 /* SGI/MIPS DWARF 2 extensions */
676 const size_t ndwarf_scn_names = (sizeof (dwarf_scn_names)
677 / sizeof (dwarf_scn_names[0]));
678 for (size_t cnt = 0; cnt < ndwarf_scn_names; ++cnt)
679 if (strcmp (name, dwarf_scn_names[cnt]) == 0)
686 default_copy_reloc_p (int reloc __attribute__ ((unused)))
690 strong_alias (default_copy_reloc_p, default_none_reloc_p)
691 strong_alias (default_copy_reloc_p, default_relative_reloc_p)
694 default_check_special_symbol (Elf *elf __attribute__ ((unused)),
695 GElf_Ehdr *ehdr __attribute__ ((unused)),
696 const GElf_Sym *sym __attribute__ ((unused)),
697 const char *name __attribute__ ((unused)),
698 const GElf_Shdr *destshdr __attribute__ ((unused)))
704 default_check_st_other_bits (unsigned char st_other __attribute__ ((unused)))
711 default_bss_plt_p (Elf *elf __attribute__ ((unused)),
712 GElf_Ehdr *ehdr __attribute__ ((unused)))
718 default_return_value_location (Dwarf_Die *functypedie __attribute__ ((unused)),
719 const Dwarf_Op **locops __attribute__ ((unused)))
725 default_register_info (Ebl *ebl __attribute__ ((unused)),
726 int regno, char *name, size_t namelen,
728 const char **setname,
729 int *bits, int *type)
738 return snprintf (name, namelen, "reg%d", regno);
742 default_syscall_abi (Ebl *ebl __attribute__ ((unused)),
743 int *sp, int *pc, int *callno, int args[6])
745 *sp = *pc = *callno = -1;
756 default_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
757 const char *vendor __attribute__ ((unused)),
758 int tag __attribute__ ((unused)),
759 uint64_t value __attribute__ ((unused)),
760 const char **tag_name, const char **value_name)
768 default_abi_cfi (Ebl *ebl __attribute__ ((unused)),
769 Dwarf_CIE *abi_info __attribute__ ((unused)))