static void dynamic_segment_parisc_val PARAMS ((Elf_Internal_Dyn *));
static int process_dynamic_segment PARAMS ((FILE *));
static int process_symbol_table PARAMS ((FILE *));
+static int process_syminfo PARAMS ((FILE *));
static int process_section_contents PARAMS ((FILE *));
+static void process_mips_fpe_exception PARAMS ((int));
+static int process_mips_specific PARAMS ((FILE *));
static int process_file PARAMS ((char *));
static int process_relocs PARAMS ((FILE *));
static int process_version_sections PARAMS ((FILE *));
static int display_debug_section PARAMS ((Elf32_Internal_Shdr *, FILE *));
static int display_debug_info PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_not_supported PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
+static int prescan_debug_info PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_lines PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
+static int display_debug_pubnames PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_abbrev PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_aranges PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_frames PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int process_corefile_note_segment PARAMS ((FILE *, bfd_vma, bfd_vma));
static int process_corefile_note_segments PARAMS ((FILE *));
static int process_corefile_contents PARAMS ((FILE *));
+static int process_arch_specific PARAMS ((FILE *));
typedef int Elf32_Word;
return 0;
}
- if (is_rela)
- printf
- (_(" Offset Info Type Symbol's Value Symbol's Name Addend\n"));
+ if (is_32bit_elf)
+ {
+ if (is_rela)
+ printf
+ (_(" Offset Info Type Symbol's Value Symbol's Name Addend\n"));
+ else
+ printf
+ (_(" Offset Info Type Symbol's Value Symbol's Name\n"));
+ }
else
- printf
- (_(" Offset Info Type Symbol's Value Symbol's Name\n"));
+ {
+ if (is_rela)
+ printf
+ (_(" Offset Info Type Symbol's Value Symbol's Name Addend\n"));
+ else
+ printf
+ (_(" Offset Info Type Symbol's Value Symbol's Name\n"));
+ }
for (i = 0; i < rel_size; i++)
{
#endif
}
+ if (is_32bit_elf)
+ {
#ifdef _bfd_int64_low
- printf (" %8.8lx %5.5lx ", _bfd_int64_low (offset), _bfd_int64_low (info));
+ printf ("%8.8lx %8.8lx ", _bfd_int64_low (offset), _bfd_int64_low (info));
#else
- printf (" %8.8lx %5.5lx ", offset, info);
+ printf ("%8.8lx %8.8lx ", offset, info);
#endif
+ }
+ else
+ {
+#ifdef _bfd_int64_low
+ printf ("%8.8lx%8.8lx %8.8lx%8.8lx ",
+ _bfd_int64_high (offset),
+ _bfd_int64_low (offset),
+ _bfd_int64_high (info),
+ _bfd_int64_low (info));
+#else
+ printf ("%16.16lx %16.16lx ", offset, info);
+#endif
+ }
switch (elf_header.e_machine)
{
break;
case EM_PPC:
+ case EM_PPC64:
rtype = elf_ppc_reloc_type (type);
break;
if (e_flags & EF_MIPS_CPIC)
strcat (buf, ", cpic");
+ if (e_flags & EF_MIPS_UCODE)
+ strcat (buf, ", ugen_reserved");
+
if (e_flags & EF_MIPS_ABI2)
strcat (buf, ", abi2");
+ if (e_flags & EF_MIPS_32BITMODE)
+ strcat (buf, ", 32bitmode");
+
if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
strcat (buf, ", mips1");
{
DWARF2_External_CompUnit * external;
DWARF2_Internal_CompUnit compunit;
+ Elf32_Internal_Shdr * relsec;
unsigned char * tags;
int i;
int level;
compunit.cu_abbrev_offset = BYTE_GET (external->cu_abbrev_offset);
compunit.cu_pointer_size = BYTE_GET (external->cu_pointer_size);
+ /* Check for RELA relocations in the abbrev_offset address, and
+ apply them. */
+ for (relsec = section_headers;
+ relsec < section_headers + elf_header.e_shnum;
+ ++relsec)
+ {
+ unsigned long nrelas, nsyms;
+ Elf_Internal_Rela *rela, *rp;
+ Elf32_Internal_Shdr *symsec;
+ Elf_Internal_Sym *symtab;
+ Elf_Internal_Sym *sym;
+
+ if (relsec->sh_type != SHT_RELA
+ || section_headers + relsec->sh_info != section)
+ continue;
+
+ if (!slurp_rela_relocs (file, relsec->sh_offset, relsec->sh_size,
+ & rela, & nrelas))
+ return 0;
+
+ symsec = section_headers + relsec->sh_link;
+ nsyms = symsec->sh_size / symsec->sh_entsize;
+ symtab = GET_ELF_SYMBOLS (file, symsec->sh_offset, nsyms);
+
+ for (rp = rela; rp < rela + nrelas; ++rp)
+ {
+ if (rp->r_offset
+ != (bfd_vma) ((unsigned char *) &external->cu_abbrev_offset
+ - section_begin))
+ continue;
+
+ if (is_32bit_elf)
+ {
+ sym = symtab + ELF32_R_SYM (rp->r_info);
+
+ if (ELF32_ST_TYPE (sym->st_info) != STT_SECTION)
+ {
+ warn (_("Skipping unexpected symbol type %u"),
+ ELF32_ST_TYPE (sym->st_info));
+ continue;
+ }
+ }
+ else
+ {
+ sym = symtab + ELF64_R_SYM (rp->r_info);
+
+ if (ELF64_ST_TYPE (sym->st_info) != STT_SECTION)
+ {
+ warn (_("Skipping unexpected symbol type %u"),
+ ELF64_ST_TYPE (sym->st_info));
+ continue;
+ }
+ }
+
+ compunit.cu_abbrev_offset += rp->r_addend;
+ break;
+ }
+
+ free (rela);
+ break;
+ }
+
tags = start + sizeof (* external);
cu_offset = start - section_begin;
start += compunit.cu_length + sizeof (external->cu_length);
return 0;
}
- printf (_(" <%d><%x>: Abbrev Number: %lu (%s)\n"),
- level, tags - section_begin - bytes_read,
+ printf (_(" <%d><%lx>: Abbrev Number: %lu (%s)\n"),
+ level,
+ (unsigned long) (tags - section_begin - bytes_read),
abbrev_number,
get_TAG_name (entry->tag));
in the frame info. */
#define DW_CFA_unreferenced (-1)
+static void frame_need_space PARAMS ((Frame_Chunk *, int));
+static void frame_display_row PARAMS ((Frame_Chunk *, int *, int *));
+static int size_of_encoded_value PARAMS ((int));
+
static void
frame_need_space (fc, reg)
Frame_Chunk * fc;
start += augmentation_data_len;
}
- printf ("\n%08lx %08lx %08lx FDE cie=%08x pc=%08lx..%08lx\n",
+ printf ("\n%08lx %08lx %08lx FDE cie=%08lx pc=%08lx..%08lx\n",
(unsigned long)(saved_start - section_start), length, cie_id,
- cie->chunk_start - section_start, fc->pc_begin,
- fc->pc_begin + fc->pc_range);
+ (unsigned long)(cie->chunk_start - section_start),
+ fc->pc_begin, fc->pc_begin + fc->pc_range);
if (! do_debug_frames_interp && augmentation_data_len)
{
unsigned long i;
free (econf64);
}
- printf (_("\nSection '.conflict' contains %d entries:\n"), conflictsno);
+ printf (_("\nSection '.conflict' contains %ld entries:\n"),
+ (long) conflictsno);
puts (_(" Num: Index Value Name"));
for (cnt = 0; cnt < conflictsno; ++cnt)