* [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
@ 2026-08-10 19:32 Guinevere Larsen
2026-08-12 13:31 ` Joos, Christina
0 siblings, 1 reply; 4+ messages in thread
From: Guinevere Larsen @ 2026-08-10 19:32 UTC (permalink / raw)
To: gdb-patches; +Cc: Guinevere Larsen, Christina Joos
My recent commit, 1c04308f0958cbac83bad22703758139ea6969b6:
Author: Guinevere Larsen <guinevere@redhat.com>
Date: Tue Jun 16 16:03:43 2026 -0300
gdb/record: add support for BMI2 instructions
Introduced a few tests that rely on the rax register being set before
entering the function. This isn't reliable, as eax is almost always set
to 0 (except in my machine for some reason). To avoid ISAs getting in
the way, this commit changes the test to use r12 (and r12w/r12d when
appropriate), so that it won't be disturbed by the compiler.
Reported-by: Christina Joos <christina.joos@intel.com>
---
gdb/testsuite/gdb.reverse/i386-avx-reverse.c | 32 +++++++++----------
.../gdb.reverse/i386-avx-reverse.exp | 8 ++---
2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
index 88cd3fc7f34..4d45482c07a 100644
--- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
+++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
@@ -770,48 +770,48 @@ bmi_test ()
{
/* start bmi_test. */
/* Using GDB, load these values onto registers for testing.
- eax = 0x1312
+ r12 = 0x1312
ebx = 0xdeadbeef
ecx = 0xcafeface
edx = 0x2337
r8 = 0
this way it's easy to confirm we're undoing things correctly. */
- asm volatile ("andn %rbx, %rax, %r8");
- asm volatile ("andn %ebx, %eax, %ecx");
+ asm volatile ("andn %rbx, %r12, %r8");
+ asm volatile ("andn %ebx, %r12d, %ecx");
asm volatile ("bextr %rcx, %r8, %rbx");
asm volatile ("bextr %ebx, %ecx, %r8d");
- asm volatile ("blsi %rax, %rcx");
+ asm volatile ("blsi %r12, %rcx");
asm volatile ("blsi %ebx, %r8d");
asm volatile ("blsmsk %r8, %rbx");
- asm volatile ("blsmsk %eax, %eax");
+ asm volatile ("blsmsk %r12d, %r12d");
asm volatile ("blsr %rcx, %rbx");
asm volatile ("blsr %r8d, %ecx");
- asm volatile ("lzcnt %rax, %r8");
- asm volatile ("lzcnt %eax, %ecx");
- asm volatile ("lzcnt %ax, %bx");
+ asm volatile ("lzcnt %r12, %r8");
+ asm volatile ("lzcnt %r12d, %ecx");
+ asm volatile ("lzcnt %r12w, %bx");
- asm volatile ("tzcnt %rax, %rcx");
- asm volatile ("tzcnt %eax, %ebx");
- asm volatile ("tzcnt %ax, %r8w");
+ asm volatile ("tzcnt %r12, %rcx");
+ asm volatile ("tzcnt %r12d, %ebx");
+ asm volatile ("tzcnt %r12w, %r8w");
- asm volatile ("mulx %eax, %ebx, %ecx");
+ asm volatile ("mulx %r12d, %ebx, %ecx");
asm volatile ("mulx %ebx, %ecx, %ebx");
asm volatile ("pdep %r8, %rcx, %rbx");
asm volatile ("pext %edx, %ecx, %ebx");
asm volatile ("rorx $10, %r8, %rbx");
- asm volatile ("sarx %edx, %ebx, %eax");
- asm volatile ("shlx %eax, %ecx, %ebx");
- asm volatile ("shrx %r8d, %eax, %ecx");
+ asm volatile ("sarx %edx, %ebx, %r12d");
+ asm volatile ("shlx %r12d, %ecx, %ebx");
+ asm volatile ("shrx %r8d, %r12d, %ecx");
asm volatile ("bzhi %edx, %ebx, %r8d");
- asm volatile ("bzhi %rax, %rcx, %r8");
+ asm volatile ("bzhi %r12, %rcx, %r8");
return 0; /* end bmi_test */
}
diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
index 5d65245db39..a5b0e6612aa 100644
--- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
@@ -1201,7 +1201,7 @@ gdb_test "finish" "Run till exit from.*convert_test.*" \
gdb_test_no_output \
"set \$r8 = 0" "set r8 for bmi test"
gdb_test_no_output \
- "set \$eax = 0x1312" "set eax for bmi test"
+ "set \$r12 = 0x1312" "set r12 for bmi test"
gdb_test_no_output "set \$ebx = 0xdeadbeef" "set ebx for bmi test"
gdb_test_no_output "set \$ecx = 0xcafeface" "set ecx for bmi test"
gdb_test_no_output "set \$edx = 0x2337" "set edx for bmi test"
@@ -1213,7 +1213,7 @@ if {[record_full_function "bmi"] == true} {
test_one_general_register "shrx" "ecx" "0xe884173"
test_one_general_register "shlx" "ebx" "0x0"
- test_one_general_register "sarx" "eax" "0x3"
+ test_one_general_register "sarx" "r12" "0x3"
test_one_general_register "rorx" "ebx" "0x3b"
test_one_general_register "pext" "ebx" "0x0"
test_one_general_register "pdep" "ebx" "0x0"
@@ -1232,13 +1232,13 @@ if {[record_full_function "bmi"] == true} {
test_one_general_register "blsr" "ecx" "0x2"
test_one_general_register "blsr" "ebx" "0xffffffff"
- test_one_general_register "blsmsk" "eax" "0x1312"
+ test_one_general_register "blsmsk" "r12" "0x1312"
test_one_general_register "blsmsk" "ebx" "0x0"
test_one_general_register "blsi" "r8" "0x0"
test_one_general_register "blsi" "ecx" "0xdeadaced"
- test_one_general_register "bextr" "eax" "0x1312"
+ test_one_general_register "bextr" "r12" "0x1312"
test_one_general_register "bextr" "ebx" "0xdeadbeef"
test_one_general_register "andn" "ecx" "0xcafeface"
base-commit: a80fede20bc1330eca5e419392c6595bb3a6ac1d
--
2.55.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
2026-08-10 19:32 [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp Guinevere Larsen
@ 2026-08-12 13:31 ` Joos, Christina
2026-08-13 6:17 ` Joos, Christina
0 siblings, 1 reply; 4+ messages in thread
From: Joos, Christina @ 2026-08-12 13:31 UTC (permalink / raw)
To: Guinevere Larsen, gdb-patches
> -----Original Message-----
> From: Guinevere Larsen <guinevere@redhat.com>
> Sent: Montag, 10. August 2026 21:33
> To: gdb-patches@sourceware.org
> Cc: Guinevere Larsen <guinevere@redhat.com>; Joos, Christina
> <christina.joos@intel.com>
> Subject: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
>
> My recent commit, 1c04308f0958cbac83bad22703758139ea6969b6:
>
> Author: Guinevere Larsen <guinevere@redhat.com>
> Date: Tue Jun 16 16:03:43 2026 -0300
> gdb/record: add support for BMI2 instructions
>
> Introduced a few tests that rely on the rax register being set before entering the
> function. This isn't reliable, as eax is almost always set to 0 (except in my machine
> for some reason). To avoid ISAs getting in the way, this commit changes the test
> to use r12 (and r12w/r12d when appropriate), so that it won't be disturbed by
> the compiler.
>
> Reported-by: Christina Joos <christina.joos@intel.com>
> ---
> gdb/testsuite/gdb.reverse/i386-avx-reverse.c | 32 +++++++++----------
> .../gdb.reverse/i386-avx-reverse.exp | 8 ++---
> 2 files changed, 20 insertions(+), 20 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> index 88cd3fc7f34..4d45482c07a 100644
> --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> @@ -770,48 +770,48 @@ bmi_test ()
> {
> /* start bmi_test. */
> /* Using GDB, load these values onto registers for testing.
> - eax = 0x1312
> + r12 = 0x1312
> ebx = 0xdeadbeef
> ecx = 0xcafeface
> edx = 0x2337
> r8 = 0
> this way it's easy to confirm we're undoing things correctly. */
>
> - asm volatile ("andn %rbx, %rax, %r8");
> - asm volatile ("andn %ebx, %eax, %ecx");
> + asm volatile ("andn %rbx, %r12, %r8"); asm volatile ("andn %ebx,
> + %r12d, %ecx");
>
> asm volatile ("bextr %rcx, %r8, %rbx");
> asm volatile ("bextr %ebx, %ecx, %r8d");
>
> - asm volatile ("blsi %rax, %rcx");
> + asm volatile ("blsi %r12, %rcx");
> asm volatile ("blsi %ebx, %r8d");
>
> asm volatile ("blsmsk %r8, %rbx");
> - asm volatile ("blsmsk %eax, %eax");
> + asm volatile ("blsmsk %r12d, %r12d");
>
> asm volatile ("blsr %rcx, %rbx");
> asm volatile ("blsr %r8d, %ecx");
>
> - asm volatile ("lzcnt %rax, %r8");
> - asm volatile ("lzcnt %eax, %ecx");
> - asm volatile ("lzcnt %ax, %bx");
> + asm volatile ("lzcnt %r12, %r8");
> + asm volatile ("lzcnt %r12d, %ecx");
> + asm volatile ("lzcnt %r12w, %bx");
>
> - asm volatile ("tzcnt %rax, %rcx");
> - asm volatile ("tzcnt %eax, %ebx");
> - asm volatile ("tzcnt %ax, %r8w");
> + asm volatile ("tzcnt %r12, %rcx");
> + asm volatile ("tzcnt %r12d, %ebx");
> + asm volatile ("tzcnt %r12w, %r8w");
>
> - asm volatile ("mulx %eax, %ebx, %ecx");
> + asm volatile ("mulx %r12d, %ebx, %ecx");
> asm volatile ("mulx %ebx, %ecx, %ebx");
>
> asm volatile ("pdep %r8, %rcx, %rbx");
> asm volatile ("pext %edx, %ecx, %ebx");
> asm volatile ("rorx $10, %r8, %rbx");
> - asm volatile ("sarx %edx, %ebx, %eax");
> - asm volatile ("shlx %eax, %ecx, %ebx");
> - asm volatile ("shrx %r8d, %eax, %ecx");
> + asm volatile ("sarx %edx, %ebx, %r12d"); asm volatile ("shlx %r12d,
> + %ecx, %ebx"); asm volatile ("shrx %r8d, %r12d, %ecx");
>
> asm volatile ("bzhi %edx, %ebx, %r8d");
> - asm volatile ("bzhi %rax, %rcx, %r8");
> + asm volatile ("bzhi %r12, %rcx, %r8");
>
> return 0; /* end bmi_test */
> }
> diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> index 5d65245db39..a5b0e6612aa 100644
> --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> @@ -1201,7 +1201,7 @@ gdb_test "finish" "Run till exit from.*convert_test.*" \
> gdb_test_no_output \
> "set \$r8 = 0" "set r8 for bmi test"
> gdb_test_no_output \
> - "set \$eax = 0x1312" "set eax for bmi test"
> + "set \$r12 = 0x1312" "set r12 for bmi test"
> gdb_test_no_output "set \$ebx = 0xdeadbeef" "set ebx for bmi test"
> gdb_test_no_output "set \$ecx = 0xcafeface" "set ecx for bmi test"
> gdb_test_no_output "set \$edx = 0x2337" "set edx for bmi test"
> @@ -1213,7 +1213,7 @@ if {[record_full_function "bmi"] == true} {
>
> test_one_general_register "shrx" "ecx" "0xe884173"
> test_one_general_register "shlx" "ebx" "0x0"
> - test_one_general_register "sarx" "eax" "0x3"
> + test_one_general_register "sarx" "r12" "0x3"
> test_one_general_register "rorx" "ebx" "0x3b"
> test_one_general_register "pext" "ebx" "0x0"
> test_one_general_register "pdep" "ebx" "0x0"
> @@ -1232,13 +1232,13 @@ if {[record_full_function "bmi"] == true} {
> test_one_general_register "blsr" "ecx" "0x2"
> test_one_general_register "blsr" "ebx" "0xffffffff"
>
> - test_one_general_register "blsmsk" "eax" "0x1312"
> + test_one_general_register "blsmsk" "r12" "0x1312"
> test_one_general_register "blsmsk" "ebx" "0x0"
>
> test_one_general_register "blsi" "r8" "0x0"
> test_one_general_register "blsi" "ecx" "0xdeadaced"
>
> - test_one_general_register "bextr" "eax" "0x1312"
> + test_one_general_register "bextr" "r12" "0x1312"
> test_one_general_register "bextr" "ebx" "0xdeadbeef"
>
> test_one_general_register "andn" "ecx" "0xcafeface"
>
> base-commit: a80fede20bc1330eca5e419392c6595bb3a6ac1d
> --
> 2.55.0
Hi Guinevere,
Thank you for this patch.
My machine has been updated recently to Ubuntu 26.04 and now the test passes also for me (without your patch).
Reason is that I now use a newer gcc version (gcc-15) by default.
Using gcc-14 it still fails, so maybe it would make sense to mention that in the commit message.
I still think using callee saved registers in the entire test would be better, also to avoid future mistakes.
But since it's now passing again, I guess this is also fine.
So with that fixed:
Reviewed-by: Christina Joos <christina.joos@intel.com>
Christina
________________________________________
Intel Deutschland GmbH
Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany
Tel: +49 (89) 99143-0
www.intel.de
Managing Directors: Candice Moore, Jeffrey Schneiderman, Ramachandran Sitaraman
Chairperson of the Supervisory Board: Sonja Pierer
Registered Seat: Munich Commercial Register B: Amtsgericht Munich HRB 186928
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
2026-08-12 13:31 ` Joos, Christina
@ 2026-08-13 6:17 ` Joos, Christina
2026-08-13 13:04 ` Guinevere Larsen
0 siblings, 1 reply; 4+ messages in thread
From: Joos, Christina @ 2026-08-13 6:17 UTC (permalink / raw)
To: Guinevere Larsen, gdb-patches
> -----Original Message-----
> From: Joos, Christina
> Sent: Mittwoch, 12. August 2026 15:31
> To: 'Guinevere Larsen' <guinevere@redhat.com>; gdb-
> patches@sourceware.org
> Subject: RE: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
>
> > -----Original Message-----
> > From: Guinevere Larsen <guinevere@redhat.com>
> > Sent: Montag, 10. August 2026 21:33
> > To: gdb-patches@sourceware.org
> > Cc: Guinevere Larsen <guinevere@redhat.com>; Joos, Christina
> > <christina.joos@intel.com>
> > Subject: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
> >
> > My recent commit, 1c04308f0958cbac83bad22703758139ea6969b6:
> >
> > Author: Guinevere Larsen <guinevere@redhat.com>
> > Date: Tue Jun 16 16:03:43 2026 -0300
> > gdb/record: add support for BMI2 instructions
> >
> > Introduced a few tests that rely on the rax register being set before
> > entering the function. This isn't reliable, as eax is almost always
> > set to 0 (except in my machine for some reason). To avoid ISAs getting
> > in the way, this commit changes the test to use r12 (and r12w/r12d
> > when appropriate), so that it won't be disturbed by the compiler.
> >
> > Reported-by: Christina Joos <christina.joos@intel.com>
> > ---
> > gdb/testsuite/gdb.reverse/i386-avx-reverse.c | 32 +++++++++----------
> > .../gdb.reverse/i386-avx-reverse.exp | 8 ++---
> > 2 files changed, 20 insertions(+), 20 deletions(-)
> >
> > diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> > b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> > index 88cd3fc7f34..4d45482c07a 100644
> > --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> > +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
> > @@ -770,48 +770,48 @@ bmi_test ()
> > {
> > /* start bmi_test. */
> > /* Using GDB, load these values onto registers for testing.
> > - eax = 0x1312
> > + r12 = 0x1312
> > ebx = 0xdeadbeef
> > ecx = 0xcafeface
> > edx = 0x2337
> > r8 = 0
> > this way it's easy to confirm we're undoing things correctly.
> > */
> >
> > - asm volatile ("andn %rbx, %rax, %r8");
> > - asm volatile ("andn %ebx, %eax, %ecx");
> > + asm volatile ("andn %rbx, %r12, %r8"); asm volatile ("andn %ebx,
> > + %r12d, %ecx");
> >
> > asm volatile ("bextr %rcx, %r8, %rbx");
> > asm volatile ("bextr %ebx, %ecx, %r8d");
> >
> > - asm volatile ("blsi %rax, %rcx");
> > + asm volatile ("blsi %r12, %rcx");
> > asm volatile ("blsi %ebx, %r8d");
> >
> > asm volatile ("blsmsk %r8, %rbx");
> > - asm volatile ("blsmsk %eax, %eax");
> > + asm volatile ("blsmsk %r12d, %r12d");
> >
> > asm volatile ("blsr %rcx, %rbx");
> > asm volatile ("blsr %r8d, %ecx");
> >
> > - asm volatile ("lzcnt %rax, %r8");
> > - asm volatile ("lzcnt %eax, %ecx");
> > - asm volatile ("lzcnt %ax, %bx");
> > + asm volatile ("lzcnt %r12, %r8");
> > + asm volatile ("lzcnt %r12d, %ecx"); asm volatile ("lzcnt %r12w,
> > + %bx");
> >
> > - asm volatile ("tzcnt %rax, %rcx");
> > - asm volatile ("tzcnt %eax, %ebx");
> > - asm volatile ("tzcnt %ax, %r8w");
> > + asm volatile ("tzcnt %r12, %rcx");
> > + asm volatile ("tzcnt %r12d, %ebx"); asm volatile ("tzcnt %r12w,
> > + %r8w");
> >
> > - asm volatile ("mulx %eax, %ebx, %ecx");
> > + asm volatile ("mulx %r12d, %ebx, %ecx");
> > asm volatile ("mulx %ebx, %ecx, %ebx");
> >
> > asm volatile ("pdep %r8, %rcx, %rbx");
> > asm volatile ("pext %edx, %ecx, %ebx");
> > asm volatile ("rorx $10, %r8, %rbx");
> > - asm volatile ("sarx %edx, %ebx, %eax");
> > - asm volatile ("shlx %eax, %ecx, %ebx");
> > - asm volatile ("shrx %r8d, %eax, %ecx");
> > + asm volatile ("sarx %edx, %ebx, %r12d"); asm volatile ("shlx
> > + %r12d, %ecx, %ebx"); asm volatile ("shrx %r8d, %r12d, %ecx");
> >
> > asm volatile ("bzhi %edx, %ebx, %r8d");
> > - asm volatile ("bzhi %rax, %rcx, %r8");
> > + asm volatile ("bzhi %r12, %rcx, %r8");
> >
> > return 0; /* end bmi_test */
> > }
> > diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> > b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> > index 5d65245db39..a5b0e6612aa 100644
> > --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> > +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
> > @@ -1201,7 +1201,7 @@ gdb_test "finish" "Run till exit
> > from.*convert_test.*" \ gdb_test_no_output \
> > "set \$r8 = 0" "set r8 for bmi test"
> > gdb_test_no_output \
> > - "set \$eax = 0x1312" "set eax for bmi test"
> > + "set \$r12 = 0x1312" "set r12 for bmi test"
> > gdb_test_no_output "set \$ebx = 0xdeadbeef" "set ebx for bmi test"
> > gdb_test_no_output "set \$ecx = 0xcafeface" "set ecx for bmi test"
> > gdb_test_no_output "set \$edx = 0x2337" "set edx for bmi test"
> > @@ -1213,7 +1213,7 @@ if {[record_full_function "bmi"] == true} {
> >
> > test_one_general_register "shrx" "ecx" "0xe884173"
> > test_one_general_register "shlx" "ebx" "0x0"
> > - test_one_general_register "sarx" "eax" "0x3"
> > + test_one_general_register "sarx" "r12" "0x3"
> > test_one_general_register "rorx" "ebx" "0x3b"
> > test_one_general_register "pext" "ebx" "0x0"
> > test_one_general_register "pdep" "ebx" "0x0"
> > @@ -1232,13 +1232,13 @@ if {[record_full_function "bmi"] == true} {
> > test_one_general_register "blsr" "ecx" "0x2"
> > test_one_general_register "blsr" "ebx" "0xffffffff"
> >
> > - test_one_general_register "blsmsk" "eax" "0x1312"
> > + test_one_general_register "blsmsk" "r12" "0x1312"
> > test_one_general_register "blsmsk" "ebx" "0x0"
> >
> > test_one_general_register "blsi" "r8" "0x0"
> > test_one_general_register "blsi" "ecx" "0xdeadaced"
> >
> > - test_one_general_register "bextr" "eax" "0x1312"
> > + test_one_general_register "bextr" "r12" "0x1312"
> > test_one_general_register "bextr" "ebx" "0xdeadbeef"
> >
> > test_one_general_register "andn" "ecx" "0xcafeface"
> >
> > base-commit: a80fede20bc1330eca5e419392c6595bb3a6ac1d
> > --
> > 2.55.0
>
> Hi Guinevere,
>
> Thank you for this patch.
> My machine has been updated recently to Ubuntu 26.04 and now the test
> passes also for me (without your patch).
> Reason is that I now use a newer gcc version (gcc-15) by default.
>
> Using gcc-14 it still fails, so maybe it would make sense to mention that in the
> commit message.
>
> I still think using callee saved registers in the entire test would be better, also to
> avoid future mistakes.
> But since it's now passing again, I guess this is also fine.
>
> So with that fixed:
This comment might not be so clear about "that", so to clarify:
With a comment about the compiler in the commit message.
Reviewed-by: Christina Joos <christina.joos@intel.com>
Kind Regards,
Christina
________________________________________
Intel Deutschland GmbH
Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany
Tel: +49 (89) 99143-0
www.intel.de
Managing Directors: Candice Moore, Jeffrey Schneiderman, Ramachandran Sitaraman
Chairperson of the Supervisory Board: Sonja Pierer
Registered Seat: Munich Commercial Register B: Amtsgericht Munich HRB 186928
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
2026-08-13 6:17 ` Joos, Christina
@ 2026-08-13 13:04 ` Guinevere Larsen
0 siblings, 0 replies; 4+ messages in thread
From: Guinevere Larsen @ 2026-08-13 13:04 UTC (permalink / raw)
To: Joos, Christina, gdb-patches
On 8/13/26 3:17 AM, Joos, Christina wrote:
>> -----Original Message-----
>> From: Joos, Christina
>> Sent: Mittwoch, 12. August 2026 15:31
>> To: 'Guinevere Larsen' <guinevere@redhat.com>; gdb-
>> patches@sourceware.org
>> Subject: RE: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
>>
>>> -----Original Message-----
>>> From: Guinevere Larsen <guinevere@redhat.com>
>>> Sent: Montag, 10. August 2026 21:33
>>> To: gdb-patches@sourceware.org
>>> Cc: Guinevere Larsen <guinevere@redhat.com>; Joos, Christina
>>> <christina.joos@intel.com>
>>> Subject: [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp
>>>
>>> My recent commit, 1c04308f0958cbac83bad22703758139ea6969b6:
>>>
>>> Author: Guinevere Larsen <guinevere@redhat.com>
>>> Date: Tue Jun 16 16:03:43 2026 -0300
>>> gdb/record: add support for BMI2 instructions
>>>
>>> Introduced a few tests that rely on the rax register being set before
>>> entering the function. This isn't reliable, as eax is almost always
>>> set to 0 (except in my machine for some reason). To avoid ISAs getting
>>> in the way, this commit changes the test to use r12 (and r12w/r12d
>>> when appropriate), so that it won't be disturbed by the compiler.
>>>
>>> Reported-by: Christina Joos <christina.joos@intel.com>
>>> ---
>>> gdb/testsuite/gdb.reverse/i386-avx-reverse.c | 32 +++++++++----------
>>> .../gdb.reverse/i386-avx-reverse.exp | 8 ++---
>>> 2 files changed, 20 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> index 88cd3fc7f34..4d45482c07a 100644
>>> --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> @@ -770,48 +770,48 @@ bmi_test ()
>>> {
>>> /* start bmi_test. */
>>> /* Using GDB, load these values onto registers for testing.
>>> - eax = 0x1312
>>> + r12 = 0x1312
>>> ebx = 0xdeadbeef
>>> ecx = 0xcafeface
>>> edx = 0x2337
>>> r8 = 0
>>> this way it's easy to confirm we're undoing things correctly.
>>> */
>>>
>>> - asm volatile ("andn %rbx, %rax, %r8");
>>> - asm volatile ("andn %ebx, %eax, %ecx");
>>> + asm volatile ("andn %rbx, %r12, %r8"); asm volatile ("andn %ebx,
>>> + %r12d, %ecx");
>>>
>>> asm volatile ("bextr %rcx, %r8, %rbx");
>>> asm volatile ("bextr %ebx, %ecx, %r8d");
>>>
>>> - asm volatile ("blsi %rax, %rcx");
>>> + asm volatile ("blsi %r12, %rcx");
>>> asm volatile ("blsi %ebx, %r8d");
>>>
>>> asm volatile ("blsmsk %r8, %rbx");
>>> - asm volatile ("blsmsk %eax, %eax");
>>> + asm volatile ("blsmsk %r12d, %r12d");
>>>
>>> asm volatile ("blsr %rcx, %rbx");
>>> asm volatile ("blsr %r8d, %ecx");
>>>
>>> - asm volatile ("lzcnt %rax, %r8");
>>> - asm volatile ("lzcnt %eax, %ecx");
>>> - asm volatile ("lzcnt %ax, %bx");
>>> + asm volatile ("lzcnt %r12, %r8");
>>> + asm volatile ("lzcnt %r12d, %ecx"); asm volatile ("lzcnt %r12w,
>>> + %bx");
>>>
>>> - asm volatile ("tzcnt %rax, %rcx");
>>> - asm volatile ("tzcnt %eax, %ebx");
>>> - asm volatile ("tzcnt %ax, %r8w");
>>> + asm volatile ("tzcnt %r12, %rcx");
>>> + asm volatile ("tzcnt %r12d, %ebx"); asm volatile ("tzcnt %r12w,
>>> + %r8w");
>>>
>>> - asm volatile ("mulx %eax, %ebx, %ecx");
>>> + asm volatile ("mulx %r12d, %ebx, %ecx");
>>> asm volatile ("mulx %ebx, %ecx, %ebx");
>>>
>>> asm volatile ("pdep %r8, %rcx, %rbx");
>>> asm volatile ("pext %edx, %ecx, %ebx");
>>> asm volatile ("rorx $10, %r8, %rbx");
>>> - asm volatile ("sarx %edx, %ebx, %eax");
>>> - asm volatile ("shlx %eax, %ecx, %ebx");
>>> - asm volatile ("shrx %r8d, %eax, %ecx");
>>> + asm volatile ("sarx %edx, %ebx, %r12d"); asm volatile ("shlx
>>> + %r12d, %ecx, %ebx"); asm volatile ("shrx %r8d, %r12d, %ecx");
>>>
>>> asm volatile ("bzhi %edx, %ebx, %r8d");
>>> - asm volatile ("bzhi %rax, %rcx, %r8");
>>> + asm volatile ("bzhi %r12, %rcx, %r8");
>>>
>>> return 0; /* end bmi_test */
>>> }
>>> diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
>>> b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
>>> index 5d65245db39..a5b0e6612aa 100644
>>> --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
>>> +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
>>> @@ -1201,7 +1201,7 @@ gdb_test "finish" "Run till exit
>>> from.*convert_test.*" \ gdb_test_no_output \
>>> "set \$r8 = 0" "set r8 for bmi test"
>>> gdb_test_no_output \
>>> - "set \$eax = 0x1312" "set eax for bmi test"
>>> + "set \$r12 = 0x1312" "set r12 for bmi test"
>>> gdb_test_no_output "set \$ebx = 0xdeadbeef" "set ebx for bmi test"
>>> gdb_test_no_output "set \$ecx = 0xcafeface" "set ecx for bmi test"
>>> gdb_test_no_output "set \$edx = 0x2337" "set edx for bmi test"
>>> @@ -1213,7 +1213,7 @@ if {[record_full_function "bmi"] == true} {
>>>
>>> test_one_general_register "shrx" "ecx" "0xe884173"
>>> test_one_general_register "shlx" "ebx" "0x0"
>>> - test_one_general_register "sarx" "eax" "0x3"
>>> + test_one_general_register "sarx" "r12" "0x3"
>>> test_one_general_register "rorx" "ebx" "0x3b"
>>> test_one_general_register "pext" "ebx" "0x0"
>>> test_one_general_register "pdep" "ebx" "0x0"
>>> @@ -1232,13 +1232,13 @@ if {[record_full_function "bmi"] == true} {
>>> test_one_general_register "blsr" "ecx" "0x2"
>>> test_one_general_register "blsr" "ebx" "0xffffffff"
>>>
>>> - test_one_general_register "blsmsk" "eax" "0x1312"
>>> + test_one_general_register "blsmsk" "r12" "0x1312"
>>> test_one_general_register "blsmsk" "ebx" "0x0"
>>>
>>> test_one_general_register "blsi" "r8" "0x0"
>>> test_one_general_register "blsi" "ecx" "0xdeadaced"
>>>
>>> - test_one_general_register "bextr" "eax" "0x1312"
>>> + test_one_general_register "bextr" "r12" "0x1312"
>>> test_one_general_register "bextr" "ebx" "0xdeadbeef"
>>>
>>> test_one_general_register "andn" "ecx" "0xcafeface"
>>>
>>> base-commit: a80fede20bc1330eca5e419392c6595bb3a6ac1d
>>> --
>>> 2.55.0
>> Hi Guinevere,
>>
>> Thank you for this patch.
>> My machine has been updated recently to Ubuntu 26.04 and now the test
>> passes also for me (without your patch).
>> Reason is that I now use a newer gcc version (gcc-15) by default.
>>
>> Using gcc-14 it still fails, so maybe it would make sense to mention that in the
>> commit message.
>>
>> I still think using callee saved registers in the entire test would be better, also to
>> avoid future mistakes.
>> But since it's now passing again, I guess this is also fine.
>>
>> So with that fixed:
> This comment might not be so clear about "that", so to clarify:
>
> With a comment about the compiler in the commit message.
>
> Reviewed-by: Christina Joos <christina.joos@intel.com>
Oh, thanks for double checking the compiler version, and the quick review!
I'll send a v2 to the list soon.
--
Cheers,
Guinevere Larsen
it/its
she/her (deprecated)
> Kind Regards,
> Christina
> ________________________________________
> Intel Deutschland GmbH
>
> Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany
>
> Tel: +49 (89) 99143-0
>
> www.intel.de
>
> Managing Directors: Candice Moore, Jeffrey Schneiderman, Ramachandran Sitaraman
>
> Chairperson of the Supervisory Board: Sonja Pierer
>
> Registered Seat: Munich Commercial Register B: Amtsgericht Munich HRB 186928
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-13 13:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-10 19:32 [PATCH] gdb/record: avoid rax usage in i386-avx-record.exp Guinevere Larsen
2026-08-12 13:31 ` Joos, Christina
2026-08-13 6:17 ` Joos, Christina
2026-08-13 13:04 ` Guinevere Larsen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox