Standardize darwin's lm_info

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.
This commit is contained in:
Simon Marchi 2017-04-28 17:16:12 -04:00
parent 1670f9c154
commit 434a402395
2 changed files with 11 additions and 13 deletions

View 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

View 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.