PR symtab/17559

Basically the problem is that "symtab" is ambiguous.
Is it the primary symtab (where we canonically think of
blockvectors as being stored) or is it for a specific file
(where each file's line table is stored) ?

gdb_disassembly wants the symtab that contains the line table
but is instead getting the primary symtab.

gdb/ChangeLog:

	PR symtab/17559
	* symtab.c (find_pc_line_symtab): New function.
	* symtab.h (find_pc_line_symtab): Declare.
	* disasm.c (gdb_disassembly): Call find_pc_line_symtab instead of
	find_pc_symtab.
	* tui/tui-disasm.c (tui_set_disassem_content): Ditto.
	* tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Ditto.
	* tui/tui-source.c (tui_vertical_source_scroll): Ditto.
	* tui/tui-win.c (make_visible_with_new_height): Ditto.
	* tui/tui-winsource.c (tui_horizontal_source_scroll): Ditto.
	(tui_display_main): Call find_pc_line_symtab instead of find_pc_line.

gdb/testsuite/ChangeLog:

	PR symtab/17559
	* gdb.base/line-symtabs.exp: New file.
	* gdb.base/line-symtabs.c: New file.
	* gdb.base/line-symtabs.h: New file.
This commit is contained in:
Doug Evans
2014-11-15 10:08:34 -08:00
parent 2097ae2584
commit 34248c3af7
13 changed files with 131 additions and 12 deletions

View File

@@ -2431,6 +2431,19 @@ find_pc_line (CORE_ADDR pc, int notcurrent)
pc = overlay_mapped_address (pc, section);
return find_pc_sect_line (pc, section, notcurrent);
}
/* See symtab.h. */
struct symtab *
find_pc_line_symtab (CORE_ADDR pc)
{
struct symtab_and_line sal;
/* This always passes zero for NOTCURRENT to find_pc_line.
There are currently no callers that ever pass non-zero. */
sal = find_pc_line (pc, 0);
return sal.symtab;
}
/* Find line number LINE in any symtab whose name is the same as
SYMTAB.