100 lines
3.4 KiB
Diff
100 lines
3.4 KiB
Diff
2004-10-26 Andrew Cagney <cagney@gnu.org>
|
|
|
|
* blockframe.c (find_pc_function): Use find_pc_section to find the
|
|
pc's section.
|
|
* block.c, symfile.c: Ditto.
|
|
|
|
*** ./gdb/blockframe.c.1 2004-10-26 21:21:46.517866240 -0400
|
|
--- ./gdb/blockframe.c 2004-10-26 21:24:16.345089040 -0400
|
|
***************
|
|
*** 288,294 ****
|
|
struct symbol *
|
|
find_pc_function (CORE_ADDR pc)
|
|
{
|
|
! return find_pc_sect_function (pc, find_pc_mapped_section (pc));
|
|
}
|
|
|
|
/* These variables are used to cache the most recent result
|
|
--- 288,311 ----
|
|
struct symbol *
|
|
find_pc_function (CORE_ADDR pc)
|
|
{
|
|
! struct bfd_section *section;
|
|
! struct symbol *symbol;
|
|
! /* To ensure that the symbol returned belongs to the correct setion
|
|
! (and that the last [random] symbol from the previous section
|
|
! isn't returned) try to find the section containing PC. First try
|
|
! the overlay code (which by default returns NULL); and second try
|
|
! the normal section code (which almost always succeeds). */
|
|
! section = find_pc_overlay (pc);
|
|
! if (section == NULL)
|
|
! {
|
|
! struct obj_section *obj_section = find_pc_section (pc);
|
|
! if (obj_section == NULL)
|
|
! section = NULL;
|
|
! else
|
|
! section = obj_section->the_bfd_section;
|
|
! }
|
|
! symbol = find_pc_sect_function (pc, section);
|
|
! return symbol;
|
|
}
|
|
|
|
/* These variables are used to cache the most recent result
|
|
--- ./gdb/symtab.c.1 2004-10-26 22:47:13.650423616 -0400
|
|
+++ ./gdb/symtab.c 2004-10-26 22:50:10.239577984 -0400
|
|
@@ -2176,7 +2176,20 @@
|
|
{
|
|
asection *section;
|
|
|
|
+ /* To ensure that the symbol returned belongs to the correct setion
|
|
+ (and that the last [random] symbol from the previous section
|
|
+ isn't returned) try to find the section containing PC. First try
|
|
+ the overlay code (which by default returns NULL); and second try
|
|
+ the normal section code (which almost always succeeds). */
|
|
section = find_pc_overlay (pc);
|
|
+ if (section == NULL)
|
|
+ {
|
|
+ struct obj_section *obj_section = find_pc_section (pc);
|
|
+ if (obj_section == NULL)
|
|
+ section = NULL;
|
|
+ else
|
|
+ section = obj_section->the_bfd_section;
|
|
+ }
|
|
if (pc_in_unmapped_range (pc, section))
|
|
pc = overlay_mapped_address (pc, section);
|
|
return find_pc_sect_line (pc, section, notcurrent);
|
|
--- ./gdb/block.c.1 2004-10-27 00:22:56.881319808 -0400
|
|
+++ ./gdb/block.c 2004-10-27 00:24:17.364084568 -0400
|
|
@@ -25,6 +25,7 @@
|
|
#include "symfile.h"
|
|
#include "gdb_obstack.h"
|
|
#include "cp-support.h"
|
|
+#include "objfiles.h"
|
|
|
|
/* This is used by struct block to store namespace-related info for
|
|
C++ files, namely using declarations and the current namespace in
|
|
@@ -153,7 +154,22 @@
|
|
struct block *
|
|
block_for_pc (CORE_ADDR pc)
|
|
{
|
|
- return block_for_pc_sect (pc, find_pc_mapped_section (pc));
|
|
+ struct bfd_section *section;
|
|
+ /* To ensure that the symbol returned belongs to the correct setion
|
|
+ (and that the last [random] symbol from the previous section
|
|
+ isn't returned) try to find the section containing PC. First try
|
|
+ the overlay code (which by default returns NULL); and second try
|
|
+ the normal section code (which almost always succeeds). */
|
|
+ section = find_pc_overlay (pc);
|
|
+ if (section == NULL)
|
|
+ {
|
|
+ struct obj_section *obj_section = find_pc_section (pc);
|
|
+ if (obj_section == NULL)
|
|
+ section = NULL;
|
|
+ else
|
|
+ section = obj_section->the_bfd_section;
|
|
+ }
|
|
+ return block_for_pc_sect (pc, section);
|
|
}
|
|
|
|
/* Now come some functions designed to deal with C++ namespace issues.
|