+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;
+}
+
+static const mach_o_section_name_xlat text_section_names_xlat[] =
+ {
+ { ".symbol_stub", "__symbol_stub",
+ SEC_CODE | SEC_LOAD, BFD_MACH_O_S_SYMBOL_STUBS,
+ BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS,
+ 0},
+ { ".picsymbol_stub", "__picsymbol_stub",
+ SEC_CODE | SEC_LOAD, BFD_MACH_O_S_SYMBOL_STUBS,
+ BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS,
+ 0},
+ { NULL, NULL, 0, 0, 0, 0}
+ };
+
+static const mach_o_section_name_xlat data_section_names_xlat[] =
+ {
+ /* The first two are recognized by i386, but not emitted for x86 by
+ modern GCC. */
+ { ".non_lazy_symbol_pointer", "__nl_symbol_ptr",
+ SEC_DATA | SEC_LOAD, BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS,
+ BFD_MACH_O_S_ATTR_NONE, 2},
+ { ".lazy_symbol_pointer", "__la_symbol_ptr",
+ SEC_DATA | SEC_LOAD, BFD_MACH_O_S_LAZY_SYMBOL_POINTERS,
+ BFD_MACH_O_S_ATTR_NONE, 2},
+ { ".lazy_symbol_pointer2", "__la_sym_ptr2",
+ SEC_DATA | SEC_LOAD, BFD_MACH_O_S_LAZY_SYMBOL_POINTERS,
+ BFD_MACH_O_S_ATTR_NONE, 2},
+ { ".lazy_symbol_pointer3", "__la_sym_ptr3",
+ SEC_DATA | SEC_LOAD, BFD_MACH_O_S_LAZY_SYMBOL_POINTERS,
+ BFD_MACH_O_S_ATTR_NONE, 2},
+ { NULL, NULL, 0, 0, 0, 0}
+ };
+
+static const mach_o_section_name_xlat import_section_names_xlat[] =
+ {
+ { ".picsymbol_stub3", "__jump_table",
+ SEC_CODE | SEC_LOAD, BFD_MACH_O_S_SYMBOL_STUBS,
+ BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS
+ | BFD_MACH_O_S_SELF_MODIFYING_CODE,
+ 6},
+ { ".non_lazy_symbol_pointer_x86", "__pointers",
+ SEC_DATA | SEC_LOAD, BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS,
+ BFD_MACH_O_S_ATTR_NONE, 2},
+ { NULL, NULL, 0, 0, 0, 0}
+ };
+
+const mach_o_segment_name_xlat mach_o_i386_segsec_names_xlat[] =
+ {
+ { "__TEXT", text_section_names_xlat },
+ { "__DATA", data_section_names_xlat },
+ { "__IMPORT", import_section_names_xlat },
+ { NULL, NULL }
+ };
+
+#define bfd_mach_o_canonicalize_one_reloc bfd_mach_o_i386_canonicalize_one_reloc
+#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_tgt_seg_table mach_o_i386_segsec_names_xlat
+#define bfd_mach_o_section_type_valid_for_tgt NULL