diff options
author | Jim Blandy <jimb@codesourcery.com> | 2004-09-08 21:58:19 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2004-09-08 21:58:19 +0000 |
commit | 7b90c3f96efc132cac934b3f2b43da899d46eae0 (patch) | |
tree | c956505ed511fa6e4ec307ae552a7492570a7351 /gdb/utils.c | |
parent | 10b016c223f165a06dbd20e46307c9a0bfbf0ee2 (diff) | |
download | gdb-7b90c3f96efc132cac934b3f2b43da899d46eae0.zip gdb-7b90c3f96efc132cac934b3f2b43da899d46eae0.tar.gz gdb-7b90c3f96efc132cac934b3f2b43da899d46eae0.tar.bz2 |
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.
Diffstat (limited to 'gdb/utils.c')
-rw-r--r-- | gdb/utils.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gdb/utils.c b/gdb/utils.c index e350c25..10c40c7 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -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) |