42 #include "mach-o/external.h" 69 #define DYLD_VERSION_MIN 1 70 #define DYLD_VERSION_MAX 15 168 asymbol **symbol_table;
169 unsigned int number_of_symbols;
173 storage_needed = bfd_get_symtab_upper_bound (abfd);
175 if (storage_needed <= 0)
178 symbol_table = (asymbol **)
xmalloc (storage_needed);
179 number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
181 for (i = 0; i < number_of_symbols; i++)
183 asymbol *sym = symbol_table[i];
185 if (strcmp (sym->name, symname) == 0
186 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0)
189 symaddr = sym->value + sym->section->vma;
193 xfree (symbol_table);
208 bfd_mach_o_load_command *cmd;
210 if (bfd_mach_o_lookup_command (
exec_bfd,
211 BFD_MACH_O_LC_LOAD_DYLINKER, &cmd) == 1)
212 return cmd->command.dylinker.name_str;
238 unsigned int image_info_size;
250 image_info_size = ptr_len * 3;
262 struct mach_o_header_external hdr;
263 unsigned long hdr_val;
281 (hdr.magic, sizeof (hdr.magic), byte_order);
282 if (hdr_val != BFD_MACH_O_MH_MAGIC && hdr_val != BFD_MACH_O_MH_MAGIC_64)
286 (hdr.filetype, sizeof (hdr.filetype), byte_order);
287 if (hdr_val == BFD_MACH_O_MH_EXECUTE)
327 struct mach_o_header_external hdr;
328 unsigned long hdr_val;
336 (hdr.magic, sizeof (hdr.magic), byte_order);
337 if (hdr_val != BFD_MACH_O_MH_MAGIC && hdr_val != BFD_MACH_O_MH_MAGIC_64)
342 (hdr.filetype, sizeof (hdr.filetype), byte_order);
343 if (hdr_val == BFD_MACH_O_MH_EXECUTE)
358 unsigned int image_info_size = ptr_len * 3;
423 const bfd_arch_info_type *arch)
425 bfd *result = bfd_mach_o_fat_extract (abfd, format, arch);
458 if (dyld_bfd != NULL)
468 if (dyld_bfd == NULL)
475 - bfd_get_start_address (dyld_bfd.
get ()));
561 vmaddr = bfd_mach_o_get_base_address (
exec_bfd);
564 if (vmaddr != load_addr)
622 char *found_pathname;
626 found_pathname =
solib_find (pathname, &found_file);
627 if (found_pathname == NULL)
637 error (
_(
"`%s': not a shared-library: %s"),
638 bfd_get_filename (abfd.
get ()), bfd_errmsg (bfd_get_error ()));
643 xfree (bfd_get_filename (res.
get ()));
644 res->filename = xstrdup (pathname);
655 = register_program_space_data_with_cleanup (NULL,
struct gdbarch * target_gdbarch(void)
static int darwin_dyld_version_ok(const struct darwin_info *info)
CORE_ADDR extract_typed_address(const gdb_byte *buf, struct type *type)
static gdb_bfd_ref_ptr gdb_bfd_mach_o_fat_extract(bfd *abfd, bfd_format format, const bfd_arch_info_type *arch)
gdb_bfd_ref_ptr solib_bfd_fopen(char *pathname, int fd)
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 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 * memset(T *s, int c, size_t n)=delete
void(* solib_create_inferior_hook)(int from_tty)
struct so_list *(* current_sos)(void)
static int open_symbol_file_object(int from_tty)
void _initialize_darwin_solib(void)
gdb::ref_ptr< struct bfd, gdb_bfd_ref_policy > gdb_bfd_ref_ptr
static char * find_program_interpreter(void)
#define SO_NAME_MAX_PATH_SIZE
struct regcache * get_current_regcache(void)
gdb_bfd_ref_ptr(* bfd_open)(char *pathname)
static CORE_ADDR darwin_read_exec_load_addr_at_init(struct darwin_info *info)
void gdb_bfd_ref(struct bfd *abfd)
void(* clear_solib)(void)
int(* in_dynsym_resolve_code)(CORE_ADDR pc)
static void darwin_free_so(struct so_list *so)
gdb_bfd_ref_ptr gdb_bfd_open(const char *name, const char *target, int fd)
struct gdb_dyld_all_image_infos all_image
struct target_ops current_target
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
struct block_symbol(* lookup_lib_global_symbol)(struct objfile *objfile, const char *name, const domain_enum domain)
static struct darwin_info * get_darwin_info(void)
static CORE_ADDR darwin_read_exec_load_addr_from_dyld(struct darwin_info *info)
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
int gdbarch_addr_bit(struct gdbarch *gdbarch)
static struct so_list * darwin_current_sos(void)
const char * interp_name(struct interp *interp)
int(* open_symbol_file_object)(int from_ttyp)
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)
char * solib_find(const char *in_pathname, int *fd)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static CORE_ADDR darwin_validate_exec_header(CORE_ADDR load_addr)
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)
static struct block_symbol darwin_lookup_lib_symbol(struct objfile *objfile, const char *name, const domain_enum domain)
struct inferior * current_inferior(void)
struct program_space * current_program_space
unsigned long long ULONGEST
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)
static CORE_ADDR lookup_symbol_from_bfd(bfd *abfd, const char *symname)
#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)
enum bfd_endian byte_order
int target_read_string(CORE_ADDR memaddr, char **string, int len, int *errnop)
void error(const char *fmt,...)
static gdb_bfd_ref_ptr darwin_bfd_open(char *pathname)
void objfile_rebase(struct objfile *objfile, CORE_ADDR slide)