From: Guinevere Larsen <guinevere@redhat.com>
To: "Schimpe, Christina" <christina.schimpe@intel.com>,
"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [PATCH 2/2] gdb/record: add support for BMI2 instructions
Date: Tue, 7 Jul 2026 10:57:19 -0300 [thread overview]
Message-ID: <fb75749d-26b8-465b-9c9a-f292a4f70230@redhat.com> (raw)
In-Reply-To: <SN7PR11MB763815D3F572F88117331605F9F02@SN7PR11MB7638.namprd11.prod.outlook.com>
On 7/7/26 6:18 AM, Schimpe, Christina wrote:
> Hi Guinevere,
>
> If I run this on an Intel cpu I see the following.
>
> ~~~
> Running /tmp/gdb.reverse/i386-avx-reverse.exp ...
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify r8 before bzhi
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ecx before shrx
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify eax before sarx
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ebx before rorx
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ebx before pdep
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ecx before mulx
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify r8 before tzcnt
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ebx before tzcnt
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ecx before tzcnt
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ecx before blsr
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify eax before blsmsk
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify ecx before blsi
> FAIL: gdb.reverse/i386-avx-reverse.exp: verify eax before bextr
> ~~~
>
> Log:
> ~~~
> ecx 0xfb27ea2f -81270225^M
> (gdb) FAIL: gdb.reverse/i386-avx-reverse.exp: verify ecx before shrx
> reverse-step^M
> 810 asm volatile ("shlx %eax, %ecx, %ebx");^M
> (gdb) PASS: gdb.reverse/i386-avx-reverse.exp: reverse-step from shlx to test register ebx
> info register ebx^M
> ebx 0x0 0^M
> (gdb) PASS: gdb.reverse/i386-avx-reverse.exp: verify ebx before shlx
> reverse-step^M
> 809 asm volatile ("sarx %edx, %ebx, %eax");^M
> (gdb) PASS: gdb.reverse/i386-avx-reverse.exp: reverse-step from sarx to test register eax
> info register eax^M
> eax 0xffffffff -1^M
> (gdb) FAIL: gdb.reverse/i386-avx-reverse.exp: verify eax before sarx
> reverse-step^M
> 808 asm volatile ("rorx $10, %r8, %rbx");^M
> (gdb) PASS: gdb.reverse/i386-avx-reverse.exp: reverse-step from rorx to test register ebx
> info register ebx^M
> ebx 0xd7 215^M
> (gdb) FAIL: gdb.reverse/i386-avx-reverse.exp: verify ebx before rorx
> [...]
> ~~~
>
> If I revert the commits
> - "gdb/record: add support for BMI2 instructions"
> - "gdb/record: Add support for recording BMI1 instructions"
> the fails disappear.
Well, they disappear because this commit is where those tests were
introduced. This works fine inmy AMD machine, so the question is, is
this an issue of recording or a difference in how the instructions work?
Could you run this function forward, setting the registers manually, and
check if the test expects the right values in the registers?
>
> I'd have given this a review (especially the x86 part) but didn't see this soon enough
> since I've been out for a couple of weeks.
>
> For now, I just run the test.
>
> Christina
>
>> -----Original Message-----
>> From: Guinevere Larsen <guinevere@redhat.com>
>> Sent: Freitag, 3. Juli 2026 20:22
>> To: gdb-patches@sourceware.org
>> Subject: Re: [PATCH 2/2] gdb/record: add support for BMI2 instructions
>>
>> I'm pushing this series with a trivial change to the test, fixing an oversight I had
>> when writing the original patch
>>
>> On 6/17/26 11:00 AM, Guinevere Larsen wrote:
>>> This commit adds support for recording all instructions in the Bit
>>> Manipulation Instruction set 2, for x86 cpus. The specific
>>> instructions
>>> are:
>>>
>>> * mulx
>>> * pdep
>>> * pext
>>> * rorx
>>> * sarx
>>> * sh[r|l]x
>>> * bzhi
>>>
>>> And adds them to the AVX test, for the same reason as the previous
>>> commit.
>>> ---
>>> gdb/i386-tdep.c | 18 ++++++++++++++++--
>>> gdb/testsuite/gdb.reverse/i386-avx-reverse.c | 13 +++++++++++++
>>> gdb/testsuite/gdb.reverse/i386-avx-reverse.exp | 14 ++++++++++++++
>>> 3 files changed, 43 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index
>>> 8b4dfb43f61..189a711fd81 100644
>>> --- a/gdb/i386-tdep.c
>>> +++ b/gdb/i386-tdep.c
>>> @@ -5128,7 +5128,7 @@ i386_record_vex (struct i386_record_s *ir,
>> uint8_t vex_w, uint8_t vex_r,
>>> case 0xf2: /* VPSLLD, dynamic shift and ANDN. */
>>> case 0xf3: /* VPSLLQ, dynamic shift and BLSI, BLSR and BLSMSK. */
>>> case 0xf4: /* VPMULUDQ */
>>> - case 0xf6: /* VPSADBW. */
>>> + case 0xf6: /* VPSADBW or MULX. */
>>> case 0xfc: /* VPADDB */
>>> case 0xfd: /* VPADDW */
>>> case 0xfe: /* VPADDD */
>>> @@ -5152,6 +5152,15 @@ i386_record_vex (struct i386_record_s *ir,
>> uint8_t vex_w, uint8_t vex_r,
>>> record_full_arch_list_add_reg
>>> (ir->regcache, ir->regmap[X86_RECORD_EFLAGS_REGNUM]);
>>> }
>>> + else if (opcode == 0xf6 && ir->map_select == 2)
>>> + {
>>> + record_full_arch_list_add_reg (ir->regcache,
>>> + ir-
>>> regmap[X86_RECORD_REAX_REGNUM
>>> + + ir->vvvv]);
>>> + record_full_arch_list_add_reg (ir->regcache,
>>> + ir-
>>> regmap[X86_RECORD_REAX_REGNUM
>>> + + reg_offset]);
>>> + }
>>> else
>>> {
>>> /* This set of instructions all share the same exact way to @@
>>> -5164,11 +5173,16 @@ i386_record_vex (struct i386_record_s *ir, uint8_t
>> vex_w, uint8_t vex_r,
>>> }
>>> break;
>>>
>>> - case 0xf7: /* BEXTR. */
>>> + case 0xf0: /* RORX. */
>>> + case 0xf5: /* PDEP or PEXT or BZHI. */
>>> + case 0xf7: /* BEXTR or SARX or SHLX or SHRX. */
>>> i386_record_modrm (ir);
>>> record_full_arch_list_add_reg (ir->regcache,
>>> ir->regmap[X86_RECORD_REAX_REGNUM
>>> + ir->reg + vex_r * 8]);
>>> + if (opcode == 0xf5 && ir->pp == 0)
>>> + record_full_arch_list_add_reg (ir->regcache,
>>> + ir-
>>> regmap[X86_RECORD_EFLAGS_REGNUM]);
>>> break;
>>>
>>> case 0x2e: /* VUCOMIS[S|D]. */
>>> diff --git a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> index 190bc6f4a7a..4e4428f695a 100644
>>> --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.c
>>> @@ -799,6 +799,19 @@ bmi_test ()
>>> asm volatile ("tzcnt %eax, %ebx");
>>> asm volatile ("tzcnt %ax, %r8w");
>>>
>>> + asm volatile ("mulx %eax, %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 ("bzhi %edx, %ebx, %r8d"); asm volatile ("bzhi %rax,
>>> + %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 e1780267ad0..a482142edde 100644
>>> --- a/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
>>> +++ b/gdb/testsuite/gdb.reverse/i386-avx-reverse.exp
>>> @@ -1206,9 +1206,23 @@ gdb_test_no_output \
>>> "set \$eax = 0x1312" "set eax 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"
>>>
>>> if {[record_full_function "bmi"] == true} {
>>>
>>> + test_one_general_register "bzhi" "r8" "0xe884173"
>>> + test_one_general_register "bzhi" "r8" "0x0"
>>> +
>>> + test_one_general_register "shrx" "ecx" "0x0"
>> This was updated to look for 0xe884173
>>
>> --
>> Cheers,
>> Guinevere Larsen
>> it/its
>> she/her (deprecated)
>>
>>> + test_one_general_register "shlx" "ebx" "0x0"
>>> + test_one_general_register "sarx" "eax" "0x3"
>>> + test_one_general_register "rorx" "ebx" "0x3b"
>>> + test_one_general_register "pext" "ebx" "0x0"
>>> + test_one_general_register "pdep" "ebx" "0x0"
>>> +
>>> + test_one_general_register "mulx" "ecx" "0x0"
>>> + test_one_general_register "mulx" "ebx" "0x0"
>>> +
>>> test_one_general_register "tzcnt" "r8" "0x3e"
>>> test_one_general_register "tzcnt" "ebx" "0xe"
>>> test_one_general_register "tzcnt" "ecx" "0x1e"
> Intel Deutschland GmbH
>
> Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany
> Tel: +49 89 991 430, www.intel.de
> Managing Directors: Harry Demas, Jeffrey Schneiderman, Yin Chong Sorrell
> Chairperson of the Supervisory Board: Nicole Lau
> Registered Seat: Munich
> Commercial Register: Amtsgericht Muenchen HRB 186928
>
--
Cheers,
Guinevere Larsen
it/its
she/her (deprecated)
next prev parent reply other threads:[~2026-07-07 13:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-17 12:41 [PATCH 0/2] Add support for BMI1 and BMI2 recording Guinevere Larsen
2026-06-17 14:00 ` [PATCH 1/2] gdb/record: Add support for recording BMI1 instructions Guinevere Larsen
2026-06-17 14:00 ` [PATCH 2/2] gdb/record: add support for BMI2 instructions Guinevere Larsen
2026-07-03 18:22 ` Guinevere Larsen
2026-07-07 9:18 ` Schimpe, Christina
2026-07-07 13:57 ` Guinevere Larsen [this message]
2026-07-09 13:19 ` Schimpe, Christina
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fb75749d-26b8-465b-9c9a-f292a4f70230@redhat.com \
--to=guinevere@redhat.com \
--cc=christina.schimpe@intel.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox