if (start < section_end)
warn (_("There are %ld unused bytes at the end of section %s\n"),
(long) (section_end - start), section->name);
+ putchar ('\n');
return 1;
}
{ { ".debug_abbrev", ".zdebug_abbrev", NULL, NULL, 0, 0 },
display_debug_abbrev, &do_debug_abbrevs, 0, 0 },
{ { ".debug_aranges", ".zdebug_aranges", NULL, NULL, 0, 0 },
- display_debug_aranges, &do_debug_aranges, 0, 0 },
+ display_debug_aranges, &do_debug_aranges, 1, 0 },
{ { ".debug_frame", ".zdebug_frame", NULL, NULL, 0, 0 },
display_debug_frames, &do_debug_frames, 1, 0 },
{ { ".debug_info", ".zdebug_info", NULL, NULL, 0, 0 },
{ { ".debug_str", ".zdebug_str", NULL, NULL, 0, 0 },
display_debug_str, &do_debug_str, 0, 0 },
{ { ".debug_loc", ".zdebug_loc", NULL, NULL, 0, 0 },
- display_debug_loc, &do_debug_loc, 0, 0 },
+ display_debug_loc, &do_debug_loc, 1, 0 },
{ { ".debug_pubtypes", ".zdebug_pubtypes", NULL, NULL, 0, 0 },
display_debug_pubnames, &do_debug_pubnames, 0, 0 },
{ { ".debug_ranges", ".zdebug_ranges", NULL, NULL, 0, 0 },
}
/* Display the contents of the version sections. */
+
static int
process_version_sections (FILE * file)
{
#endif /* HAVE_ZLIB_H */
}
+/* Check to see if the given reloc needs to be handled in a target specific
+ manner. If so then process the reloc and return TRUE otherwise return
+ FALSE. */
+
+static bfd_boolean
+target_specific_reloc_handling (Elf_Internal_Rela * reloc,
+ unsigned char * start,
+ Elf_Internal_Sym * symtab)
+{
+ unsigned int reloc_type = get_reloc_type (reloc->r_info);
+
+ switch (elf_header.e_machine)
+ {
+ case EM_MN10300:
+ case EM_CYGNUS_MN10300:
+ {
+ static Elf_Internal_Sym * saved_sym = NULL;
+
+ switch (reloc_type)
+ {
+ case 34: /* R_MN10300_ALIGN */
+ return TRUE;
+ case 33: /* R_MN10300_SYM_DIFF */
+ saved_sym = symtab + get_reloc_symindex (reloc->r_info);
+ return TRUE;
+ case 1: /* R_MN10300_32 */
+ if (saved_sym != NULL)
+ {
+ bfd_vma value;
+
+ value = reloc->r_addend
+ + (symtab[get_reloc_symindex (reloc->r_info)].st_value
+ - saved_sym->st_value);
+
+ byte_put (start + reloc->r_offset, value, 4);
+
+ saved_sym = NULL;
+ return TRUE;
+ }
+ break;
+ }
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
/* Apply relocations to a debug section. */
static void
reloc_type = get_reloc_type (rp->r_info);
- if (is_none_reloc (reloc_type))
+ if (target_specific_reloc_handling (rp, start, symtab))
continue;
-
- if (is_32bit_abs_reloc (reloc_type)
- || is_32bit_pcrel_reloc (reloc_type))
+ else if (is_none_reloc (reloc_type))
+ continue;
+ else if (is_32bit_abs_reloc (reloc_type)
+ || is_32bit_pcrel_reloc (reloc_type))
reloc_size = 4;
else if (is_64bit_abs_reloc (reloc_type)
|| is_64bit_pcrel_reloc (reloc_type))