public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/record: Support for rdtscp in i386_process_record.
@ 2023-12-07 10:57 Cupertino Miranda
  0 siblings, 0 replies; only message in thread
From: Cupertino Miranda @ 2023-12-07 10:57 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d2ee8bb694500c9e460283f9078b7cc53362dc95

commit d2ee8bb694500c9e460283f9078b7cc53362dc95
Author: Cupertino Miranda <cupertino.miranda@oracle.com>
Date:   Tue Dec 5 23:09:57 2023 +0000

    gdb/record: Support for rdtscp in i386_process_record.
    
    This patch adds support for process recording of the instruction rdtscp in
    x86 architecture.
    Debugging applications with "record full" fail to record with the error
    message "Process record does not support instruction 0xf01f9".
    
    Approved-by: Guinevere Larsen <blarsen@redhat.com>

Diff:
---
 gdb/i386-tdep.c                              |  8 ++++++++
 gdb/testsuite/gdb.reverse/insn-reverse-x86.c | 13 ++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index e00c3bd9d56..e379c179885 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -7008,6 +7008,9 @@ Do you want to stop the program?"),
       goto no_support;
       break;
 
+    case 0x0f01f9:  /* rdtscp */
+      I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
+      [[fallthrough]];
     case 0x0f31:    /* rdtsc */
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDX_REGNUM);
@@ -7117,6 +7120,11 @@ Do you want to stop the program?"),
     case 0x0f01:
       if (i386_record_modrm (&ir))
 	return -1;
+      if (ir.modrm == 0xf9)
+	{
+	  opcode = (opcode << 8) | 0xf9;
+	  goto reswitch;
+	}
       switch (ir.reg)
 	{
 	case 0:  /* sgdt */
diff --git a/gdb/testsuite/gdb.reverse/insn-reverse-x86.c b/gdb/testsuite/gdb.reverse/insn-reverse-x86.c
index 2b4fb4c10e0..23888ba7350 100644
--- a/gdb/testsuite/gdb.reverse/insn-reverse-x86.c
+++ b/gdb/testsuite/gdb.reverse/insn-reverse-x86.c
@@ -270,6 +270,16 @@ rdseed (void)
 #endif
 }
 
+/* Test rdtscp support.  */
+
+void
+rdtscp (void)
+{
+#ifdef __x86_64__
+  __asm__ volatile ("rdtscp");
+#endif
+}
+
 /* Initialize arch-specific bits.  */
 
 static void
@@ -283,5 +293,6 @@ initialize (void)
 static testcase_ftype testcases[] =
 {
   rdrand,
-  rdseed
+  rdseed,
+  rdtscp
 };

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-12-07 10:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-07 10:57 [binutils-gdb] gdb/record: Support for rdtscp in i386_process_record Cupertino Miranda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).