mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
gdb/fortran: Allow for matching symbols with missing scope
This commit allows symbol matching within Fortran code without having
to specify all of the symbol's scope. For example, given this Fortran
code:
module aaa
contains
subroutine foo
print *, "hello."
end subroutine foo
end module aaa
subroutine foo
print *, "hello."
end subroutine foo
program test
call foo
contains
subroutine foo
print *, "hello."
end subroutine foo
subroutine bar
use aaa
call foo
end subroutine bar
end program test
The user can now do this:
(gdb) b foo
Breakpoint 1 at 0x4006c2: foo. (3 locations)
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y <MULTIPLE>
1.1 y 0x00000000004006c2 in aaa::foo at nest.f90:4
1.2 y 0x0000000000400730 in foo at nest.f90:9
1.3 y 0x00000000004007c3 in test::foo at nest.f90:16
The user asks for a breakpoint on 'foo' and is given a breakpoint on
all three possible 'foo' locations. The user is, of course, still
able to specify the scope in order to place a single breakpoint on
just one of the foo functions (or use 'break -qualified foo' to break
on just the global foo).
gdb/ChangeLog:
* f-lang.c (f_language_defn): Use cp_get_symbol_name_matcher and
cp_search_name_hash.
gdb/testsuite/ChangeLog:
* gdb.fortran/nested-funcs-2.exp: Run tests with and without the
nested function prefix.
This commit is contained in:
committed by
Simon Marchi
parent
dae2db38eb
commit
034c427030
@@ -673,9 +673,9 @@ extern const struct language_defn f_language_defn =
|
||||
default_pass_by_reference,
|
||||
default_get_string,
|
||||
c_watch_location_expression,
|
||||
NULL, /* la_get_symbol_name_matcher */
|
||||
cp_get_symbol_name_matcher, /* la_get_symbol_name_matcher */
|
||||
iterate_over_symbols,
|
||||
default_search_name_hash,
|
||||
cp_search_name_hash,
|
||||
&default_varobj_ops,
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
@@ -121,12 +121,6 @@ proc do_bp_tests {with_src_prefix_p with_nest_prefix_p} {
|
||||
".*print \\\*, program_i ! post_hidden"
|
||||
gdb_test "p program_i" " = 30" "printing hidden global"
|
||||
|
||||
# Check that the methods in the container module still require the
|
||||
# module name as context.
|
||||
gdb_test_no_output "set confirm off"
|
||||
gdb_test "break print_from_module" \
|
||||
"Function \\\"print_from_module\\\" not defined."
|
||||
|
||||
# Check info symbol, whatis and ptype can find information on
|
||||
# these nested functions.
|
||||
foreach entry \
|
||||
@@ -147,10 +141,7 @@ proc do_bp_tests {with_src_prefix_p with_nest_prefix_p} {
|
||||
}
|
||||
|
||||
foreach_with_prefix src_prefix { 0 1 } {
|
||||
# For now this loop is only run with a value of '1'. A later
|
||||
# patch will extend this with the value '0', at which point this
|
||||
# comment will be removed.
|
||||
foreach_with_prefix nest_prefix { 1 } {
|
||||
foreach_with_prefix nest_prefix { 0 1 } {
|
||||
do_bp_tests ${src_prefix} ${nest_prefix}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user