Make skip without argument skip the current inline function
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Wed, 25 Dec 2019 15:35:32 +0000 (16:35 +0100)
committerBernd Edlinger <bernd.edlinger@hotmail.de>
Tue, 14 Jan 2020 20:20:16 +0000 (21:20 +0100)
Previously always the outermost function block was used, but
since skip is now able to skip over inline functions it is more
natural to skip the inline function that the program is currently
executing.

gdb:
2020-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* skip.c (skip_function_command): Make skip w/o arguments use the
name of the inlined function if pc is inside any inlined function.

gdb/testsuite:
2020-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* gdb.base/skip-inline.exp: Extend test.

gdb/ChangeLog
gdb/skip.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/skip-inline.exp

index 545cfb36ce18a3502ee4fd4c478c05ef45c2180d..3f9a6ca550f819dc3c8f99dfa4e1d7513c2de49f 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       * skip.c (skip_function_command): Make skip w/o arguments use the
+       name of the inlined function if pc is inside any inlined function.
+
 2020-01-14  Luis Machado  <luis.machado@linaro.org>
 
        * inf-ptrace.c (inf_ptrace_target::resume): Update comments.
index 05be42ab58d73ea2e94c0d50212b4c6928006758..419dd7a46821f4f7f34087956ed432e82322159a 100644 (file)
@@ -209,18 +209,15 @@ skip_function_command (const char *arg, int from_tty)
   /* Default to the current function if no argument is given.  */
   if (arg == NULL)
     {
+      frame_info *fi = get_selected_frame (_("No default function now."));
+      struct symbol *sym = get_frame_function (fi);
       const char *name = NULL;
-      CORE_ADDR pc;
 
-      if (!last_displayed_sal_is_valid ())
-       error (_("No default function now."));
-
-      pc = get_last_displayed_addr ();
-      if (!find_pc_partial_function (pc, &name, NULL, NULL))
-       {
-         error (_("No function found containing current program point %s."),
-                 paddress (get_current_arch (), pc));
-       }
+      if (sym != NULL)
+       name = sym->print_name ();
+      else
+       error (_("No function found containing current program point %s."),
+              paddress (get_current_arch (), get_frame_pc (fi)));
       skip_function (name);
       return;
     }
index 6491d4d44b6d5bb03f30d3ec4882de2bb6bf6364..4c1e6040d6738bd052fd0d5ab22d1c5a3fe6c25e 100644 (file)
@@ -1,3 +1,7 @@
+2020-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       * gdb.base/skip-inline.exp: Extend test.
+
 2020-01-13  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.dwarf2/dw2-bad-elf-other.S: New file.
index 89319ad3720d710ac57cab1ee63e0278b4555b02..ff85f3bbf250e5ef641b926b2cff30930987c6aa 100644 (file)
@@ -76,3 +76,17 @@ with_test_prefix "triple step" {
     gdb_test "step 3" ".*" "step over baz, again"
     gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main"
 }
+
+if ![runto_main] {
+    fail "can't run to main"
+    return
+}
+
+gdb_test "skip delete" ".*" "skip delete"
+
+with_test_prefix "skip current frame" {
+    gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main"
+    gdb_test "step" ".*" "step into foo"
+    gdb_test "bt" "\\s*\\#0\\s+foo.*" "in the foo"
+    gdb_test "skip" "Function foo will be skipped when stepping\." "skip"
+}