This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed/darwin] Handle darwin 10 dynamic loader


Hi,

the version of the communication area between gdb and the dynadmic loader (dyld) has changed with
darwin 10. With this patch gdb can handle the new (well, in fact backward compatible) structure.


Tristan.

2009-10-13 Tristan Gingold <gingold@adacore.com>

	* solib-darwin.c: Add an empty line after comment for functions.
	(struct gdb_dyld_all_image_infos): Improve comment.
	(DYLD_VERSION): Removed and replaced by ...
	(DYLD_VERSION_MAX, DYLD_VERSION_MIN): ... New macros.
	(darwin_dyld_version_ok): New function.
	(darwin_load_image_infos): Call darwin_dyld_version_ok.
	(darwin_current_sos): Ditto.
	(darwin_solib_create_inferior_hook): Ditto.

Index: solib-darwin.c
===================================================================
RCS file: /cvs/src/src/gdb/solib-darwin.c,v
retrieving revision 1.7
diff -c -r1.7 solib-darwin.c
*** solib-darwin.c	10 Aug 2009 09:35:24 -0000	1.7
--- solib-darwin.c	13 Oct 2009 10:27:54 -0000
***************
*** 52,58 ****
    unsigned long mtime;
  };

! /* Content of inferior dyld_all_image_infos structure.  */
  struct gdb_dyld_all_image_infos
  {
    /* Version (1).  */
--- 52,59 ----
    unsigned long mtime;
  };

! /* Content of inferior dyld_all_image_infos structure.
!    See /usr/include/mach-o/dyld_images.h for the documentation.  */
  struct gdb_dyld_all_image_infos
  {
    /* Version (1).  */
***************
*** 66,72 ****
  };

  /* Current all_image_infos version.  */
! #define DYLD_VERSION 1

  /* Address of structure dyld_all_image_infos in inferior.  */
  static CORE_ADDR dyld_all_image_addr;
--- 67,74 ----
  };

  /* Current all_image_infos version.  */
! #define DYLD_VERSION_MIN 1
! #define DYLD_VERSION_MAX 7

  /* Address of structure dyld_all_image_infos in inferior.  */
  static CORE_ADDR dyld_all_image_addr;
***************
*** 74,80 ****
--- 76,92 ----
  /* Gdb copy of dyld_all_info_infos.  */
  static struct gdb_dyld_all_image_infos dyld_all_image;

+ /* Return non-zero if the version in dyld_all_image is known.  */
+
+ static int
+ darwin_dyld_version_ok (void)
+ {
+   return dyld_all_image.version >= DYLD_VERSION_MIN
+     && dyld_all_image.version >= DYLD_VERSION_MAX;
+ }
+
  /* Read dyld_all_image from inferior.  */
+
  static void
  darwin_load_image_infos (void)
  {
***************
*** 99,105 ****

/* Extract the fields. */
dyld_all_image.version = extract_unsigned_integer (buf, 4, byte_order);
! if (dyld_all_image.version != DYLD_VERSION)
return;


dyld_all_image.count = extract_unsigned_integer (buf + 4, 4, byte_order);
--- 111,117 ----


/* Extract the fields. */
dyld_all_image.version = extract_unsigned_integer (buf, 4, byte_order);
! if (!darwin_dyld_version_ok ())
return;


dyld_all_image.count = extract_unsigned_integer (buf + 4, 4, byte_order);
***************
*** 125,130 ****
--- 137,143 ----
};


/* Lookup the value for a specific symbol. */
+
static CORE_ADDR
lookup_symbol_from_bfd (bfd *abfd, char *symname)
{
***************
*** 183,188 ****
--- 196,202 ----
/* Not used. I don't see how the main symbol file can be found: the
interpreter name is needed and it is known from the executable file.
Note that darwin-nat.c implements pid_to_exec_file. */
+
static int
open_symbol_file_object (void *from_ttyp)
{
***************
*** 190,195 ****
--- 204,210 ----
}


/* Build a list of currently loaded shared objects. See solib- svr4.c */
+
static struct so_list *
darwin_current_sos (void)
{
***************
*** 204,210 ****
/* Be sure image infos are loaded. */
darwin_load_image_infos ();


!   if (dyld_all_image.version != DYLD_VERSION)
      return NULL;

    image_info_size = ptr_len * 3;
--- 219,225 ----
    /* Be sure image infos are loaded.  */
    darwin_load_image_infos ();

!   if (!darwin_dyld_version_ok ())
      return NULL;

    image_info_size = ptr_len * 3;
***************
*** 262,267 ****
--- 277,283 ----

  /* Return 1 if PC lies in the dynamic symbol resolution code of the
     run time loader.  */
+
  int
  darwin_in_dynsym_resolve_code (CORE_ADDR pc)
  {
***************
*** 270,281 ****
--- 286,299 ----


/* No special symbol handling. */ + static void darwin_special_symbol_handling (void) { }

/* Shared library startup support. See documentation in solib- svr4.c */
+
static void
darwin_solib_create_inferior_hook (void)
{
***************
*** 348,354 ****


darwin_load_image_infos ();

! if (dyld_all_image.version == DYLD_VERSION)
create_solib_event_breakpoint (target_gdbarch, dyld_all_image.notifier);
}


--- 366,372 ----

darwin_load_image_infos ();

! if (darwin_dyld_version_ok ())
create_solib_event_breakpoint (target_gdbarch, dyld_all_image.notifier);
}


***************
*** 366,371 ****
--- 384,390 ----

  /* The section table is built from bfd sections using bfd VMAs.
     Relocate these VMAs according to solib info.  */
+
  static void
  darwin_relocate_section_addresses (struct so_list *so,
  				   struct target_section *sec)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]