diff options
author | Tom de Vries <tdevries@suse.de> | 2023-01-03 16:41:05 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2023-01-03 16:41:05 +0100 |
commit | b46632ca16021962c33c2ea32b8104fd258ef0af (patch) | |
tree | 8b318b28b97eeaab27503bb06802128cc63d84b6 /gdb/testsuite/lib | |
parent | 5aea5eca6c873334deb41f996dec255786a6f84d (diff) | |
download | fsf-binutils-gdb-b46632ca16021962c33c2ea32b8104fd258ef0af.zip fsf-binutils-gdb-b46632ca16021962c33c2ea32b8104fd258ef0af.tar.gz fsf-binutils-gdb-b46632ca16021962c33c2ea32b8104fd258ef0af.tar.bz2 |
[gdb/testsuite] Add xfail in gdb.arch/i386-pkru.exp
On a x86_64-linux machine with pkru register, I run into:
...
(gdb) PASS: gdb.arch/i386-pkru.exp: set pkru value
info register pkru^M
pkru 0x12345678 305419896^M
(gdb) FAIL: gdb.arch/i386-pkru.exp: read value after setting value
...
This is a regression due to kernel commit e84ba47e313d ("x86/fpu: Hook up PKRU
onto ptrace()"). This is fixed by recent kernel commit 4a804c4f8356
("x86/fpu: Allow PKRU to be (once again) written by ptrace.").
The regression occurs for kernel versions v5.14-rc1 (the first tag containing
the regression) up to but excluding v6.2-rc1 (the first tag containing the fix).
Fix this by adding an xfail for the appropriate kernel versions.
Tested on x86_64-linux.
PR testsuite/29790
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29790
Diffstat (limited to 'gdb/testsuite/lib')
-rw-r--r-- | gdb/testsuite/lib/gdb-utils.exp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gdb/testsuite/lib/gdb-utils.exp b/gdb/testsuite/lib/gdb-utils.exp index 78724f8..fb5c953 100644 --- a/gdb/testsuite/lib/gdb-utils.exp +++ b/gdb/testsuite/lib/gdb-utils.exp @@ -100,3 +100,50 @@ proc gdb_get_bp_addr { num } { } return "" } + +# Compare the version numbers in L1 to those in L2 using OP, and return +# 1 if the comparison is true. + +proc version_compare { l1 op l2 } { + set len [llength $l1] + if { $len != [llength $l2] } { + error "l2 not the same length as l1" + } + + switch -exact $op { + "==" - + "<" {} + "<=" { return [expr [version_compare $l1 < $l2] \ + || [version_compare $l1 == $l2]]} + default { error "unsupported op: $op" } + } + + # Handle ops < and ==. + set idx 0 + foreach v1 $l1 { + set v2 [lindex $l2 $idx] + incr idx + set last [expr $len == $idx] + + set cmp [expr $v1 $op $v2] + if { $op == "==" } { + if { $cmp } { + continue + } else { + return 0 + } + } else { + # $op == "<". + if { $cmp } { + return 1 + } else { + if { !$last && $v1 == $v2 } { + continue + } + return 0 + } + } + } + + return 1 +} |