aboutsummaryrefslogtreecommitdiff
path: root/bfd/mach-o.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2009-09-16 13:30:32 +0000
committerTristan Gingold <gingold@adacore.com>2009-09-16 13:30:32 +0000
commitafecc97cf6abc6df07f613b0247afe71d48f7092 (patch)
tree0f67996e43d91518cf8f797acb5c7eb6d2c17e5b /bfd/mach-o.c
parent5cca3659ec807cd5df9c685addbd6e8642665d93 (diff)
downloadgdb-afecc97cf6abc6df07f613b0247afe71d48f7092.zip
gdb-afecc97cf6abc6df07f613b0247afe71d48f7092.tar.gz
gdb-afecc97cf6abc6df07f613b0247afe71d48f7092.tar.bz2
2009-09-16 Tristan Gingold <gingold@adacore.com>
* mach-o.h (bfd_mach_o_filetype): Add new constants from darwin10. Reindent. * mach-o.c (bfd_mach_o_cpu_name): Reindent. (bfd_mach_o_filetype_name): Complete with new constants. Reindent. (bfd_mach_o_print_private_header): Use fputs instead of fprintf when possible to avoid warnings. (bfd_mach_o_print_section_map): Ditto. (bfd_mach_o_section_get_entry_size): New function. (bfd_mach_o_section_get_nbr_indirect): Simplify using the newly added function. (bfd_mach_o_print_dysymtab): Print address of indirect symbols.
Diffstat (limited to 'bfd/mach-o.c')
-rw-r--r--bfd/mach-o.c95
1 files changed, 57 insertions, 38 deletions
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index 5cf531e..747a637 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -3081,33 +3081,36 @@ bfd_mach_o_get_name (const bfd_mach_o_xlat_name *table, unsigned long val)
static bfd_mach_o_xlat_name bfd_mach_o_cpu_name[] =
{
- { "vax", BFD_MACH_O_CPU_TYPE_VAX},
- { "mc680x0", BFD_MACH_O_CPU_TYPE_MC680x0},
- { "i386", BFD_MACH_O_CPU_TYPE_I386},
- { "mips", BFD_MACH_O_CPU_TYPE_MIPS},
- { "mc98000", BFD_MACH_O_CPU_TYPE_MC98000},
- { "hppa", BFD_MACH_O_CPU_TYPE_HPPA},
- { "arm", BFD_MACH_O_CPU_TYPE_ARM},
- { "mc88000", BFD_MACH_O_CPU_TYPE_MC88000},
- { "sparc", BFD_MACH_O_CPU_TYPE_SPARC},
- { "i860", BFD_MACH_O_CPU_TYPE_I860},
- { "alpha", BFD_MACH_O_CPU_TYPE_ALPHA},
- { "powerpc", BFD_MACH_O_CPU_TYPE_POWERPC},
- { "powerpc_64", BFD_MACH_O_CPU_TYPE_POWERPC_64},
- { "x86_64", BFD_MACH_O_CPU_TYPE_X86_64},
+ { "vax", BFD_MACH_O_CPU_TYPE_VAX },
+ { "mc680x0", BFD_MACH_O_CPU_TYPE_MC680x0 },
+ { "i386", BFD_MACH_O_CPU_TYPE_I386 },
+ { "mips", BFD_MACH_O_CPU_TYPE_MIPS },
+ { "mc98000", BFD_MACH_O_CPU_TYPE_MC98000 },
+ { "hppa", BFD_MACH_O_CPU_TYPE_HPPA },
+ { "arm", BFD_MACH_O_CPU_TYPE_ARM },
+ { "mc88000", BFD_MACH_O_CPU_TYPE_MC88000 },
+ { "sparc", BFD_MACH_O_CPU_TYPE_SPARC },
+ { "i860", BFD_MACH_O_CPU_TYPE_I860 },
+ { "alpha", BFD_MACH_O_CPU_TYPE_ALPHA },
+ { "powerpc", BFD_MACH_O_CPU_TYPE_POWERPC },
+ { "powerpc_64", BFD_MACH_O_CPU_TYPE_POWERPC_64 },
+ { "x86_64", BFD_MACH_O_CPU_TYPE_X86_64 },
{ NULL, 0}
};
static bfd_mach_o_xlat_name bfd_mach_o_filetype_name[] =
{
- { "object", BFD_MACH_O_MH_OBJECT},
- { "execute", BFD_MACH_O_MH_EXECUTE},
- { "fvmlib", BFD_MACH_O_MH_FVMLIB},
- { "core", BFD_MACH_O_MH_CORE},
- { "preload", BFD_MACH_O_MH_PRELOAD},
- { "dylib", BFD_MACH_O_MH_DYLIB},
- { "dylinker", BFD_MACH_O_MH_DYLINKER},
- { "bundle", BFD_MACH_O_MH_BUNDLE},
+ { "object", BFD_MACH_O_MH_OBJECT },
+ { "execute", BFD_MACH_O_MH_EXECUTE },
+ { "fvmlib", BFD_MACH_O_MH_FVMLIB },
+ { "core", BFD_MACH_O_MH_CORE },
+ { "preload", BFD_MACH_O_MH_PRELOAD },
+ { "dylib", BFD_MACH_O_MH_DYLIB },
+ { "dylinker", BFD_MACH_O_MH_DYLINKER },
+ { "bundle", BFD_MACH_O_MH_BUNDLE },
+ { "dylib_stub", BFD_MACH_O_MH_DYLIB_STUB },
+ { "dym", BFD_MACH_O_MH_DSYM },
+ { "kext_bundle", BFD_MACH_O_MH_KEXT_BUNDLE },
{ NULL, 0}
};
@@ -3220,7 +3223,7 @@ bfd_mach_o_print_private_header (bfd *abfd, FILE *file)
bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
bfd_mach_o_header *h = &mdata->header;
- fprintf (file, _("Mach-O header:\n"));
+ fputs (_("Mach-O header:\n"), file);
fprintf (file, _(" magic : %08lx\n"), h->magic);
fprintf (file, _(" cputype : %08lx (%s)\n"), h->cputype,
bfd_mach_o_get_name (bfd_mach_o_cpu_name, h->cputype));
@@ -3232,7 +3235,7 @@ bfd_mach_o_print_private_header (bfd *abfd, FILE *file)
fprintf (file, _(" sizeofcmds: %08lx\n"), h->sizeofcmds);
fprintf (file, _(" flags : %08lx ("), h->flags);
bfd_mach_o_print_flags (bfd_mach_o_header_flags_name, h->flags, file);
- fprintf (file, _(")\n"));
+ fputs (_(")\n"), file);
fprintf (file, _(" reserved : %08x\n"), h->reserved);
}
@@ -3243,8 +3246,8 @@ bfd_mach_o_print_section_map (bfd *abfd, FILE *file)
unsigned int i, j;
unsigned int sec_nbr = 0;
- fprintf (file, _("Segments and Sections:\n"));
- fprintf (file, _(" #: Segment name Section name Address\n"));
+ fputs (_("Segments and Sections:\n"), file);
+ fputs (_(" #: Segment name Section name Address\n"), file);
for (i = 0; i < mdata->header.ncmds; i++)
{
@@ -3278,33 +3281,42 @@ bfd_mach_o_print_section_map (bfd *abfd, FILE *file)
}
}
-/* Return the number of indirect symbols for a section.
+/* Return the size of an entry for section SEC.
Must be called only for symbol pointer section and symbol stubs
sections. */
static unsigned int
-bfd_mach_o_section_get_nbr_indirect (bfd *abfd, bfd_mach_o_section *sec)
+bfd_mach_o_section_get_entry_size (bfd *abfd, bfd_mach_o_section *sec)
{
- unsigned int elsz;
-
switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK)
{
case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS:
case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS:
- elsz = bfd_mach_o_wide_p (abfd) ? 8 : 4;
- return sec->size / elsz;
+ return bfd_mach_o_wide_p (abfd) ? 8 : 4;
case BFD_MACH_O_S_SYMBOL_STUBS:
- elsz = sec->reserved2;
- if (elsz)
- return sec->size / elsz;
- else
- return 0;
+ return sec->reserved2;
default:
BFD_FAIL ();
return 0;
}
}
+/* Return the number of indirect symbols for a section.
+ Must be called only for symbol pointer section and symbol stubs
+ sections. */
+
+static unsigned int
+bfd_mach_o_section_get_nbr_indirect (bfd *abfd, bfd_mach_o_section *sec)
+{
+ unsigned int elsz;
+
+ elsz = bfd_mach_o_section_get_entry_size (abfd, sec);
+ if (elsz == 0)
+ return 0;
+ else
+ return sec->size / elsz;
+}
+
static void
bfd_mach_o_print_section (bfd *abfd ATTRIBUTE_UNUSED,
bfd_mach_o_section *sec, FILE *file)
@@ -3515,6 +3527,8 @@ bfd_mach_o_print_dysymtab (bfd *abfd ATTRIBUTE_UNUSED,
bfd_mach_o_section *sec = mdata->sections[i];
unsigned int j, first, last;
bfd_mach_o_symtab_command *symtab = mdata->symtab;
+ bfd_vma addr;
+ bfd_vma entry_size;
switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK)
{
@@ -3523,13 +3537,17 @@ bfd_mach_o_print_dysymtab (bfd *abfd ATTRIBUTE_UNUSED,
case BFD_MACH_O_S_SYMBOL_STUBS:
first = sec->reserved1;
last = first + bfd_mach_o_section_get_nbr_indirect (abfd, sec);
+ addr = sec->addr;
+ entry_size = bfd_mach_o_section_get_entry_size (abfd, sec);
fprintf (file, " for section %s.%s:\n",
sec->segname, sec->sectname);
for (j = first; j < last; j++)
{
unsigned int isym = dysymtab->indirect_syms[j];
- fprintf (file, " %5u: 0x%08x (%u)", j, isym, isym);
+ fprintf (file, " ");
+ fprintf_vma (file, addr);
+ fprintf (file, " %5u: 0x%08x", j, isym);
if (isym & BFD_MACH_O_INDIRECT_SYMBOL_LOCAL)
fprintf (file, " LOCAL");
if (isym & BFD_MACH_O_INDIRECT_SYMBOL_ABS)
@@ -3539,6 +3557,7 @@ bfd_mach_o_print_dysymtab (bfd *abfd ATTRIBUTE_UNUSED,
&& symtab->symbols[isym].symbol.name)
fprintf (file, " %s", symtab->symbols[isym].symbol.name);
fprintf (file, "\n");
+ addr += entry_size;
}
break;
default: