diff options
Diffstat (limited to 'gdb/rs6000-nat.c')
-rw-r--r-- | gdb/rs6000-nat.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index 996cba9..e6e90ee 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -738,6 +738,11 @@ xcoff_relocate_core (target) { int count; struct section_table *stp; + int update_coreops; + + /* We must update the to_sections field in the core_ops structure + now to avoid dangling pointer dereferences. */ + update_coreops = core_ops.to_sections === target->to_sections; count = target->to_sections_end - target->to_sections; count += 2; @@ -745,6 +750,14 @@ xcoff_relocate_core (target) xrealloc (target->to_sections, sizeof (struct section_table) * count); target->to_sections_end = target->to_sections + count; + + /* Update the to_sections field in the core_ops structure + if needed. */ + if (update_coreops) + { + core_ops.to_sections = target->to_sections; + core_ops.to_sections_end = target->to_sections_end; + } stp = target->to_sections_end - 2; /* "Why do we add bfd_section_vma?", I hear you cry. |