42 #include "mach-o/external.h"
69 #define DYLD_VERSION_MIN 1
70 #define DYLD_VERSION_MAX 14
134 len = 4 + 4 + 2 * ptr_type->
length;
150 (buf + 8 + ptr_type->
length, ptr_type);
175 asymbol **symbol_table;
176 unsigned int number_of_symbols;
180 storage_needed = bfd_get_symtab_upper_bound (abfd);
182 if (storage_needed <= 0)
185 symbol_table = (asymbol **)
xmalloc (storage_needed);
186 number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
188 for (i = 0; i < number_of_symbols; i++)
190 asymbol *sym = symbol_table[i];
192 if (strcmp (sym->name, symname) == 0
193 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0)
196 symaddr = sym->value + sym->section->vma;
200 xfree (symbol_table);
215 bfd_mach_o_load_command *cmd;
217 if (bfd_mach_o_lookup_command (
exec_bfd,
218 BFD_MACH_O_LC_LOAD_DYLINKER, &cmd) == 1)
219 return cmd->command.dylinker.name_str;
245 unsigned int image_info_size;
257 image_info_size = ptr_len * 3;
269 struct mach_o_header_external hdr;
270 unsigned long hdr_val;
289 (hdr.magic, sizeof (hdr.magic), byte_order);
290 if (hdr_val != BFD_MACH_O_MH_MAGIC && hdr_val != BFD_MACH_O_MH_MAGIC_64)
294 (hdr.filetype, sizeof (hdr.filetype), byte_order);
295 if (hdr_val == BFD_MACH_O_MH_EXECUTE)
337 unsigned int image_info_size = ptr_len * 3;
346 struct mach_o_header_external hdr;
347 unsigned long hdr_val;
360 (hdr.magic, sizeof (hdr.magic), byte_order);
361 if (hdr_val != BFD_MACH_O_MH_MAGIC && hdr_val != BFD_MACH_O_MH_MAGIC_64)
365 (hdr.filetype, sizeof (hdr.filetype), byte_order);
366 if (hdr_val == BFD_MACH_O_MH_EXECUTE)
396 const bfd_arch_info_type *arch)
398 bfd *result = bfd_mach_o_fat_extract (abfd, format, arch);
419 bfd *dyld_bfd = NULL;
460 - bfd_get_start_address (dyld_bfd));
485 buf, 0,
sizeof (buf));
486 if (len !=
sizeof (buf))
527 vmaddr = bfd_mach_o_get_base_address (
exec_bfd);
530 if (vmaddr != load_addr)
583 char *found_pathname;
589 found_pathname =
solib_find (pathname, &found_file);
590 if (found_pathname == NULL)
601 error (
_(
"`%s': not a shared-library: %s"),
602 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
608 xfree (bfd_get_filename (res));
609 res->filename = xstrdup (pathname);
624 = register_program_space_data_with_cleanup (NULL,
struct gdbarch * target_gdbarch(void)
struct symbol *(* lookup_lib_global_symbol)(struct objfile *objfile, const char *name, const domain_enum domain)
ULONGEST extract_unsigned_integer(const gdb_byte *, int, enum bfd_endian)
static int darwin_dyld_version_ok(const struct darwin_info *info)
CORE_ADDR extract_typed_address(const gdb_byte *buf, struct type *type)
void gdb_bfd_mark_parent(bfd *child, bfd *parent)
struct breakpoint * create_solib_event_breakpoint(struct gdbarch *gdbarch, CORE_ADDR address)
void warning(const char *fmt,...)
static void darwin_solib_read_all_image_info_addr(struct darwin_info *info)
enum domain_enum_tag domain_enum
static CORE_ADDR darwin_read_exec_load_addr(struct darwin_info *info)
static const struct program_space_data * solib_darwin_pspace_data
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
void(* relocate_section_addresses)(struct so_list *so, struct target_section *)
void(* solib_create_inferior_hook)(int from_tty)
struct so_list *(* current_sos)(void)
bfd *(* bfd_open)(char *pathname)
static bfd * darwin_bfd_open(char *pathname)
static struct symbol * darwin_lookup_lib_symbol(struct objfile *objfile, const char *name, const domain_enum domain)
bfd * solib_bfd_fopen(char *pathname, int fd)
static char * find_program_interpreter(void)
#define SO_NAME_MAX_PATH_SIZE
struct bfd * gdb_bfd_open(const char *name, const char *target, int fd)
struct regcache * get_current_regcache(void)
int(* open_symbol_file_object)(void *from_ttyp)
void gdb_bfd_ref(struct bfd *abfd)
void null_cleanup(void *arg)
void(* clear_solib)(void)
char * solib_find(char *in_pathname, int *fd)
int(* in_dynsym_resolve_code)(CORE_ADDR pc)
static void darwin_free_so(struct so_list *so)
struct gdb_dyld_all_image_infos all_image
struct target_ops current_target
void gdb_bfd_unref(struct bfd *abfd)
void initialize_file_ftype(void)
static struct darwin_info * get_darwin_info(void)
char so_original_name[SO_NAME_MAX_PATH_SIZE]
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
char so_name[SO_NAME_MAX_PATH_SIZE]
static void darwin_pspace_data_cleanup(struct program_space *pspace, void *arg)
struct target_so_ops darwin_so_ops
static struct so_list * darwin_current_sos(void)
struct cleanup * make_cleanup_bfd_unref(bfd *abfd)
void(* special_symbol_handling)(void)
const char * interp_name(struct interp *interp)
static void darwin_relocate_section_addresses(struct so_list *so, struct target_section *sec)
void discard_cleanups(struct cleanup *old_chain)
void void void void void void void void void perror_with_name(const char *string) ATTRIBUTE_NORETURN
static void darwin_load_image_infos(struct darwin_info *info)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
CORE_ADDR regcache_read_pc(struct regcache *regcache)
static void darwin_clear_solib(void)
struct type * builtin_data_ptr
void(* free_so)(struct so_list *so)
static void darwin_solib_create_inferior_hook(int from_tty)
struct inferior * current_inferior(void)
struct program_space * current_program_space
static bfd * gdb_bfd_mach_o_fat_extract(bfd *abfd, bfd_format format, const bfd_arch_info_type *arch)
LONGEST target_read(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *buf, ULONGEST offset, LONGEST len)
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
#define TYPE_LENGTH(thistype)
static int darwin_in_dynsym_resolve_code(CORE_ADDR pc)
static void darwin_solib_get_all_image_info_addr_at_init(struct darwin_info *info)
static CORE_ADDR lookup_symbol_from_bfd(bfd *abfd, char *symname)
int target_read_string(CORE_ADDR memaddr, char **string, int len, int *errnop)
initialize_file_ftype _initialize_darwin_solib
void error(const char *fmt,...)
void objfile_rebase(struct objfile *objfile, CORE_ADDR slide)
static int open_symbol_file_object(void *from_ttyp)
void do_cleanups(struct cleanup *old_chain)
static void darwin_special_symbol_handling(void)
__extension__ enum domain_enum_tag domain
const ULONGEST const LONGEST len