mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-09 23:32:21 +08:00
2009-06-25 Tristan Gingold <gingold@adacore.com>
* mach-o-target.c (bfd_mach_o_get_dynamic_symtab_upper_bound) (bfd_mach_o_canonicalize_dynamic_symtab) (bfd_mach_o_get_synthetic_symtab): Defines. (TARGET_NAME_BACKEND): Add bfd_mach_o_print_thread entry. (TARGET_NAME): Use Mach-O specific functions for dynamic. * mach-o-i386.c (bfd_mach_o_i386_swap_reloc_in): Fix howto indexes for scattered relocations. (bfd_mach_o_i386_print_thread): New function. (bfd_mach_o_print_thread): Define. * mach-o.c (text_section_names_xlat): Add an entry for __const. (bfd_mach_o_canonicalize_one_reloc, bfd_mach_o_canonicalize_relocs): New functions extracted from ... (bfd_mach_o_canonicalize_reloc): ... This. Simplified. (bfd_mach_o_get_dynamic_reloc_upper_bound): New function. (bfd_mach_o_canonicalize_dynamic_reloc): New function. (bfd_mach_o_i386_flavour_string): Adjusted after enum renaming. (bfd_mach_o_ppc_flavour_string): Reindentation. Add 64 bits cases. (bfd_mach_o_scan_read_dylinker): Do not create a section anymore. Set name_str field. (bfd_mach_o_scan_read_dylib): Ditto. (bfd_mach_o_scan_read_thread): Set mdata at declaration. Add comments, reindent. (bfd_mach_o_scan_read_dysymtab): Set mdata at declaration. Correctly decode isym and flags on little endian targets. Set dysymtab field. (bfd_mach_o_scan_start_address): Adjust for enum names. (bfd_mach_o_lookup_section): Do not look for segments anymore. (bfd_mach_o_print_section): Display bfd section name. (bfd_mach_o_print_segment): Display none if no name. (bfd_mach_o_print_dysymtab): Display next index for local, external and undefined symbols. (bfd_mach_o_bfd_print_private_bfd_data): Adjust code by using name_str. Display dylinker name. Display thread and unixthread commands content. (bfd_mach_o_print_thread): New macro. * mach-o.h (bfd_mach_o_mach_header_magic): Align numbers. (bfd_mach_o_ppc_thread_flavour): Ditto. (bfd_mach_o_i386_thread_flavour): Ditto. (BFD_MACH_O_PPC_THREAD_STATE_NONE): New enum. (BFD_MACH_O_x86_THREAD_STATE_NONE): Replaces BFD_MACH_O_THREAD_STATE_NONE. (bfd_mach_o_segment_command): Remove segment field. (bfd_mach_o_thread_flavour): Field offset is now unsigned long. (bfd_mach_o_dylinker_command): Remove section field, add name_str. (bfd_mach_o_prebound_dylib_command): Ditto. (bfd_mach_o_dylib_command): Ditto. (bfd_mach_o_prebound_dylib_command): Remove section field. (mach_o_data_struct): Add dysymtab field. (bfd_mach_o_backend_data): Add _bfd_mach_o_print_thread field. (bfd_mach_o_get_reloc_upper_bound, bfd_mach_o_canonicalize_reloc) (bfd_mach_o_build_commands): Remove parameter names and attributes. (bfd_mach_o_get_dynamic_reloc_upper_bound) (bfd_mach_o_canonicalize_dynamic_reloc): New prototypes.
This commit is contained in:
@ -102,14 +102,14 @@ bfd_mach_o_i386_swap_reloc_in (arelent *res, bfd_mach_o_reloc_info *reloc)
|
||||
case BFD_MACH_O_GENERIC_RELOC_PAIR:
|
||||
if (reloc->r_length != 2)
|
||||
return FALSE;
|
||||
res->howto = &i386_howto_table[3];
|
||||
res->howto = &i386_howto_table[6];
|
||||
res->address = res[-1].address;
|
||||
return TRUE;
|
||||
case BFD_MACH_O_GENERIC_RELOC_SECTDIFF:
|
||||
case BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF:
|
||||
if (reloc->r_length != 2)
|
||||
return FALSE;
|
||||
res->howto = &i386_howto_table[2];
|
||||
res->howto = &i386_howto_table[5];
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
@ -217,8 +217,71 @@ bfd_mach_o_i386_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
bfd_mach_o_i386_print_thread (bfd *abfd, bfd_mach_o_thread_flavour *thread,
|
||||
void *vfile, char *buf)
|
||||
{
|
||||
FILE *file = (FILE *)vfile;
|
||||
|
||||
switch (thread->flavour)
|
||||
{
|
||||
case BFD_MACH_O_x86_THREAD_STATE:
|
||||
if (thread->size < (8 + 16 * 4))
|
||||
return FALSE;
|
||||
fprintf (file, " x86_THREAD_STATE:\n");
|
||||
fprintf (file, " flavor: 0x%08lx count: 0x%08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 0),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 4));
|
||||
fprintf (file, " eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 8),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 12),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 16),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 20));
|
||||
fprintf (file, " edi: %08lx esi: %08lx ebp: %08lx esp: %08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 24),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 28),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 32),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 36));
|
||||
fprintf (file, " ss: %08lx flg: %08lx eip: %08lx cs: %08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 40),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 44),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 48),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 52));
|
||||
fprintf (file, " ds: %08lx es: %08lx fs: %08lx gs: %08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 56),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 60),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 64),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 68));
|
||||
return TRUE;
|
||||
case BFD_MACH_O_x86_FLOAT_STATE:
|
||||
if (thread->size < 8)
|
||||
return FALSE;
|
||||
fprintf (file, " x86_FLOAT_STATE:\n");
|
||||
fprintf (file, " flavor: 0x%08lx count: 0x%08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 0),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 4));
|
||||
return TRUE;
|
||||
case BFD_MACH_O_x86_EXCEPTION_STATE:
|
||||
if (thread->size < 8 + 3 * 4)
|
||||
return FALSE;
|
||||
fprintf (file, " x86_EXCEPTION_STATE:\n");
|
||||
fprintf (file, " flavor: 0x%08lx count: 0x%08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 0),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 4));
|
||||
fprintf (file, " trapno: %08lx err: %08lx faultaddr: %08lx\n",
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 8),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 12),
|
||||
(unsigned long)bfd_get_32 (abfd, buf + 16));
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define bfd_mach_o_swap_reloc_in bfd_mach_o_i386_swap_reloc_in
|
||||
#define bfd_mach_o_swap_reloc_out bfd_mach_o_i386_swap_reloc_out
|
||||
#define bfd_mach_o_print_thread bfd_mach_o_i386_print_thread
|
||||
|
||||
#define bfd_mach_o_bfd_reloc_type_lookup bfd_mach_o_i386_bfd_reloc_type_lookup
|
||||
#define bfd_mach_o_bfd_reloc_name_lookup bfd_mach_o_i386_bfd_reloc_name_lookup
|
||||
|
Reference in New Issue
Block a user