aboutsummaryrefslogtreecommitdiff
path: root/gdb/solib-svr4.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2017-04-28 22:43:54 -0600
committerTom Tromey <tom@tromey.com>2017-08-03 07:58:59 -0600
commitb3bc84537bc6de78e2bbd550ce9c57dd4b7e2ec6 (patch)
tree26d6e6f337d8b20f02876c2b36b990b4a1a5c6fc /gdb/solib-svr4.c
parente3ad2841b1c75837a901618651fed23013643e3f (diff)
downloadgdb-b3bc84537bc6de78e2bbd550ce9c57dd4b7e2ec6.zip
gdb-b3bc84537bc6de78e2bbd550ce9c57dd4b7e2ec6.tar.gz
gdb-b3bc84537bc6de78e2bbd550ce9c57dd4b7e2ec6.tar.bz2
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.
Diffstat (limited to 'gdb/solib-svr4.c')
-rw-r--r--gdb/solib-svr4.c24
1 files changed, 6 insertions, 18 deletions
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 080fd79..f99e2e2 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -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;