Standardize darwin's lm_info
authorSimon Marchi <simon.marchi@ericsson.com>
Fri, 28 Apr 2017 21:16:12 +0000 (17:16 -0400)
committerSimon Marchi <simon.marchi@ericsson.com>
Fri, 28 Apr 2017 21:16:12 +0000 (17:16 -0400)
Darwin's lm_info structure is used a little bit differently than the
other solib implementations.  The other implementations first allocate
an so_list object, then instanciate their specific lm_info structure,
and assign it to so_list::lm_info.

The Darwin implementation allocates both at the same time
(darwin_so_list).  This patch changes it to be like the others, so that
we'll be able to do some generalizations later.

gdb/ChangeLog:

* solib-darwin.c (struct darwin_so_list): Remove.
(darwin_current_sos): Allocate an so_list object instead of a
darwin_so_list, separately allocate an lm_info object.
(darwin_free_so): Free lm_info.

gdb/ChangeLog
gdb/solib-darwin.c

index a5ecf6eb829d74a6a68aa57026a7618bc4c2f5a3..8f7f552cb3b2b85c716bfb1baa076bff733bfd7b 100644 (file)
@@ -1,3 +1,10 @@
+2017-04-28  Simon Marchi  <simon.marchi@ericsson.com>
+
+       * solib-darwin.c (struct darwin_so_list): Remove.
+       (darwin_current_sos): Allocate an so_list object instead of a
+       darwin_so_list, separately allocate an lm_info object.
+       (darwin_free_so): Free lm_info.
+
 2017-04-28  John Baldwin  <jhb@FreeBSD.org>
 
        * mips-tdep.c (print_gp_register_row): Replace printf_filtered
index 0b975569e25c81f03ec1fc1f216d0aeeab534e67..c507e13caf7437783adb66b09e3aa22264e18ce1 100644 (file)
@@ -159,14 +159,6 @@ struct lm_info
   CORE_ADDR lm_addr;
 };
 
-struct darwin_so_list
-{
-  /* Common field.  */
-  struct so_list sl;
-  /* Darwin specific data.  */
-  struct lm_info li;
-};
-
 /* Lookup the value for a specific symbol.  */
 
 static CORE_ADDR
@@ -271,7 +263,6 @@ darwin_current_sos (void)
       unsigned long hdr_val;
       char *file_path;
       int errcode;
-      struct darwin_so_list *dnew;
       struct so_list *newobj;
       struct cleanup *old_chain;
 
@@ -302,11 +293,10 @@ darwin_current_sos (void)
        break;
 
       /* Create and fill the new so_list element.  */
-      dnew = XCNEW (struct darwin_so_list);
-      newobj = &dnew->sl;
-      old_chain = make_cleanup (xfree, dnew);
+      newobj = XCNEW (struct so_list);
+      old_chain = make_cleanup (xfree, newobj);
 
-      newobj->lm_info = &dnew->li;
+      newobj->lm_info = XCNEW (struct lm_info);
 
       strncpy (newobj->so_name, file_path, SO_NAME_MAX_PATH_SIZE - 1);
       newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
@@ -587,6 +577,7 @@ darwin_clear_solib (void)
 static void
 darwin_free_so (struct so_list *so)
 {
+  xfree (so->lm_info);
 }
 
 /* The section table is built from bfd sections using bfd VMAs.