aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2019-09-02 23:31:10 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2019-10-03 21:25:22 +0100
commit179aed7fdc7864ad3623a680b371a98baadb7705 (patch)
tree880688ca6f543acc9afb09ccf88d89ecd563ae8c /gdb
parent0a4b09130aa8c2d2e1c1605a69962fe0a2499479 (diff)
downloadgdb-179aed7fdc7864ad3623a680b371a98baadb7705.zip
gdb-179aed7fdc7864ad3623a680b371a98baadb7705.tar.gz
gdb-179aed7fdc7864ad3623a680b371a98baadb7705.tar.bz2
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. * NEWS: Add entry about nested function support. gdb/testsuite/ChangeLog: * gdb.fortran/nested-funcs-2.exp: Run tests with and without the nested function prefix.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/NEWS9
-rw-r--r--gdb/f-lang.c4
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.fortran/nested-funcs-2.exp11
5 files changed, 23 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index afda753..446c455 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2019-10-03 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * f-lang.c (f_language_defn): Use cp_get_symbol_name_matcher and
+ cp_search_name_hash.
+ * NEWS: Add entry about nested function support.
+
2019-10-03 Bernhard Heckel <bernhard.heckel@intel.com>
Andrew Burgess <andrew.burgess@embecosm.com>
diff --git a/gdb/NEWS b/gdb/NEWS
index 3211ec9..25e67e4 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -37,6 +37,15 @@
* New convenience variable $_ada_exception holds the address of the
Ada exception being thrown. This is set by Ada-related catchpoints.
+* GDB can now place breakpoints on nested functions and subroutines in
+ Fortran code. The '::' operator can be used between parent and
+ child scopes when placing breakpoints, for example:
+
+ (gdb) break outer_function::inner_function
+
+ The 'outer_function::' prefix is only needed if 'inner_function' is
+ not visible in the current scope.
+
* Python API
** The gdb.Value type has a new method 'format_string' which returns a
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index ce7f147..5681379 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -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,
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 6441c1b..fd76144 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-10-03 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * gdb.fortran/nested-funcs-2.exp: Run tests with and without the
+ nested function prefix.
+
2019-10-03 Bernhard Heckel <bernhard.heckel@intel.com>
Richard Bunt <richard.bunt@arm.com>
Andrew Burgess <andrew.burgess@embecosm.com>
diff --git a/gdb/testsuite/gdb.fortran/nested-funcs-2.exp b/gdb/testsuite/gdb.fortran/nested-funcs-2.exp
index 4e121cd..4dc49bc 100644
--- a/gdb/testsuite/gdb.fortran/nested-funcs-2.exp
+++ b/gdb/testsuite/gdb.fortran/nested-funcs-2.exp
@@ -124,12 +124,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 \
@@ -150,10 +144,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}
}
}