summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorCraig Silverstein <csilvers@google.com>2008-07-14 00:10:09 +0000
committerCraig Silverstein <csilvers@google.com>2008-07-14 00:10:09 +0000
commit3bb704d22ba37e8386fd5a90138368e4a77c14cd (patch)
tree115a9b4bb3b4de84f6afa7f12fca62e8567882dc /bfd
parent78944a52395e709d2cb1cf07b58cbe6a9ec313ce (diff)
downloadgdb-3bb704d22ba37e8386fd5a90138368e4a77c14cd.tar.gz
2008-07-13 Craig Silverstein <csilvers@google.com>
* dwarf2.c (struct dwarf2_debug): New variable info_ptr_memory. (find_line): Use info_ptr_memory instead of sec_info_ptr. (_bfd_dwarf2_cleanup_debug_info): Likewise.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/dwarf2.c19
2 files changed, 20 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5c02856972c..df92900d110 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2008-07-13 Craig Silverstein <csilvers@google.com>
+
+ * dwarf2.c (struct dwarf2_debug): New variable info_ptr_memory.
+ (find_line): Use info_ptr_memory instead of sec_info_ptr.
+ (_bfd_dwarf2_cleanup_debug_info): Likewise.
+
2008-07-12 Jie Zhang <jie.zhang@analog.com>
Revert
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index f95b649aca5..73b7b56cc50 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -104,6 +104,12 @@ struct dwarf2_debug
asection *sec;
bfd_byte *sec_info_ptr;
+ /* A pointer to the memory block allocated for info_ptr. Neither
+ info_ptr nor sec_info_ptr are guaranteed to stay pointing to the
+ beginning of the malloc block. This is used only to free the
+ memory later. */
+ bfd_byte *info_ptr_memory;
+
/* Pointer to the symbol table. */
asymbol **syms;
@@ -2915,8 +2921,9 @@ find_line (bfd *abfd,
total_size = msec->size;
if (! read_section (debug_bfd, ".debug_info", ".zdebug_info",
symbols, 0,
- &stash->info_ptr, &total_size))
+ &stash->info_ptr_memory, &total_size))
goto done;
+ stash->info_ptr = stash->info_ptr_memory;
stash->info_ptr_end = stash->info_ptr + total_size;
}
else
@@ -2931,10 +2938,11 @@ find_line (bfd *abfd,
if (all_uncompressed)
{
/* Case 2: multiple sections, but none is compressed. */
- stash->info_ptr = bfd_malloc (total_size);
- if (stash->info_ptr == NULL)
+ stash->info_ptr_memory = bfd_malloc (total_size);
+ if (stash->info_ptr_memory == NULL)
goto done;
+ stash->info_ptr = stash->info_ptr_memory;
stash->info_ptr_end = stash->info_ptr;
for (msec = find_debug_info (debug_bfd, NULL);
@@ -2963,7 +2971,8 @@ find_line (bfd *abfd,
else
{
/* Case 3: multiple sections, some or all compressed. */
- stash->info_ptr = bfd_malloc (1);
+ stash->info_ptr_memory = bfd_malloc (1);
+ stash->info_ptr = stash->info_ptr_memory;
stash->info_ptr_end = stash->info_ptr;
for (msec = find_debug_info (debug_bfd, NULL);
msec;
@@ -3292,5 +3301,5 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abfd)
free (stash->dwarf_abbrev_buffer);
free (stash->dwarf_line_buffer);
free (stash->dwarf_ranges_buffer);
- free (stash->sec_info_ptr);
+ free (stash->info_ptr_memory);
}