Home | History | Annotate | Download | only in libebl
      1 /* Generate ELF backend handle.
      2    Copyright (C) 2000-2014 Red Hat, Inc.
      3    This file is part of elfutils.
      4 
      5    This file is free software; you can redistribute it and/or modify
      6    it under the terms of either
      7 
      8      * the GNU Lesser General Public License as published by the Free
      9        Software Foundation; either version 3 of the License, or (at
     10        your option) any later version
     11 
     12    or
     13 
     14      * the GNU General Public License as published by the Free
     15        Software Foundation; either version 2 of the License, or (at
     16        your option) any later version
     17 
     18    or both in parallel, as here.
     19 
     20    elfutils is distributed in the hope that it will be useful, but
     21    WITHOUT ANY WARRANTY; without even the implied warranty of
     22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     23    General Public License for more details.
     24 
     25    You should have received copies of the GNU General Public License and
     26    the GNU Lesser General Public License along with this program.  If
     27    not, see <http://www.gnu.org/licenses/>.  */
     28 
     29 #ifdef HAVE_CONFIG_H
     30 # include <config.h>
     31 #endif
     32 
     33 #include <assert.h>
     34 #include <dlfcn.h>
     35 #include <error.h>
     36 #include <libelfP.h>
     37 #include <dwarf.h>
     38 #include <stdlib.h>
     39 #include <string.h>
     40 #include <stdio.h>
     41 
     42 #include <libeblP.h>
     43 
     44 
     45 /* This table should contain the complete list of architectures as far
     46    as the ELF specification is concerned.  */
     47 /* XXX When things are stable replace the string pointers with char
     48    arrays to avoid relocations.  */
     49 static const struct
     50 {
     51   const char *dsoname;
     52   const char *emulation;
     53   const char *prefix;
     54   int prefix_len;
     55   int em;
     56   int class;
     57   int data;
     58 } machines[] =
     59 {
     60   { "i386", "elf_i386", "i386", 4, EM_386, ELFCLASS32, ELFDATA2LSB },
     61   { "ia64", "elf_ia64", "ia64", 4, EM_IA_64, ELFCLASS64, ELFDATA2LSB },
     62   { "alpha", "elf_alpha", "alpha", 5, EM_ALPHA, ELFCLASS64, ELFDATA2LSB },
     63   { "x86_64", "elf_x86_64", "x86_64", 6, EM_X86_64, ELFCLASS64, ELFDATA2LSB },
     64   { "ppc", "elf_ppc", "ppc", 3, EM_PPC, ELFCLASS32, ELFDATA2MSB },
     65   { "ppc64", "elf_ppc64", "ppc64", 5, EM_PPC64, ELFCLASS64, ELFDATA2MSB },
     66   { "tilegx", "elf_tilegx", "tilegx", 6, EM_TILEGX, ELFCLASS64, ELFDATA2LSB },
     67   // XXX class and machine fields need to be filled in for all archs.
     68   { "sh", "elf_sh", "sh", 2, EM_SH, 0, 0 },
     69   { "arm", "ebl_arm", "arm", 3, EM_ARM, 0, 0 },
     70   { "sparc", "elf_sparcv9", "sparc", 5, EM_SPARCV9, 0, 0 },
     71   { "sparc", "elf_sparc", "sparc", 5, EM_SPARC, 0, 0 },
     72   { "sparc", "elf_sparcv8plus", "sparc", 5, EM_SPARC32PLUS, 0, 0 },
     73   { "s390", "ebl_s390", "s390", 4, EM_S390, 0, 0 },
     74 
     75   { "m32", "elf_m32", "m32", 3, EM_M32, 0, 0 },
     76   { "m68k", "elf_m68k", "m68k", 4, EM_68K, 0, 0 },
     77   { "m88k", "elf_m88k", "m88k", 4, EM_88K, 0, 0 },
     78   { "i860", "elf_i860", "i860", 4, EM_860, 0, 0 },
     79   { "s370", "ebl_s370", "s370", 4, EM_S370, 0, 0 },
     80   { "parisc", "elf_parisc", "parisc", 6, EM_PARISC, 0, 0 },
     81   { "vpp500", "elf_vpp500", "vpp500", 5, EM_VPP500, 0, 0 },
     82   { "sparc", "elf_v8plus", "v8plus", 6, EM_SPARC32PLUS, 0, 0 },
     83   { "i960", "elf_i960", "i960", 4, EM_960, 0, 0 },
     84   { "v800", "ebl_v800", "v800", 4, EM_V800, 0, 0 },
     85   { "fr20", "ebl_fr20", "fr20", 4, EM_FR20, 0, 0 },
     86   { "rh32", "ebl_rh32", "rh32", 4, EM_RH32, 0, 0 },
     87   { "rce", "ebl_rce", "rce", 3, EM_RCE, 0, 0 },
     88   { "tricore", "elf_tricore", "tricore", 7, EM_TRICORE, 0, 0 },
     89   { "arc", "elf_arc", "arc", 3, EM_ARC, 0, 0 },
     90   { "h8", "elf_h8_300", "h8_300", 6, EM_H8_300, 0, 0 },
     91   { "h8", "elf_h8_300h", "h8_300h", 6, EM_H8_300H, 0, 0 },
     92   { "h8", "elf_h8s", "h8s", 6, EM_H8S, 0, 0 },
     93   { "h8", "elf_h8_500", "h8_500", 6, EM_H8_500, 0, 0 },
     94   { "coldfire", "elf_coldfire", "coldfire", 8, EM_COLDFIRE, 0, 0 },
     95   { "m68k", "elf_68hc12", "68hc12", 6, EM_68HC12, 0, 0 },
     96   { "mma", "elf_mma", "mma", 3, EM_MMA, 0, 0 },
     97   { "pcp", "elf_pcp", "pcp", 3, EM_PCP, 0, 0 },
     98   { "ncpu", "elf_ncpu", "ncpu", 4, EM_NCPU, 0, 0 },
     99   { "ndr1", "elf_ndr1", "ndr1", 4, EM_NDR1, 0, 0 },
    100   { "starcore", "elf_starcore", "starcore", 8, EM_STARCORE, 0, 0 },
    101   { "me16", "elf_me16", "em16", 4, EM_ME16, 0, 0 },
    102   { "st100", "elf_st100", "st100", 5, EM_ST100, 0, 0 },
    103   { "tinyj", "elf_tinyj", "tinyj", 5, EM_TINYJ, 0, 0 },
    104   { "pdsp", "elf_pdsp", "pdsp", 4, EM_PDSP, 0, 0 },
    105   { "fx66", "elf_fx66", "fx66", 4, EM_FX66, 0, 0 },
    106   { "st9plus", "elf_st9plus", "st9plus", 7, EM_ST9PLUS, 0, 0 },
    107   { "st7", "elf_st7", "st7", 3, EM_ST7, 0, 0 },
    108   { "m68k", "elf_68hc16", "68hc16", 6, EM_68HC16, 0, 0 },
    109   { "m68k", "elf_68hc11", "68hc11", 6, EM_68HC11, 0, 0 },
    110   { "m68k", "elf_68hc08", "68hc08", 6, EM_68HC08, 0, 0 },
    111   { "m68k", "elf_68hc05", "68hc05", 6, EM_68HC05, 0, 0 },
    112   { "svx", "elf_svx", "svx", 3, EM_SVX, 0, 0 },
    113   { "st19", "elf_st19", "st19", 4, EM_ST19, 0, 0 },
    114   { "vax", "elf_vax", "vax", 3, EM_VAX, 0, 0 },
    115   { "cris", "elf_cris", "cris", 4, EM_CRIS, 0, 0 },
    116   { "javelin", "elf_javelin", "javelin", 7, EM_JAVELIN, 0, 0 },
    117   { "firepath", "elf_firepath", "firepath", 8, EM_FIREPATH, 0, 0 },
    118   { "zsp", "elf_zsp", "zsp", 3, EM_ZSP, 0, 0 },
    119   { "mmix", "elf_mmix", "mmix", 4, EM_MMIX, 0, 0 },
    120   { "hunay", "elf_huany", "huany", 5, EM_HUANY, 0, 0 },
    121   { "prism", "elf_prism", "prism", 5, EM_PRISM, 0, 0 },
    122   { "avr", "elf_avr", "avr", 3, EM_AVR, 0, 0 },
    123   { "fr30", "elf_fr30", "fr30", 4, EM_FR30, 0, 0 },
    124   { "dv10", "elf_dv10", "dv10", 4, EM_D10V, 0, 0 },
    125   { "dv30", "elf_dv30", "dv30", 4, EM_D30V, 0, 0 },
    126   { "v850", "elf_v850", "v850", 4, EM_V850, 0, 0 },
    127   { "m32r", "elf_m32r", "m32r", 4, EM_M32R, 0, 0 },
    128   { "mn10300", "elf_mn10300", "mn10300", 7, EM_MN10300, 0, 0 },
    129   { "mn10200", "elf_mn10200", "mn10200", 7, EM_MN10200, 0, 0 },
    130   { "pj", "elf_pj", "pj", 2, EM_PJ, 0, 0 },
    131   { "openrisc", "elf_openrisc", "openrisc", 8, EM_OPENRISC, 0, 0 },
    132   { "arc", "elf_arc_a5", "arc_a5", 6, EM_ARC_A5, 0, 0 },
    133   { "xtensa", "elf_xtensa", "xtensa", 6, EM_XTENSA, 0, 0 },
    134   { "aarch64", "elf_aarch64", "aarch64", 7, EM_AARCH64, ELFCLASS64, 0 },
    135 };
    136 #define nmachines (sizeof (machines) / sizeof (machines[0]))
    137 
    138 
    139 /* Default callbacks.  Mostly they just return the error value.  */
    140 static const char *default_object_type_name (int ignore, char *buf,
    141 					     size_t len);
    142 static const char *default_reloc_type_name (int ignore, char *buf, size_t len);
    143 static bool default_reloc_type_check (int ignore);
    144 static bool default_reloc_valid_use (Elf *elf, int ignore);
    145 static Elf_Type default_reloc_simple_type (Ebl *ebl, int ignore);
    146 static bool default_gotpc_reloc_check (Elf *elf, int ignore);
    147 static const char *default_segment_type_name (int ignore, char *buf,
    148 					      size_t len);
    149 static const char *default_section_type_name (int ignore, char *buf,
    150 					      size_t len);
    151 static const char *default_section_name (int ignore, int ignore2, char *buf,
    152 					 size_t len);
    153 static const char *default_machine_flag_name (Elf64_Word *ignore);
    154 static bool default_machine_flag_check (Elf64_Word flags);
    155 static bool default_machine_section_flag_check (GElf_Xword flags);
    156 static const char *default_symbol_type_name (int ignore, char *buf,
    157 					     size_t len);
    158 static const char *default_symbol_binding_name (int ignore, char *buf,
    159 						size_t len);
    160 static const char *default_dynamic_tag_name (int64_t ignore, char *buf,
    161 					     size_t len);
    162 static bool default_dynamic_tag_check (int64_t ignore);
    163 static GElf_Word default_sh_flags_combine (GElf_Word flags1, GElf_Word flags2);
    164 static const char *default_osabi_name (int ignore, char *buf, size_t len);
    165 static void default_destr (struct ebl *ignore);
    166 static const char *default_core_note_type_name (uint32_t, char *buf,
    167 						size_t len);
    168 static const char *default_object_note_type_name (const char *name, uint32_t,
    169 						  char *buf, size_t len);
    170 static int default_core_note (const GElf_Nhdr *nhdr, const char *name,
    171 			      GElf_Word *regs_offset, size_t *nregloc,
    172 			      const Ebl_Register_Location **reglocs,
    173 			      size_t *nitems, const Ebl_Core_Item **);
    174 static int default_auxv_info (GElf_Xword a_type,
    175 			      const char **name, const char **format);
    176 static bool default_object_note (const char *name, uint32_t type,
    177 				 uint32_t descsz, const char *desc);
    178 static bool default_debugscn_p (const char *name);
    179 static bool default_copy_reloc_p (int reloc);
    180 static bool default_none_reloc_p (int reloc);
    181 static bool default_relative_reloc_p (int reloc);
    182 static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
    183 					  const GElf_Sym *sym,
    184 					  const char *name,
    185 					  const GElf_Shdr *destshdr);
    186 static bool default_check_st_other_bits (unsigned char st_other);
    187 static bool default_check_special_section (Ebl *, int,
    188 					   const GElf_Shdr *, const char *);
    189 static bool default_bss_plt_p (Elf *elf);
    190 static int default_return_value_location (Dwarf_Die *functypedie,
    191 					  const Dwarf_Op **locops);
    192 static ssize_t default_register_info (Ebl *ebl,
    193 				      int regno, char *name, size_t namelen,
    194 				      const char **prefix,
    195 				      const char **setname,
    196 				      int *bits, int *type);
    197 static int default_syscall_abi (Ebl *ebl, int *sp, int *pc,
    198 				int *callno, int args[6]);
    199 static bool default_check_object_attribute (Ebl *ebl, const char *vendor,
    200 					    int tag, uint64_t value,
    201 					    const char **tag_name,
    202 					    const char **value_name);
    203 static bool default_check_reloc_target_type (Ebl *ebl, Elf64_Word sh_type);
    204 static int default_abi_cfi (Ebl *ebl, Dwarf_CIE *abi_info);
    205 
    206 
    207 static void
    208 fill_defaults (Ebl *result)
    209 {
    210   result->object_type_name = default_object_type_name;
    211   result->reloc_type_name = default_reloc_type_name;
    212   result->reloc_type_check = default_reloc_type_check;
    213   result->reloc_valid_use = default_reloc_valid_use;
    214   result->reloc_simple_type = default_reloc_simple_type;
    215   result->gotpc_reloc_check = default_gotpc_reloc_check;
    216   result->segment_type_name = default_segment_type_name;
    217   result->section_type_name = default_section_type_name;
    218   result->section_name = default_section_name;
    219   result->machine_flag_name = default_machine_flag_name;
    220   result->machine_flag_check = default_machine_flag_check;
    221   result->machine_section_flag_check = default_machine_section_flag_check;
    222   result->check_special_section = default_check_special_section;
    223   result->symbol_type_name = default_symbol_type_name;
    224   result->symbol_binding_name = default_symbol_binding_name;
    225   result->dynamic_tag_name = default_dynamic_tag_name;
    226   result->dynamic_tag_check = default_dynamic_tag_check;
    227   result->sh_flags_combine = default_sh_flags_combine;
    228   result->osabi_name = default_osabi_name;
    229   result->core_note_type_name = default_core_note_type_name;
    230   result->object_note_type_name = default_object_note_type_name;
    231   result->core_note = default_core_note;
    232   result->auxv_info = default_auxv_info;
    233   result->object_note = default_object_note;
    234   result->debugscn_p = default_debugscn_p;
    235   result->copy_reloc_p = default_copy_reloc_p;
    236   result->none_reloc_p = default_none_reloc_p;
    237   result->relative_reloc_p = default_relative_reloc_p;
    238   result->check_special_symbol = default_check_special_symbol;
    239   result->check_st_other_bits = default_check_st_other_bits;
    240   result->bss_plt_p = default_bss_plt_p;
    241   result->return_value_location = default_return_value_location;
    242   result->register_info = default_register_info;
    243   result->syscall_abi = default_syscall_abi;
    244   result->check_object_attribute = default_check_object_attribute;
    245   result->check_reloc_target_type = default_check_reloc_target_type;
    246   result->disasm = NULL;
    247   result->abi_cfi = default_abi_cfi;
    248   result->destr = default_destr;
    249   result->sysvhash_entrysize = sizeof (Elf32_Word);
    250 }
    251 
    252 
    253 /* Find an appropriate backend for the file associated with ELF.  */
    254 static Ebl *
    255 openbackend (elf, emulation, machine)
    256      Elf *elf;
    257      const char *emulation;
    258      GElf_Half machine;
    259 {
    260   Ebl *result;
    261   size_t cnt;
    262 
    263   /* First allocate the data structure for the result.  We do this
    264      here since this assures that the structure is always large
    265      enough.  */
    266   result = (Ebl *) calloc (1, sizeof (Ebl));
    267   if (result == NULL)
    268     {
    269       // XXX uncomment
    270       // __libebl_seterror (ELF_E_NOMEM);
    271       return NULL;
    272     }
    273 
    274   /* Fill in the default callbacks.  The initializer for the machine
    275      specific module can overwrite the values.  */
    276   fill_defaults (result);
    277 
    278   /* XXX Currently all we do is to look at 'e_machine' value in the
    279      ELF header.  With an internal mapping table from EM_* value to
    280      DSO name we try to load the appropriate module to handle this
    281      binary type.
    282 
    283      Multiple modules for the same machine type are possible and they
    284      will be tried in sequence.  The lookup process will only stop
    285      when a module which can handle the machine type is found or all
    286      available matching modules are tried.  */
    287   for (cnt = 0; cnt < nmachines; ++cnt)
    288     if ((emulation != NULL && strcmp (emulation, machines[cnt].emulation) == 0)
    289 	|| (emulation == NULL && machines[cnt].em == machine))
    290       {
    291 	/* Well, we know the emulation name now.  */
    292 	result->emulation = machines[cnt].emulation;
    293 
    294 	/* We access some data structures directly.  Make sure the 32 and
    295 	   64 bit variants are laid out the same.  */
    296 	assert (offsetof (Elf32_Ehdr, e_machine)
    297 		== offsetof (Elf64_Ehdr, e_machine));
    298 	assert (sizeof (((Elf32_Ehdr *) 0)->e_machine)
    299 		== sizeof (((Elf64_Ehdr *) 0)->e_machine));
    300 	assert (offsetof (Elf, state.elf32.ehdr)
    301 		== offsetof (Elf, state.elf64.ehdr));
    302 
    303 	/* Prefer taking the information from the ELF file.  */
    304 	if (elf == NULL)
    305 	  {
    306 	    result->machine = machines[cnt].em;
    307 	    result->class = machines[cnt].class;
    308 	    result->data = machines[cnt].data;
    309 	  }
    310 	else
    311 	  {
    312 	    result->machine = elf->state.elf32.ehdr->e_machine;
    313 	    result->class = elf->state.elf32.ehdr->e_ident[EI_CLASS];
    314 	    result->data = elf->state.elf32.ehdr->e_ident[EI_DATA];
    315 	  }
    316 
    317 #ifndef LIBEBL_SUBDIR
    318 # define LIBEBL_SUBDIR PACKAGE
    319 #endif
    320 #define ORIGINDIR "$ORIGIN/../$LIB/" LIBEBL_SUBDIR "/"
    321 
    322 	/* Give it a try.  At least the machine type matches.  First
    323            try to load the module.  */
    324 	char dsoname[100];
    325 	strcpy (stpcpy (stpcpy (dsoname, ORIGINDIR "libebl_"),
    326 			machines[cnt].dsoname),
    327 		".so");
    328 
    329 	void *h = dlopen (dsoname, RTLD_LAZY);
    330 	if (h == NULL)
    331 	  {
    332 	    strcpy (stpcpy (stpcpy (dsoname, "libebl_"),
    333 			    machines[cnt].dsoname),
    334 		    ".so");
    335 	    h = dlopen (dsoname, RTLD_LAZY);
    336 	  }
    337 
    338 	  /* Try without an explicit path.  */
    339 	if (h != NULL)
    340 	  {
    341 	    /* We managed to load the object.  Now see whether the
    342 	       initialization function likes our file.  */
    343 	    static const char version[] = MODVERSION;
    344 	    const char *modversion;
    345 	    ebl_bhinit_t initp;
    346 	    char symname[machines[cnt].prefix_len + sizeof "_init"];
    347 
    348 	    strcpy (mempcpy (symname, machines[cnt].prefix,
    349 			     machines[cnt].prefix_len), "_init");
    350 
    351 	    initp = (ebl_bhinit_t) dlsym (h, symname);
    352 	    if (initp != NULL
    353 		&& (modversion = initp (elf, machine, result, sizeof (Ebl)))
    354 		&& strcmp (version, modversion) == 0)
    355 	      {
    356 		/* We found a module to handle our file.  */
    357 		result->dlhandle = h;
    358 		result->elf = elf;
    359 
    360 		/* A few entries are mandatory.  */
    361 		assert (result->name != NULL);
    362 		assert (result->destr != NULL);
    363 
    364 		return result;
    365 	      }
    366 
    367 	    /* Not the module we need.  */
    368 	    (void) dlclose (h);
    369 	  }
    370 
    371 	/* We cannot find a DSO but the emulation/machine ID matches.
    372 	   Return that information.  */
    373 	result->dlhandle = NULL;
    374 	result->elf = elf;
    375 	result->name = machines[cnt].prefix;
    376 	fill_defaults (result);
    377 
    378 	return result;
    379       }
    380 
    381   /* Nothing matched.  We use only the default callbacks.   */
    382   result->dlhandle = NULL;
    383   result->elf = elf;
    384   result->emulation = "<unknown>";
    385   result->name = "<unknown>";
    386   fill_defaults (result);
    387 
    388   return result;
    389 }
    390 
    391 
    392 /* Find an appropriate backend for the file associated with ELF.  */
    393 Ebl *
    394 ebl_openbackend (elf)
    395      Elf *elf;
    396 {
    397   GElf_Ehdr ehdr_mem;
    398   GElf_Ehdr *ehdr;
    399 
    400   /* Get the ELF header of the object.  */
    401   ehdr = gelf_getehdr (elf, &ehdr_mem);
    402   if (ehdr == NULL)
    403     {
    404       // XXX uncomment
    405       // __libebl_seterror (elf_errno ());
    406       return NULL;
    407     }
    408 
    409   return openbackend (elf, NULL, ehdr->e_machine);
    410 }
    411 
    412 
    413 /* Find backend without underlying ELF file.  */
    414 Ebl *
    415 ebl_openbackend_machine (machine)
    416      GElf_Half machine;
    417 {
    418   return openbackend (NULL, NULL, machine);
    419 }
    420 
    421 
    422 /* Find backend with given emulation name.  */
    423 Ebl *
    424 ebl_openbackend_emulation (const char *emulation)
    425 {
    426   return openbackend (NULL, emulation, EM_NONE);
    427 }
    428 
    429 
    430 /* Default callbacks.  Mostly they just return the error value.  */
    431 static const char *
    432 default_object_type_name (int ignore __attribute__ ((unused)),
    433 			  char *buf __attribute__ ((unused)),
    434 			  size_t len __attribute__ ((unused)))
    435 {
    436   return NULL;
    437 }
    438 
    439 static const char *
    440 default_reloc_type_name (int ignore __attribute__ ((unused)),
    441 			 char *buf __attribute__ ((unused)),
    442 			 size_t len __attribute__ ((unused)))
    443 {
    444   return NULL;
    445 }
    446 
    447 static bool
    448 default_reloc_type_check (int ignore __attribute__ ((unused)))
    449 {
    450   return false;
    451 }
    452 
    453 static bool
    454 default_reloc_valid_use (Elf *elf __attribute__ ((unused)),
    455 			 int ignore __attribute__ ((unused)))
    456 {
    457   return false;
    458 }
    459 
    460 static Elf_Type
    461 default_reloc_simple_type (Ebl *eh __attribute__ ((unused)),
    462 			   int ignore __attribute__ ((unused)))
    463 {
    464   return ELF_T_NUM;
    465 }
    466 
    467 static bool
    468 default_gotpc_reloc_check (Elf *elf __attribute__ ((unused)),
    469 			   int ignore __attribute__ ((unused)))
    470 {
    471   return false;
    472 }
    473 
    474 static const char *
    475 default_segment_type_name (int ignore __attribute__ ((unused)),
    476 			   char *buf __attribute__ ((unused)),
    477 			   size_t len __attribute__ ((unused)))
    478 {
    479   return NULL;
    480 }
    481 
    482 static const char *
    483 default_section_type_name (int ignore __attribute__ ((unused)),
    484 			   char *buf __attribute__ ((unused)),
    485 			   size_t len __attribute__ ((unused)))
    486 {
    487   return NULL;
    488 }
    489 
    490 static const char *
    491 default_section_name (int ignore __attribute__ ((unused)),
    492 		      int ignore2 __attribute__ ((unused)),
    493 		      char *buf __attribute__ ((unused)),
    494 		      size_t len __attribute__ ((unused)))
    495 {
    496   return NULL;
    497 }
    498 
    499 static const char *
    500 default_machine_flag_name (Elf64_Word *ignore __attribute__ ((unused)))
    501 {
    502   return NULL;
    503 }
    504 
    505 static bool
    506 default_machine_flag_check (Elf64_Word flags __attribute__ ((unused)))
    507 {
    508   return flags == 0;
    509 }
    510 
    511 static bool
    512 default_machine_section_flag_check (GElf_Xword flags)
    513 {
    514   return flags == 0;
    515 }
    516 
    517 static bool
    518 default_check_special_section (Ebl *ebl __attribute__ ((unused)),
    519 			       int ndx __attribute__ ((unused)),
    520 			       const GElf_Shdr *shdr __attribute__ ((unused)),
    521 			       const char *sname __attribute__ ((unused)))
    522 {
    523   return false;
    524 }
    525 
    526 static const char *
    527 default_symbol_type_name (int ignore __attribute__ ((unused)),
    528 			  char *buf __attribute__ ((unused)),
    529 			  size_t len __attribute__ ((unused)))
    530 {
    531   return NULL;
    532 }
    533 
    534 static const char *
    535 default_symbol_binding_name (int ignore __attribute__ ((unused)),
    536 			     char *buf __attribute__ ((unused)),
    537 			     size_t len __attribute__ ((unused)))
    538 {
    539   return NULL;
    540 }
    541 
    542 static const char *
    543 default_dynamic_tag_name (int64_t ignore __attribute__ ((unused)),
    544 			  char *buf __attribute__ ((unused)),
    545 			  size_t len __attribute__ ((unused)))
    546 {
    547   return NULL;
    548 }
    549 
    550 static bool
    551 default_dynamic_tag_check (int64_t ignore __attribute__ ((unused)))
    552 {
    553   return false;
    554 }
    555 
    556 static GElf_Word
    557 default_sh_flags_combine (GElf_Word flags1, GElf_Word flags2)
    558 {
    559   return SH_FLAGS_COMBINE (flags1, flags2);
    560 }
    561 
    562 static void
    563 default_destr (struct ebl *ignore __attribute__ ((unused)))
    564 {
    565 }
    566 
    567 static const char *
    568 default_osabi_name (int ignore __attribute__ ((unused)),
    569 		    char *buf __attribute__ ((unused)),
    570 		    size_t len __attribute__ ((unused)))
    571 {
    572   return NULL;
    573 }
    574 
    575 static const char *
    576 default_core_note_type_name (uint32_t ignore __attribute__ ((unused)),
    577 			     char *buf __attribute__ ((unused)),
    578 			     size_t len __attribute__ ((unused)))
    579 {
    580   return NULL;
    581 }
    582 
    583 static int
    584 default_auxv_info (GElf_Xword a_type __attribute__ ((unused)),
    585 		   const char **name __attribute__ ((unused)),
    586 		   const char **format __attribute__ ((unused)))
    587 {
    588   return 0;
    589 }
    590 
    591 static int
    592 default_core_note (const GElf_Nhdr *nhdr __attribute__ ((unused)),
    593 		   const char *name __attribute__ ((unused)),
    594 		   GElf_Word *ro __attribute__ ((unused)),
    595 		   size_t *nregloc  __attribute__ ((unused)),
    596 		   const Ebl_Register_Location **reglocs
    597 		   __attribute__ ((unused)),
    598 		   size_t *nitems __attribute__ ((unused)),
    599 		   const Ebl_Core_Item **items __attribute__ ((unused)))
    600 {
    601   return 0;
    602 }
    603 
    604 static const char *
    605 default_object_note_type_name (const char *name __attribute__ ((unused)),
    606 			       uint32_t ignore __attribute__ ((unused)),
    607 			       char *buf __attribute__ ((unused)),
    608 			       size_t len __attribute__ ((unused)))
    609 {
    610   return NULL;
    611 }
    612 
    613 static bool
    614 default_object_note (const char *name __attribute__ ((unused)),
    615 		     uint32_t type __attribute__ ((unused)),
    616 		     uint32_t descsz __attribute__ ((unused)),
    617 		     const char *desc __attribute__ ((unused)))
    618 {
    619   return NULL;
    620 }
    621 
    622 static bool
    623 default_debugscn_p (const char *name)
    624 {
    625   /* We know by default only about the DWARF debug sections which have
    626      fixed names.  */
    627   static const char *dwarf_scn_names[] =
    628     {
    629       /* DWARF 1 */
    630       ".debug",
    631       ".line",
    632       /* GNU DWARF 1 extensions */
    633       ".debug_srcinfo",
    634       ".debug_sfnames",
    635       /* DWARF 1.1 and DWARF 2 */
    636       ".debug_aranges",
    637       ".debug_pubnames",
    638       /* DWARF 2 */
    639       ".debug_info",
    640       ".debug_abbrev",
    641       ".debug_line",
    642       ".debug_frame",
    643       ".debug_str",
    644       ".debug_loc",
    645       ".debug_macinfo",
    646       /* DWARF 3 */
    647       ".debug_ranges",
    648       ".debug_pubtypes",
    649       /* DWARF 4 */
    650       ".debug_types",
    651       /* GDB DWARF 4 extension */
    652       ".gdb_index",
    653       /* GNU/DWARF 5 extension/proposal */
    654       ".debug_macro",
    655       /* SGI/MIPS DWARF 2 extensions */
    656       ".debug_weaknames",
    657       ".debug_funcnames",
    658       ".debug_typenames",
    659       ".debug_varnames"
    660     };
    661   const size_t ndwarf_scn_names = (sizeof (dwarf_scn_names)
    662 				   / sizeof (dwarf_scn_names[0]));
    663   for (size_t cnt = 0; cnt < ndwarf_scn_names; ++cnt)
    664     if (strcmp (name, dwarf_scn_names[cnt]) == 0)
    665       return true;
    666 
    667   return false;
    668 }
    669 
    670 static bool
    671 default_copy_reloc_p (int reloc __attribute__ ((unused)))
    672 {
    673   return false;
    674 }
    675 strong_alias (default_copy_reloc_p, default_none_reloc_p)
    676 strong_alias (default_copy_reloc_p, default_relative_reloc_p)
    677 
    678 static bool
    679 default_check_special_symbol (Elf *elf __attribute__ ((unused)),
    680 			      GElf_Ehdr *ehdr __attribute__ ((unused)),
    681 			      const GElf_Sym *sym __attribute__ ((unused)),
    682 			      const char *name __attribute__ ((unused)),
    683 			      const GElf_Shdr *destshdr __attribute__ ((unused)))
    684 {
    685   return false;
    686 }
    687 
    688 static bool
    689 default_check_st_other_bits (unsigned char st_other __attribute__ ((unused)))
    690 {
    691   return false;
    692 }
    693 
    694 
    695 static bool
    696 default_bss_plt_p (Elf *elf __attribute__ ((unused)))
    697 {
    698   return false;
    699 }
    700 
    701 static int
    702 default_return_value_location (Dwarf_Die *functypedie __attribute__ ((unused)),
    703 			       const Dwarf_Op **locops __attribute__ ((unused)))
    704 {
    705   return -2;
    706 }
    707 
    708 static ssize_t
    709 default_register_info (Ebl *ebl __attribute__ ((unused)),
    710 		       int regno, char *name, size_t namelen,
    711 		       const char **prefix,
    712 		       const char **setname,
    713 		       int *bits, int *type)
    714 {
    715   if (name == NULL)
    716     return 0;
    717 
    718   *setname = "???";
    719   *prefix = "";
    720   *bits = -1;
    721   *type = DW_ATE_void;
    722   return snprintf (name, namelen, "reg%d", regno);
    723 }
    724 
    725 static int
    726 default_syscall_abi (Ebl *ebl __attribute__ ((unused)),
    727 		     int *sp, int *pc, int *callno, int args[6])
    728 {
    729   *sp = *pc = *callno = -1;
    730   args[0] = -1;
    731   args[1] = -1;
    732   args[2] = -1;
    733   args[3] = -1;
    734   args[4] = -1;
    735   args[5] = -1;
    736   return -1;
    737 }
    738 
    739 static bool
    740 default_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
    741 				const char *vendor  __attribute__ ((unused)),
    742 				int tag __attribute__ ((unused)),
    743 				uint64_t value __attribute__ ((unused)),
    744 				const char **tag_name, const char **value_name)
    745 {
    746   *tag_name = NULL;
    747   *value_name = NULL;
    748   return false;
    749 }
    750 
    751 static bool
    752 default_check_reloc_target_type (Ebl *ebl __attribute__ ((unused)),
    753 				 Elf64_Word sh_type __attribute__ ((unused)))
    754 {
    755   return false;
    756 }
    757 
    758 static int
    759 default_abi_cfi (Ebl *ebl __attribute__ ((unused)),
    760 		 Dwarf_CIE *abi_info __attribute__ ((unused)))
    761 {
    762   return -1;
    763 }
    764