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.
This commit is contained in:
parent
5cca3659ec
commit
afecc97cf6
3 changed files with 87 additions and 51 deletions
|
@ -1,3 +1,17 @@
|
|||
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.
|
||||
|
||||
2009-09-14 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/fi.po: Updated Finnish translation.
|
||||
|
|
105
bfd/mach-o.c
105
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,6 +3281,26 @@ bfd_mach_o_print_section_map (bfd *abfd, FILE *file)
|
|||
}
|
||||
}
|
||||
|
||||
/* 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_entry_size (bfd *abfd, bfd_mach_o_section *sec)
|
||||
{
|
||||
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:
|
||||
return bfd_mach_o_wide_p (abfd) ? 8 : 4;
|
||||
case BFD_MACH_O_S_SYMBOL_STUBS:
|
||||
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. */
|
||||
|
@ -3287,22 +3310,11 @@ bfd_mach_o_section_get_nbr_indirect (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;
|
||||
case BFD_MACH_O_S_SYMBOL_STUBS:
|
||||
elsz = sec->reserved2;
|
||||
if (elsz)
|
||||
return sec->size / elsz;
|
||||
else
|
||||
return 0;
|
||||
default:
|
||||
BFD_FAIL ();
|
||||
return 0;
|
||||
}
|
||||
elsz = bfd_mach_o_section_get_entry_size (abfd, sec);
|
||||
if (elsz == 0)
|
||||
return 0;
|
||||
else
|
||||
return sec->size / elsz;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -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:
|
||||
|
|
19
bfd/mach-o.h
19
bfd/mach-o.h
|
@ -166,14 +166,17 @@ bfd_mach_o_cpu_subtype;
|
|||
|
||||
typedef enum bfd_mach_o_filetype
|
||||
{
|
||||
BFD_MACH_O_MH_OBJECT = 1,
|
||||
BFD_MACH_O_MH_EXECUTE = 2,
|
||||
BFD_MACH_O_MH_FVMLIB = 3,
|
||||
BFD_MACH_O_MH_CORE = 4,
|
||||
BFD_MACH_O_MH_PRELOAD = 5,
|
||||
BFD_MACH_O_MH_DYLIB = 6,
|
||||
BFD_MACH_O_MH_DYLINKER = 7,
|
||||
BFD_MACH_O_MH_BUNDLE = 8
|
||||
BFD_MACH_O_MH_OBJECT = 0x01,
|
||||
BFD_MACH_O_MH_EXECUTE = 0x02,
|
||||
BFD_MACH_O_MH_FVMLIB = 0x03,
|
||||
BFD_MACH_O_MH_CORE = 0x04,
|
||||
BFD_MACH_O_MH_PRELOAD = 0x05,
|
||||
BFD_MACH_O_MH_DYLIB = 0x06,
|
||||
BFD_MACH_O_MH_DYLINKER = 0x07,
|
||||
BFD_MACH_O_MH_BUNDLE = 0x08,
|
||||
BFD_MACH_O_MH_DYLIB_STUB = 0x09,
|
||||
BFD_MACH_O_MH_DSYM = 0x0a,
|
||||
BFD_MACH_O_MH_KEXT_BUNDLE = 0x0b
|
||||
}
|
||||
bfd_mach_o_filetype;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue