Fix bug reported and analyzed by Olivier Crete:

* symfile.c (copy_section_addr_info): New function.
(symbol_file_add_with_addrs_or_offsets): Use it to save the
original set of address arguments, instead of handwritten code
that uses one length to allocate and a different length to
initialize.  Use make_cleanup_free_section_addr_info.
* symfile.h (copy_section_addr_info): New declaration.
* utils.c: #include "symfile.h".
(do_free_section_addr_info, make_cleanup_free_section_addr_info):
New functions.
* defs.h (make_cleanup_free_section_addr_info): New declaration.
* Makefile.in (utils.o): Update dependencies.
This commit is contained in:
Jim Blandy
2004-09-08 21:58:19 +00:00
parent 10b016c223
commit 7b90c3f96e
6 changed files with 68 additions and 8 deletions

View File

@@ -51,6 +51,7 @@
#include "charset.h"
#include "annotate.h"
#include "filenames.h"
#include "symfile.h"
#include "inferior.h" /* for signed_pointer_to_address */
@@ -260,6 +261,19 @@ make_cleanup_ui_file_delete (struct ui_file *arg)
return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
}
static void
do_free_section_addr_info (void *arg)
{
free_section_addr_info (arg);
}
struct cleanup *
make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
{
return make_my_cleanup (&cleanup_chain, do_free_section_addr_info, addrs);
}
struct cleanup *
make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
void *arg)