diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index fd88b8ca328..2f981cc895f 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1078,7 +1078,8 @@ jump_command (const char *arg, int from_tty)
     error_no_arg (_("starting address"));
 
   std::vector<symtab_and_line> sals
-    = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE);
+    = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE,
+				       current_program_space);
   if (sals.size () != 1)
     error (_("Unreasonable jump request"));
 
diff --git a/gdb/linespec.c b/gdb/linespec.c
index d3def7ae070..5969c46e685 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -3231,7 +3231,8 @@ decode_line_with_current_source (const char *string, int flags)
 /* See linespec.h.  */
 
 std::vector<symtab_and_line>
-decode_line_with_last_displayed (const char *string, int flags)
+decode_line_with_last_displayed (const char *string, int flags,
+				 program_space *search_pspace)
 {
   if (string == 0)
     error (_("Empty line specification."));
@@ -3240,10 +3241,10 @@ decode_line_with_last_displayed (const char *string, int flags)
 						      current_language);
   std::vector<symtab_and_line> sals
     = (last_displayed_sal_is_valid ()
-       ? decode_line_1 (locspec.get (), flags, NULL,
+       ? decode_line_1 (locspec.get (), flags, search_pspace,
 			get_last_displayed_symtab (),
 			get_last_displayed_line ())
-       : decode_line_1 (locspec.get (), flags, NULL, NULL, 0));
+       : decode_line_1 (locspec.get (), flags, search_pspace, NULL, 0));
 
   if (*string)
     error (_("Junk at end of line specification: %s"), string);
diff --git a/gdb/linespec.h b/gdb/linespec.h
index d5e7334fe2d..70e04cbbb21 100644
--- a/gdb/linespec.h
+++ b/gdb/linespec.h
@@ -142,7 +142,7 @@ extern std::vector<symtab_and_line> decode_line_with_current_source
    codepoint's values as defaults, or nothing if they aren't valid.  */
 
 extern std::vector<symtab_and_line> decode_line_with_last_displayed
-    (const char *, int);
+    (const char *, int, program_space *search_pspace = nullptr);
 
 /* Does P represent one of the keywords?  If so, return
    the keyword.  If not, return NULL.  */
diff --git a/gdb/testsuite/gdb.base/jump.exp b/gdb/testsuite/gdb.base/jump.exp
old mode 100644
new mode 100755
index 032c4a6279d..1040f6355a5
--- a/gdb/testsuite/gdb.base/jump.exp
+++ b/gdb/testsuite/gdb.base/jump.exp
@@ -25,92 +25,124 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     }
 
 
-# Start with a fresh gdb
-
-clean_restart ${binfile}
-
-if {![runto_main]} {
-  return -1
-}
-
-# Set a breakpoint on the statement that we're about to jump to.
-# The statement doesn't contain a function call.
-#
-set bp_on_non_call 0
-set non_call_line [gdb_get_line_number "bp-on-non-call"]
-gdb_test_multiple "break $non_call_line" "break before jump to non-call" {
-    -re "\[Bb\]reakpoint (${decimal}) at ${hex}: file .*${srcfile}, line $non_call_line.*$gdb_prompt $" {
-	set bp_on_non_call $expect_out(1,string)
-	pass "break before jump to non-call"
+proc do_tests {} {
+    global decimal hex srcfile gdb_prompt
+    # Set a breakpoint on the statement that we're about to jump to.
+    # The statement doesn't contain a function call.
+    #
+    set bp_on_non_call 0
+    set non_call_line [gdb_get_line_number "bp-on-non-call"]
+    gdb_test_multiple "break $non_call_line" "break before jump to non-call" {
+	-re "\[Bb\]reakpoint (${decimal}) at ${hex}: .*${srcfile}.*$non_call_line.*$gdb_prompt $" {
+	    set bp_on_non_call $expect_out(1,string)
+	    pass "break before jump to non-call"
+	}
     }
-}
 
-# Can we jump to the statement?  Do we stop there?
-#
-gdb_test "jump $non_call_line" "Breakpoint ${decimal}, .*${srcfile}:$non_call_line.*" \
-    "jump to non-call"
-
-# Set a breakpoint on the statement that we're about to jump to.
-# The statement does contain a function call.
-#
-set bp_on_call 0
-set call_line [gdb_get_line_number "bp-on-call"]
-gdb_test_multiple "break $call_line" "break before jump to call" {
-    -re "\[Bb\]reakpoint (${decimal}) at ${hex}: file .*${srcfile}, line $call_line.*$gdb_prompt $" {
-	set bp_on_call $expect_out(1,string)
-	pass "break before jump to call"
+    # Can we jump to the statement?  Do we stop there?
+    #
+    gdb_test "jump $non_call_line" "Breakpoint ${decimal}(\.${decimal})?, .*${srcfile}:$non_call_line.*" \
+	    "jump to non-call"
+
+    # Set a breakpoint on the statement that we're about to jump to.
+    # The statement does contain a function call.
+    #
+    set bp_on_call 0
+    set call_line [gdb_get_line_number "bp-on-call"]
+    gdb_test_multiple "break $call_line" "break before jump to call" {
+	-re "\[Bb\]reakpoint (${decimal}) at ${hex}: .*${srcfile}.*$call_line.*$gdb_prompt $" {
+	    set bp_on_call $expect_out(1,string)
+	    pass "break before jump to call"
+	}
     }
-}
 
-# Can we jump to the statement?  Do we stop there?
-#
-gdb_test "jump $call_line" \
-    "Breakpoint ${decimal}, .*${srcfile}:$call_line.*" \
-    "jump to call"
-
-# If we disable the breakpoint at the function call, and then
-# if we jump to that statement, do we not stop there, but at
-# the following breakpoint?
-#
-gdb_test_no_output "disable $bp_on_call" "disable breakpoint on call"
-
-gdb_test "jump $call_line" "Breakpoint ${decimal}, .*${srcfile}:$non_call_line.*" \
-    "jump to call with disabled breakpoint"
+    # Can we jump to the statement?  Do we stop there?
+    #
+    gdb_test "jump $call_line" \
+	"Breakpoint ${decimal}(\.${decimal})?, .*${srcfile}:$call_line.*" \
+	    "jump to call"
+
+    # If we disable the breakpoint at the function call, and then
+    # if we jump to that statement, do we not stop there, but at
+    # the following breakpoint?
+    #
+    gdb_test_no_output "disable $bp_on_call" "disable breakpoint on call"
+
+    gdb_test "jump $call_line" "Breakpoint ${decimal}(\.${decimal})?, .*${srcfile}:$non_call_line.*" \
+	    "jump to call with disabled breakpoint"
+
+    # Verify that GDB responds gracefully to the "jump" command without
+    # an argument.
+    #
+    gdb_test "jump" "Argument required .starting address.*" \
+	    "jump without argument disallowed"
+
+
+    # Verify that GDB responds gracefully to the "jump" command with
+    # trailing junk.
+    #
+    gdb_test "jump $call_line 100" \
+	    "malformed linespec error: unexpected number, \"100\"" \
+	    "jump with trailing argument junk"
+
+
+    # Verify that GDB responds gracefully to a request to jump out of
+    # the current function.  (Note that this will very likely cause the
+    # inferior to die.  Be prepared to rerun the inferior, if further
+    # testing is desired.)
+    #
+    # Try it both ways: confirming and not confirming the jump.
+    #
+
+    set out_line [gdb_get_line_number "out-of-func"]
+    gdb_test "jump $out_line" \
+	    "Not confirmed.*" \
+	    "aborted jump out of current function" \
+	    "Line $out_line is not in `main'.  Jump anyway.*y or n. $" \
+	    "n"
+
+    gdb_test "jump $out_line" \
+	    "Continuing at.*" \
+	    "jump out of current function" \
+	    "Line $out_line is not in `main'.  Jump anyway.*y or n. $" \
+	    "y"
+}
 
-# Verify that GDB responds gracefully to the "jump" command without
-# an argument.
-#
-gdb_test "jump" "Argument required .starting address.*" \
-    "jump without argument disallowed"
 
+# Start with a fresh gdb.
 
-# Verify that GDB responds gracefully to the "jump" command with
-# trailing junk.
-#
-gdb_test "jump $call_line 100" \
-    "malformed linespec error: unexpected number, \"100\"" \
-    "jump with trailing argument junk"
+clean_restart ${binfile}
 
+set inferiors 1
+if {![use_gdb_stub]} {
+    set inferiors 2
+}
 
-# Verify that GDB responds gracefully to a request to jump out of
-# the current function.  (Note that this will very likely cause the
-# inferior to die.  Be prepared to rerun the inferior, if further
-# testing is desired.)
-#
-# Try it both ways: confirming and not confirming the jump.
-#
+# Run to main, add inferiors if needed.
+for {set inf 1} {$inf <= $inferiors} {incr inf} {
+    if {$inf != 1} {
+	# Start a new inferior, and run it with the same executable.
+	gdb_test "add-inferior -exec ${binfile}" \
+	    "Added inferior ${inf}.*" \
+	    "add inferior ${inf} with -exec "
+	gdb_test "inferior ${inf}" \
+	    "Switching to inferior ${inf} .*" \
+	    "switch to inferior ${inf}"
+    }
+    if ![runto_main] then {
+	perror "Couldn't run inferior ${inf} to main"
+	return -1
+    }
+}
 
-set out_line [gdb_get_line_number "out-of-func"]
-gdb_test "jump $out_line" \
-    "Not confirmed.*" \
-    "aborted jump out of current function" \
-    "Line $out_line is not in `main'.  Jump anyway.*y or n. $" \
-    "n"
-
-gdb_test "jump $out_line" \
-    "Continuing at.*" \
-    "jump out of current function" \
-    "Line $out_line is not in `main'.  Jump anyway.*y or n. $" \
-    "y"
+# Run tests on all inferiors.
+for {set inf 1} {$inf <= $inferiors} {incr inf} {
+    with_test_prefix "inferior $inf" {
+	# Switch to the target inferior.
+	gdb_test "inferior $inf" ".*Switching to inferior $inf .*"
+	# Run the tests.
+	do_tests
+    }
+}
 
 gdb_exit
