diff options
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index b8b648ac8d0..3025bbdcb04 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -708,6 +708,8 @@ struct die_info *read_comp_unit PARAMS ((char *, bfd *)); static void free_die_list PARAMS ((struct die_info *)); +static struct cleanup *make_cleanup_free_die_list (struct die_info *); + static void process_die PARAMS ((struct die_info *, struct objfile *)); static char *dwarf2_linkage_name PARAMS ((struct die_info *)); @@ -1322,7 +1324,7 @@ psymtab_to_symtab_1 (pst) dies = read_comp_unit (info_ptr, abfd); - make_cleanup ((make_cleanup_func) free_die_list, dies); + make_cleanup_free_die_list (dies); /* Do line number decoding in read_file_scope () */ process_die (dies, objfile); @@ -1998,8 +2000,7 @@ dwarf2_add_member_fn (fip, die, type, objfile) (fip->nfnfields + DW_FIELD_ALLOC_CHUNK) * sizeof (struct fnfieldlist)); if (fip->nfnfields == 0) - make_cleanup ((make_cleanup_func) free_current_contents, - &fip->fnfieldlists); + make_cleanup (free_current_contents, &fip->fnfieldlists); } flp = &fip->fnfieldlists[fip->nfnfields]; flp->name = fieldname; @@ -2506,8 +2507,7 @@ read_array_type (die, objfile) xrealloc (range_types, (ndim + DW_FIELD_ALLOC_CHUNK) * sizeof (struct type *)); if (ndim == 0) - make_cleanup ((make_cleanup_func) free_current_contents, - &range_types); + make_cleanup (free_current_contents, &range_types); } range_types[ndim++] = create_range_type (NULL, index_type, low, high); } @@ -2958,6 +2958,19 @@ free_die_list (dies) } } +static void +do_free_die_list_cleanup (void *dies) +{ + free_die_list (dies); +} + +static struct cleanup * +make_cleanup_free_die_list (struct die_info *dies) +{ + return make_cleanup (do_free_die_list_cleanup, dies); +} + + /* Read the contents of the section at OFFSET and of size SIZE from the object file specified by OBJFILE into the psymbol_obstack and return it. */ @@ -3760,8 +3773,7 @@ dwarf_decode_lines (offset, comp_dir, abfd) line_ptr += 1; lh.standard_opcode_lengths = (unsigned char *) xmalloc (lh.opcode_base * sizeof (unsigned char)); - back_to = make_cleanup ((make_cleanup_func) free_current_contents, - &lh.standard_opcode_lengths); + back_to = make_cleanup (free_current_contents, &lh.standard_opcode_lengths); lh.standard_opcode_lengths[0] = 1; for (i = 1; i < lh.opcode_base; ++i) @@ -3780,7 +3792,7 @@ dwarf_decode_lines (offset, comp_dir, abfd) xrealloc (dirs.dirs, (dirs.num_dirs + DIR_ALLOC_CHUNK) * sizeof (char *)); if (dirs.num_dirs == 0) - make_cleanup ((make_cleanup_func) free_current_contents, &dirs.dirs); + make_cleanup (free_current_contents, &dirs.dirs); } dirs.dirs[dirs.num_dirs++] = cur_dir; } @@ -3797,8 +3809,7 @@ dwarf_decode_lines (offset, comp_dir, abfd) (files.num_files + FILE_ALLOC_CHUNK) * sizeof (struct fileinfo)); if (files.num_files == 0) - make_cleanup ((make_cleanup_func) free_current_contents, - &files.files); + make_cleanup (free_current_contents, &files.files); } files.files[files.num_files].name = cur_file; files.files[files.num_files].dir = @@ -3873,8 +3884,7 @@ dwarf_decode_lines (offset, comp_dir, abfd) (files.num_files + FILE_ALLOC_CHUNK) * sizeof (struct fileinfo)); if (files.num_files == 0) - make_cleanup ((make_cleanup_func) free_current_contents, - &files.files); + make_cleanup (free_current_contents, &files.files); } files.files[files.num_files].name = cur_file; files.files[files.num_files].dir = @@ -4346,7 +4356,7 @@ dwarf2_const_value_data (struct attribute *attr, if (TYPE_UNSIGNED (SYMBOL_TYPE (sym))) l &= ((LONGEST) 1 << bits) - 1; else - l = (l << (sizeof (l) - bits)) >> (sizeof (l) - bits); + l = (l << (sizeof (l) * 8 - bits)) >> (sizeof (l) * 8 - bits); } SYMBOL_VALUE (sym) = l; |