Remove make_cleanup_free_so
make_cleanup_free_so is used in a single spot. This patch introduces a unique pointer wrapper for struct so_list, and changes this spot to use it. ChangeLog 2017-08-03 Tom Tromey <tom@tromey.com> * utils.h (make_cleanup_free_so): Remove. * utils.c (do_free_so, make_cleanup_free_so): Remove. * solist.h (struct so_deleter): New. (so_list_up): New typedef. * solib-svr4.c (svr4_read_so_list): Use so_list_up.
This commit is contained in:
parent
e3ad2841b1
commit
b3bc84537b
@ -1,3 +1,11 @@
|
||||
2017-08-03 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* utils.h (make_cleanup_free_so): Remove.
|
||||
* utils.c (do_free_so, make_cleanup_free_so): Remove.
|
||||
* solist.h (struct so_deleter): New.
|
||||
(so_list_up): New typedef.
|
||||
* solib-svr4.c (svr4_read_so_list): Use so_list_up.
|
||||
|
||||
2017-08-03 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* utils.h (make_cleanup_restore_current_language): Remove.
|
||||
|
@ -1350,21 +1350,15 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
|
||||
|
||||
for (; lm != 0; prev_lm = lm, lm = next_lm)
|
||||
{
|
||||
struct so_list *newobj;
|
||||
struct cleanup *old_chain;
|
||||
int errcode;
|
||||
char *buffer;
|
||||
|
||||
newobj = XCNEW (struct so_list);
|
||||
old_chain = make_cleanup_free_so (newobj);
|
||||
so_list_up newobj (XCNEW (struct so_list));
|
||||
|
||||
lm_info_svr4 *li = lm_info_read (lm);
|
||||
newobj->lm_info = li;
|
||||
if (li == NULL)
|
||||
{
|
||||
do_cleanups (old_chain);
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
|
||||
next_lm = li->l_next;
|
||||
|
||||
@ -1373,7 +1367,6 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
|
||||
warning (_("Corrupted shared library list: %s != %s"),
|
||||
paddress (target_gdbarch (), prev_lm),
|
||||
paddress (target_gdbarch (), li->l_prev));
|
||||
do_cleanups (old_chain);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1388,7 +1381,6 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
|
||||
|
||||
first_l_name = li->l_name;
|
||||
info->main_lm_addr = li->lm_addr;
|
||||
do_cleanups (old_chain);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1404,7 +1396,6 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
|
||||
if (first_l_name == 0 || li->l_name != first_l_name)
|
||||
warning (_("Can't read pathname for load map: %s."),
|
||||
safe_strerror (errcode));
|
||||
do_cleanups (old_chain);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1416,15 +1407,12 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
|
||||
/* If this entry has no name, or its name matches the name
|
||||
for the main executable, don't include it in the list. */
|
||||
if (! newobj->so_name[0] || match_main (newobj->so_name))
|
||||
{
|
||||
do_cleanups (old_chain);
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
|
||||
discard_cleanups (old_chain);
|
||||
newobj->next = 0;
|
||||
**link_ptr_ptr = newobj;
|
||||
*link_ptr_ptr = &newobj->next;
|
||||
/* Don't free it now. */
|
||||
**link_ptr_ptr = newobj.release ();
|
||||
*link_ptr_ptr = &(**link_ptr_ptr)->next;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
12
gdb/solist.h
12
gdb/solist.h
@ -179,6 +179,18 @@ struct target_so_ops
|
||||
/* Free the memory associated with a (so_list *). */
|
||||
void free_so (struct so_list *so);
|
||||
|
||||
/* A deleter that calls free_so. */
|
||||
struct so_deleter
|
||||
{
|
||||
void operator() (struct so_list *so) const
|
||||
{
|
||||
free_so (so);
|
||||
}
|
||||
};
|
||||
|
||||
/* A unique pointer to a so_list. */
|
||||
typedef std::unique_ptr<so_list, so_deleter> so_list_up;
|
||||
|
||||
/* Return address of first so_list entry in master shared object list. */
|
||||
struct so_list *master_so_list (void);
|
||||
|
||||
|
18
gdb/utils.c
18
gdb/utils.c
@ -268,24 +268,6 @@ make_cleanup_value_free (struct value *value)
|
||||
return make_cleanup (do_value_free, value);
|
||||
}
|
||||
|
||||
/* Helper for make_cleanup_free_so. */
|
||||
|
||||
static void
|
||||
do_free_so (void *arg)
|
||||
{
|
||||
struct so_list *so = (struct so_list *) arg;
|
||||
|
||||
free_so (so);
|
||||
}
|
||||
|
||||
/* Make cleanup handler calling free_so for SO. */
|
||||
|
||||
struct cleanup *
|
||||
make_cleanup_free_so (struct so_list *so)
|
||||
{
|
||||
return make_cleanup (do_free_so, so);
|
||||
}
|
||||
|
||||
/* Helper function for make_cleanup_clear_parser_state. */
|
||||
|
||||
static void
|
||||
|
@ -110,9 +110,6 @@ extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops);
|
||||
extern struct cleanup *make_cleanup_value_free_to_mark (struct value *);
|
||||
extern struct cleanup *make_cleanup_value_free (struct value *);
|
||||
|
||||
struct so_list;
|
||||
extern struct cleanup *make_cleanup_free_so (struct so_list *so);
|
||||
|
||||
/* A deleter for a hash table. */
|
||||
struct htab_deleter
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user