+ struct mach_o_header_external hdr;
+ unsigned long hdr_val;
+
+ /* Read Mach-O header from memory. */
+ if (target_read_memory (load_addr, (gdb_byte *) &hdr, sizeof (hdr) - 4))
+ return 0;
+
+ /* Discard wrong magic numbers. Shouldn't happen. */
+ hdr_val = extract_unsigned_integer
+ (hdr.magic, sizeof (hdr.magic), byte_order);
+ if (hdr_val != BFD_MACH_O_MH_MAGIC && hdr_val != BFD_MACH_O_MH_MAGIC_64)
+ return 0;
+
+ /* Check executable. */
+ hdr_val = extract_unsigned_integer
+ (hdr.filetype, sizeof (hdr.filetype), byte_order);
+ if (hdr_val == BFD_MACH_O_MH_EXECUTE)
+ return load_addr;
+
+ return 0;
+}
+
+/* Get the load address of the executable using dyld list of images.
+ We assume that the dyld info are correct (which is wrong if the target
+ is stopped at the first instruction). */
+
+static CORE_ADDR
+darwin_read_exec_load_addr_from_dyld (struct darwin_info *info)
+{
+ struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
+ int ptr_len = ptr_type->length ();