[gdb/testsuite] Add KFAIL for missing support of reverse-debugging xsave

Message ID 20190927151128.GA29080@delia
State New
Headers show
Series
  • [gdb/testsuite] Add KFAIL for missing support of reverse-debugging xsave
Related show

Commit Message

Tom de Vries Sept. 27, 2019, 3:11 p.m.
Hi,

Normally the gdb.reverse/*.exp test-cases pass on my system (apart from the
record/23188 KFAIL for gdb.reverse/step-precsave.exp).  But when specifying
GLIBC_TUNABLES=glibc.tune.hwcaps=-XSAVEC_Usable to force glibc to use
_dl_runtime_resolve_xsave instead of _dl_runtime_resolve_xsavec, we run into
1054 FAILs like this:
...
(gdb) PASS: gdb.reverse/sigall-reverse.exp: b gen_HUP
continue^M
Continuing.^M
Process record does not support instruction 0xfae64 at address \
  0x7ffff7ded958.^M
Process record: failed to record execution log.^M
^M
Program stopped.^M
0x00007ffff7ded958 in _dl_runtime_resolve_xsave () from \
  /lib64/ld-linux-x86-64.so.2^M
(gdb) FAIL: gdb.reverse/sigall-reverse.exp: get signal ABRT
...

The problem is that the xsave instruction is not supported in
reverse-debugging (PR record/25038).

Add KFAILs for this PR.

Tested on x86_64-linux.

OK for trunk?

Thanks,
- Tom

[gdb/testsuite] Add KFAIL for missing support of reverse-debugging xsave

gdb/testsuite/ChangeLog:

2019-09-27  Tom de Vries  <tdevries@suse.de>

	PR record/25038
	* gdb.reverse/sigall-precsave.exp: Add PR record/25038 KFAIL.
	* gdb.reverse/sigall-reverse.exp: Same.
	* gdb.reverse/solib-precsave.exp: Same.
	* gdb.reverse/solib-reverse.exp: Same.
	* gdb.reverse/step-precsave.exp: Same.
	* gdb.reverse/until-precsave.exp: Same.
	* gdb.reverse/until-reverse.exp: Same.
	* lib/gdb.exp (gdb_continue_to_breakpoint): Same.

---
 gdb/testsuite/gdb.reverse/sigall-precsave.exp | 14 ++++++++++++--
 gdb/testsuite/gdb.reverse/sigall-reverse.exp  | 11 +++++++++++
 gdb/testsuite/gdb.reverse/solib-precsave.exp  | 13 ++++++++++++-
 gdb/testsuite/gdb.reverse/solib-reverse.exp   | 13 ++++++++++++-
 gdb/testsuite/gdb.reverse/step-precsave.exp   |  4 ++++
 gdb/testsuite/gdb.reverse/until-precsave.exp  | 13 ++++++++++++-
 gdb/testsuite/gdb.reverse/until-reverse.exp   | 15 ++++++++++++---
 gdb/testsuite/lib/gdb.exp                     |  4 ++++
 8 files changed, 79 insertions(+), 8 deletions(-)

Comments

Tom de Vries Oct. 12, 2019, 4:24 p.m. | #1
On 27-09-2019 17:11, Tom de Vries wrote:
> Hi,

> 

> Normally the gdb.reverse/*.exp test-cases pass on my system (apart from the

> record/23188 KFAIL for gdb.reverse/step-precsave.exp).  But when specifying

> GLIBC_TUNABLES=glibc.tune.hwcaps=-XSAVEC_Usable to force glibc to use

> _dl_runtime_resolve_xsave instead of _dl_runtime_resolve_xsavec, we run into

> 1054 FAILs like this:

> ...

> (gdb) PASS: gdb.reverse/sigall-reverse.exp: b gen_HUP

> continue^M

> Continuing.^M

> Process record does not support instruction 0xfae64 at address \

>   0x7ffff7ded958.^M

> Process record: failed to record execution log.^M

> ^M

> Program stopped.^M

> 0x00007ffff7ded958 in _dl_runtime_resolve_xsave () from \

>   /lib64/ld-linux-x86-64.so.2^M

> (gdb) FAIL: gdb.reverse/sigall-reverse.exp: get signal ABRT

> ...

> 

> The problem is that the xsave instruction is not supported in

> reverse-debugging (PR record/25038).

> 

> Add KFAILs for this PR.

> 

> Tested on x86_64-linux.

> 

> OK for trunk?

> 


Ping.

Thanks,
- Tom

> [gdb/testsuite] Add KFAIL for missing support of reverse-debugging xsave

> 

> gdb/testsuite/ChangeLog:

> 

> 2019-09-27  Tom de Vries  <tdevries@suse.de>

> 

> 	PR record/25038

> 	* gdb.reverse/sigall-precsave.exp: Add PR record/25038 KFAIL.

> 	* gdb.reverse/sigall-reverse.exp: Same.

> 	* gdb.reverse/solib-precsave.exp: Same.

> 	* gdb.reverse/solib-reverse.exp: Same.

> 	* gdb.reverse/step-precsave.exp: Same.

> 	* gdb.reverse/until-precsave.exp: Same.

> 	* gdb.reverse/until-reverse.exp: Same.

> 	* lib/gdb.exp (gdb_continue_to_breakpoint): Same.

> 

> ---

>  gdb/testsuite/gdb.reverse/sigall-precsave.exp | 14 ++++++++++++--

>  gdb/testsuite/gdb.reverse/sigall-reverse.exp  | 11 +++++++++++

>  gdb/testsuite/gdb.reverse/solib-precsave.exp  | 13 ++++++++++++-

>  gdb/testsuite/gdb.reverse/solib-reverse.exp   | 13 ++++++++++++-

>  gdb/testsuite/gdb.reverse/step-precsave.exp   |  4 ++++

>  gdb/testsuite/gdb.reverse/until-precsave.exp  | 13 ++++++++++++-

>  gdb/testsuite/gdb.reverse/until-reverse.exp   | 15 ++++++++++++---

>  gdb/testsuite/lib/gdb.exp                     |  4 ++++

>  8 files changed, 79 insertions(+), 8 deletions(-)

> 

> diff --git a/gdb/testsuite/gdb.reverse/sigall-precsave.exp b/gdb/testsuite/gdb.reverse/sigall-precsave.exp

> index 79a1e7282b6..ccdfde407fc 100644

> --- a/gdb/testsuite/gdb.reverse/sigall-precsave.exp

> +++ b/gdb/testsuite/gdb.reverse/sigall-precsave.exp

> @@ -258,14 +258,20 @@ foreach sig $signals {

>      }

>  }

>  

> -gdb_test_multiple "continue" "continue" {

> +set kfail_pattern "Process record does not support instruction 0xfae64 at.*"

> +set test "run to end of main"

> +gdb_test_multiple "continue" $test {

>      -re "Breakpoint .* end of main .*$gdb_prompt $" {

> -	pass "run to end of main"

> +	pass $test

>      }

>      -re "Breakpoint .* handle_.*$gdb_prompt $" {

>  	send_gdb "continue\n"

>  	exp_continue

>      }

> +    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

> +	kfail "gdb/25038" $test

> +	return -1

> +    }

>  }

>  

>  delete_breakpoints

> @@ -289,8 +295,12 @@ set sig_supported 1

>  set thissig "ABRT"

>  

>  # test signal handling

> +set record_instruction_kfail 0

>  foreach sig [lrange $signals 1 end] {

>      test_one_sig $sig

> +    if { $record_instruction_kfail } {

> +	return -1

> +    }

>  }

>  

>  # The last signal (SIGTERM) gets handled slightly differently because

> diff --git a/gdb/testsuite/gdb.reverse/sigall-reverse.exp b/gdb/testsuite/gdb.reverse/sigall-reverse.exp

> index c734fe8e17a..884a00c5dcf 100644

> --- a/gdb/testsuite/gdb.reverse/sigall-reverse.exp

> +++ b/gdb/testsuite/gdb.reverse/sigall-reverse.exp

> @@ -37,6 +37,7 @@ proc test_one_sig {nextsig} {

>      global sig_supported

>      global gdb_prompt

>      global thissig

> +    global record_instruction_kfail

>  

>      set this_sig_supported $sig_supported

>      gdb_test "handle SIG$thissig stop print" \

> @@ -51,6 +52,7 @@ proc test_one_sig {nextsig} {

>  	    setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"

>  	}

>  	set testmsg "get signal $thissig"

> +	set kfail_pattern "Process record does not support instruction 0xfae64 at.*"

>  	gdb_test_multiple "continue" $testmsg {

>  	    -re "Program received signal SIG$thissig.*handle_$thissig.*$gdb_prompt $" {

>  		fail "$testmsg (wrong location)"

> @@ -62,6 +64,11 @@ proc test_one_sig {nextsig} {

>  		xfail $testmsg

>  		set need_another_continue 0

>  	    }

> +	    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

> +		kfail "gdb/25038" "$testmsg"

> +		set record_instruction_kfail 1

> +		return

> +	    }

>  	}

>      }

>  

> @@ -237,8 +244,12 @@ set sig_supported 1

>  set thissig "ABRT"

>  

>  # test signal handling

> +set record_instruction_kfail 0

>  foreach sig [lrange $signals 1 end] {

>      test_one_sig $sig

> +    if { $record_instruction_kfail } {

> +	return -1

> +    }

>  }

>  

>  # The last signal (SIGTERM) gets handled slightly differently because

> diff --git a/gdb/testsuite/gdb.reverse/solib-precsave.exp b/gdb/testsuite/gdb.reverse/solib-precsave.exp

> index 574d79816db..a3f874c09b7 100644

> --- a/gdb/testsuite/gdb.reverse/solib-precsave.exp

> +++ b/gdb/testsuite/gdb.reverse/solib-precsave.exp

> @@ -91,7 +91,18 @@ gdb_test "break $end_of_main" \

>      "Breakpoint $decimal at .*$srcfile, line $end_of_main\." \

>      "breakpoint at end of main"

>  

> -gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"

> +set test "run to end of main"

> +set pass_pattern "Breakpoint .* end of main .*"

> +set kfail_pattern "Process record does not support instruction 0xfae64 at.*"

> +gdb_test_multiple "continue" $test {

> +    -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {

> +	pass $test

> +    }

> +    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

> +	kfail "gdb/25038" $test

> +	return -1

> +    }

> +}

>  

>  gdb_test "record save $precsave" \

>      "Saved core file $precsave with execution log\."  \

> diff --git a/gdb/testsuite/gdb.reverse/solib-reverse.exp b/gdb/testsuite/gdb.reverse/solib-reverse.exp

> index 77c321388b4..53b35239f81 100644

> --- a/gdb/testsuite/gdb.reverse/solib-reverse.exp

> +++ b/gdb/testsuite/gdb.reverse/solib-reverse.exp

> @@ -86,7 +86,18 @@ if [supports_process_record] {

>  

>  set end_part_one [gdb_get_line_number " end part one" "$srcfile"]

>  set end_part_two [gdb_get_line_number " end part two" "$srcfile"]

> -gdb_test "until $end_part_one" " end part one.*" "run until end part one"

> +set test "run until end part one"

> +set pass_pattern " end part one.*"

> +set kfail_pattern "Process record does not support instruction 0xfae64 at.*"

> +gdb_test_multiple "until $end_part_one" $test {

> +    -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {

> +	pass $test

> +    }

> +    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

> +	kfail "gdb/25038" $test

> +	return -1

> +    }

> +}

>  

>  gdb_test "reverse-step" " shr1 three .*" "reverse-step third shr1"

>  gdb_test "reverse-step" " shr1 two .*"   "reverse-step second shr1"

> diff --git a/gdb/testsuite/gdb.reverse/step-precsave.exp b/gdb/testsuite/gdb.reverse/step-precsave.exp

> index 2073b8a1542..72ee279f806 100644

> --- a/gdb/testsuite/gdb.reverse/step-precsave.exp

> +++ b/gdb/testsuite/gdb.reverse/step-precsave.exp

> @@ -49,6 +49,7 @@ with_timeout_factor 20 {

>      set test "run to end of main"

>      set pass_pattern "Breakpoint .* end of main .*"

>      set kfail_pattern "Process record does not support instruction 0xc5 at.*"

> +    set kfail2_pattern "Process record does not support instruction 0xfae64 at.*"

>      gdb_test_multiple "continue" $test {

>  	-re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {

>  	    pass $test

> @@ -56,6 +57,9 @@ with_timeout_factor 20 {

>  	-re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

>  	    kfail "record/23188" $test

>  	}

> +	-re "\[\r\n\]*(?:$kfail2_pattern)\[\r\n\]+$gdb_prompt $" {

> +	    kfail "record/25038" $test

> +	}

>      }

>  }

>  

> diff --git a/gdb/testsuite/gdb.reverse/until-precsave.exp b/gdb/testsuite/gdb.reverse/until-precsave.exp

> index baf21ab7ad2..1f09df193fd 100644

> --- a/gdb/testsuite/gdb.reverse/until-precsave.exp

> +++ b/gdb/testsuite/gdb.reverse/until-precsave.exp

> @@ -50,7 +50,18 @@ gdb_test "break $end_of_main" \

>  

>  # This can take awhile.

>  with_timeout_factor 20 {

> -    gdb_test "continue" "Breakpoint .* set breakpoint 10a here .*" "run to end of main"

> +    set test "run to end of main"

> +    set pass_pattern "Breakpoint .* set breakpoint 10a here .*"

> +    set kfail_pattern "Process record does not support instruction 0xfae64 at.*"

> +    gdb_test_multiple "continue" $test {

> +	-re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {

> +	    pass $test

> +	}

> +	-re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

> +	    kfail "gdb/25038" $test

> +	    return -1

> +	}

> +    }

>  }

>  

>  # So can this, against gdbserver, for example.

> diff --git a/gdb/testsuite/gdb.reverse/until-reverse.exp b/gdb/testsuite/gdb.reverse/until-reverse.exp

> index 2e26de3ce7b..804e07f46ca 100644

> --- a/gdb/testsuite/gdb.reverse/until-reverse.exp

> +++ b/gdb/testsuite/gdb.reverse/until-reverse.exp

> @@ -49,9 +49,18 @@ gdb_test "until $bp_location1" \

>  

>  # Advance up to factorial, outer invocation

>  #

> -gdb_test "advance factorial" \

> -    "factorial .value=6..*$srcfile:$bp_location7.*" \

> -    "advance to factorial"

> +set test "advance to factorial"

> +set pass_pattern "factorial .value=6..*$srcfile:$bp_location7.*"

> +set kfail_pattern "Process record does not support instruction 0xfae64 at.*"

> +gdb_test_multiple "advance factorial" $test {

> +    -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {

> +	pass "$test"

> +    }

> +    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

> +	kfail "gdb/25038" $test

> +	return -1

> +    }

> +}

>  

>  # At this point, 'until' should continue the inferior up to when all the

>  # inner invocations of factorial() are completed and we are back at this

> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp

> index 3a1f053cf8a..1fcd0f76a52 100644

> --- a/gdb/testsuite/lib/gdb.exp

> +++ b/gdb/testsuite/lib/gdb.exp

> @@ -633,10 +633,14 @@ proc gdb_continue_to_breakpoint {name {location_pattern .*}} {

>      global gdb_prompt

>      set full_name "continue to breakpoint: $name"

>  

> +    set kfail_pattern "Process record does not support instruction 0xfae64 at.*"

>      gdb_test_multiple "continue" $full_name {

>  	-re "(?:Breakpoint|Temporary breakpoint) .* (at|in) $location_pattern\r\n$gdb_prompt $" {

>  	    pass $full_name

>  	}

> +	-re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {

> +	    kfail "gdb/25038" $full_name

> +	}

>      }

>  }

>  

>
Simon Marchi Oct. 12, 2019, 11:09 p.m. | #2
On 2019-09-27 11:11, Tom de Vries wrote:
> Hi,

> 

> Normally the gdb.reverse/*.exp test-cases pass on my system (apart from 

> the

> record/23188 KFAIL for gdb.reverse/step-precsave.exp).  But when 

> specifying

> GLIBC_TUNABLES=glibc.tune.hwcaps=-XSAVEC_Usable to force glibc to use

> _dl_runtime_resolve_xsave instead of _dl_runtime_resolve_xsavec, we run 

> into

> 1054 FAILs like this:

> ...

> (gdb) PASS: gdb.reverse/sigall-reverse.exp: b gen_HUP

> continue^M

> Continuing.^M

> Process record does not support instruction 0xfae64 at address \

>   0x7ffff7ded958.^M

> Process record: failed to record execution log.^M

> ^M

> Program stopped.^M

> 0x00007ffff7ded958 in _dl_runtime_resolve_xsave () from \

>   /lib64/ld-linux-x86-64.so.2^M

> (gdb) FAIL: gdb.reverse/sigall-reverse.exp: get signal ABRT

> ...

> 

> The problem is that the xsave instruction is not supported in

> reverse-debugging (PR record/25038).

> 

> Add KFAILs for this PR.

> 

> Tested on x86_64-linux.

> 

> OK for trunk?


Hi Tom,

That looks good to me in general.  Just one note here:

> @@ -289,8 +295,12 @@ set sig_supported 1

>  set thissig "ABRT"

> 

>  # test signal handling

> +set record_instruction_kfail 0

>  foreach sig [lrange $signals 1 end] {

>      test_one_sig $sig

> +    if { $record_instruction_kfail } {

> +	return -1

> +    }


It seems like record_instruction_kfail is never set in this file, 
sigall-precsave.exp, I suppose it should?

Simon
Tom de Vries Oct. 13, 2019, 12:59 a.m. | #3
On 13-10-2019 01:09, Simon Marchi wrote:
> On 2019-09-27 11:11, Tom de Vries wrote:

>> Hi,

>>

>> Normally the gdb.reverse/*.exp test-cases pass on my system (apart

>> from the

>> record/23188 KFAIL for gdb.reverse/step-precsave.exp).  But when

>> specifying

>> GLIBC_TUNABLES=glibc.tune.hwcaps=-XSAVEC_Usable to force glibc to use

>> _dl_runtime_resolve_xsave instead of _dl_runtime_resolve_xsavec, we

>> run into

>> 1054 FAILs like this:

>> ...

>> (gdb) PASS: gdb.reverse/sigall-reverse.exp: b gen_HUP

>> continue^M

>> Continuing.^M

>> Process record does not support instruction 0xfae64 at address \

>>   0x7ffff7ded958.^M

>> Process record: failed to record execution log.^M

>> ^M

>> Program stopped.^M

>> 0x00007ffff7ded958 in _dl_runtime_resolve_xsave () from \

>>   /lib64/ld-linux-x86-64.so.2^M

>> (gdb) FAIL: gdb.reverse/sigall-reverse.exp: get signal ABRT

>> ...

>>

>> The problem is that the xsave instruction is not supported in

>> reverse-debugging (PR record/25038).

>>

>> Add KFAILs for this PR.

>>

>> Tested on x86_64-linux.

>>

>> OK for trunk?

> 

> Hi Tom,

> 

> That looks good to me in general.  Just one note here:

> 

>> @@ -289,8 +295,12 @@ set sig_supported 1

>>  set thissig "ABRT"

>>

>>  # test signal handling

>> +set record_instruction_kfail 0

>>  foreach sig [lrange $signals 1 end] {

>>      test_one_sig $sig

>> +    if { $record_instruction_kfail } {

>> +    return -1

>> +    }

> 

> It seems like record_instruction_kfail is never set in this file,

> sigall-precsave.exp, I suppose it should?


Hi,

thanks for the review. It seems that was some dead code, I've removed it
now and committed.

Thanks,
- Tom

Patch

diff --git a/gdb/testsuite/gdb.reverse/sigall-precsave.exp b/gdb/testsuite/gdb.reverse/sigall-precsave.exp
index 79a1e7282b6..ccdfde407fc 100644
--- a/gdb/testsuite/gdb.reverse/sigall-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/sigall-precsave.exp
@@ -258,14 +258,20 @@  foreach sig $signals {
     }
 }
 
-gdb_test_multiple "continue" "continue" {
+set kfail_pattern "Process record does not support instruction 0xfae64 at.*"
+set test "run to end of main"
+gdb_test_multiple "continue" $test {
     -re "Breakpoint .* end of main .*$gdb_prompt $" {
-	pass "run to end of main"
+	pass $test
     }
     -re "Breakpoint .* handle_.*$gdb_prompt $" {
 	send_gdb "continue\n"
 	exp_continue
     }
+    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
+	kfail "gdb/25038" $test
+	return -1
+    }
 }
 
 delete_breakpoints
@@ -289,8 +295,12 @@  set sig_supported 1
 set thissig "ABRT"
 
 # test signal handling
+set record_instruction_kfail 0
 foreach sig [lrange $signals 1 end] {
     test_one_sig $sig
+    if { $record_instruction_kfail } {
+	return -1
+    }
 }
 
 # The last signal (SIGTERM) gets handled slightly differently because
diff --git a/gdb/testsuite/gdb.reverse/sigall-reverse.exp b/gdb/testsuite/gdb.reverse/sigall-reverse.exp
index c734fe8e17a..884a00c5dcf 100644
--- a/gdb/testsuite/gdb.reverse/sigall-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/sigall-reverse.exp
@@ -37,6 +37,7 @@  proc test_one_sig {nextsig} {
     global sig_supported
     global gdb_prompt
     global thissig
+    global record_instruction_kfail
 
     set this_sig_supported $sig_supported
     gdb_test "handle SIG$thissig stop print" \
@@ -51,6 +52,7 @@  proc test_one_sig {nextsig} {
 	    setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"
 	}
 	set testmsg "get signal $thissig"
+	set kfail_pattern "Process record does not support instruction 0xfae64 at.*"
 	gdb_test_multiple "continue" $testmsg {
 	    -re "Program received signal SIG$thissig.*handle_$thissig.*$gdb_prompt $" {
 		fail "$testmsg (wrong location)"
@@ -62,6 +64,11 @@  proc test_one_sig {nextsig} {
 		xfail $testmsg
 		set need_another_continue 0
 	    }
+	    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
+		kfail "gdb/25038" "$testmsg"
+		set record_instruction_kfail 1
+		return
+	    }
 	}
     }
 
@@ -237,8 +244,12 @@  set sig_supported 1
 set thissig "ABRT"
 
 # test signal handling
+set record_instruction_kfail 0
 foreach sig [lrange $signals 1 end] {
     test_one_sig $sig
+    if { $record_instruction_kfail } {
+	return -1
+    }
 }
 
 # The last signal (SIGTERM) gets handled slightly differently because
diff --git a/gdb/testsuite/gdb.reverse/solib-precsave.exp b/gdb/testsuite/gdb.reverse/solib-precsave.exp
index 574d79816db..a3f874c09b7 100644
--- a/gdb/testsuite/gdb.reverse/solib-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/solib-precsave.exp
@@ -91,7 +91,18 @@  gdb_test "break $end_of_main" \
     "Breakpoint $decimal at .*$srcfile, line $end_of_main\." \
     "breakpoint at end of main"
 
-gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
+set test "run to end of main"
+set pass_pattern "Breakpoint .* end of main .*"
+set kfail_pattern "Process record does not support instruction 0xfae64 at.*"
+gdb_test_multiple "continue" $test {
+    -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {
+	pass $test
+    }
+    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
+	kfail "gdb/25038" $test
+	return -1
+    }
+}
 
 gdb_test "record save $precsave" \
     "Saved core file $precsave with execution log\."  \
diff --git a/gdb/testsuite/gdb.reverse/solib-reverse.exp b/gdb/testsuite/gdb.reverse/solib-reverse.exp
index 77c321388b4..53b35239f81 100644
--- a/gdb/testsuite/gdb.reverse/solib-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/solib-reverse.exp
@@ -86,7 +86,18 @@  if [supports_process_record] {
 
 set end_part_one [gdb_get_line_number " end part one" "$srcfile"]
 set end_part_two [gdb_get_line_number " end part two" "$srcfile"]
-gdb_test "until $end_part_one" " end part one.*" "run until end part one"
+set test "run until end part one"
+set pass_pattern " end part one.*"
+set kfail_pattern "Process record does not support instruction 0xfae64 at.*"
+gdb_test_multiple "until $end_part_one" $test {
+    -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {
+	pass $test
+    }
+    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
+	kfail "gdb/25038" $test
+	return -1
+    }
+}
 
 gdb_test "reverse-step" " shr1 three .*" "reverse-step third shr1"
 gdb_test "reverse-step" " shr1 two .*"   "reverse-step second shr1"
diff --git a/gdb/testsuite/gdb.reverse/step-precsave.exp b/gdb/testsuite/gdb.reverse/step-precsave.exp
index 2073b8a1542..72ee279f806 100644
--- a/gdb/testsuite/gdb.reverse/step-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/step-precsave.exp
@@ -49,6 +49,7 @@  with_timeout_factor 20 {
     set test "run to end of main"
     set pass_pattern "Breakpoint .* end of main .*"
     set kfail_pattern "Process record does not support instruction 0xc5 at.*"
+    set kfail2_pattern "Process record does not support instruction 0xfae64 at.*"
     gdb_test_multiple "continue" $test {
 	-re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {
 	    pass $test
@@ -56,6 +57,9 @@  with_timeout_factor 20 {
 	-re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
 	    kfail "record/23188" $test
 	}
+	-re "\[\r\n\]*(?:$kfail2_pattern)\[\r\n\]+$gdb_prompt $" {
+	    kfail "record/25038" $test
+	}
     }
 }
 
diff --git a/gdb/testsuite/gdb.reverse/until-precsave.exp b/gdb/testsuite/gdb.reverse/until-precsave.exp
index baf21ab7ad2..1f09df193fd 100644
--- a/gdb/testsuite/gdb.reverse/until-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/until-precsave.exp
@@ -50,7 +50,18 @@  gdb_test "break $end_of_main" \
 
 # This can take awhile.
 with_timeout_factor 20 {
-    gdb_test "continue" "Breakpoint .* set breakpoint 10a here .*" "run to end of main"
+    set test "run to end of main"
+    set pass_pattern "Breakpoint .* set breakpoint 10a here .*"
+    set kfail_pattern "Process record does not support instruction 0xfae64 at.*"
+    gdb_test_multiple "continue" $test {
+	-re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {
+	    pass $test
+	}
+	-re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
+	    kfail "gdb/25038" $test
+	    return -1
+	}
+    }
 }
 
 # So can this, against gdbserver, for example.
diff --git a/gdb/testsuite/gdb.reverse/until-reverse.exp b/gdb/testsuite/gdb.reverse/until-reverse.exp
index 2e26de3ce7b..804e07f46ca 100644
--- a/gdb/testsuite/gdb.reverse/until-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/until-reverse.exp
@@ -49,9 +49,18 @@  gdb_test "until $bp_location1" \
 
 # Advance up to factorial, outer invocation
 #
-gdb_test "advance factorial" \
-    "factorial .value=6..*$srcfile:$bp_location7.*" \
-    "advance to factorial"
+set test "advance to factorial"
+set pass_pattern "factorial .value=6..*$srcfile:$bp_location7.*"
+set kfail_pattern "Process record does not support instruction 0xfae64 at.*"
+gdb_test_multiple "advance factorial" $test {
+    -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" {
+	pass "$test"
+    }
+    -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
+	kfail "gdb/25038" $test
+	return -1
+    }
+}
 
 # At this point, 'until' should continue the inferior up to when all the
 # inner invocations of factorial() are completed and we are back at this
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 3a1f053cf8a..1fcd0f76a52 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -633,10 +633,14 @@  proc gdb_continue_to_breakpoint {name {location_pattern .*}} {
     global gdb_prompt
     set full_name "continue to breakpoint: $name"
 
+    set kfail_pattern "Process record does not support instruction 0xfae64 at.*"
     gdb_test_multiple "continue" $full_name {
 	-re "(?:Breakpoint|Temporary breakpoint) .* (at|in) $location_pattern\r\n$gdb_prompt $" {
 	    pass $full_name
 	}
+	-re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
+	    kfail "gdb/25038" $full_name
+	}
     }
 }