public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] gdb: LoongArch: add orig_a0 into register set
@ 2022-07-03  3:58 Xi Ruoyao
  2022-07-04  2:50 ` Tiezhu Yang
  0 siblings, 1 reply; 4+ messages in thread
From: Xi Ruoyao @ 2022-07-03  3:58 UTC (permalink / raw)
  To: gdb-patches

Upstreamed Linux kernel has added orig_a0 into struct user_pt_regs.
Adapt GDB register definition so it will work with upstream kernel.

Url: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/loongarch/include/uapi/asm/ptrace.h#n24
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
---
 gdb/features/loongarch/base32.c   | 1 +
 gdb/features/loongarch/base32.xml | 1 +
 gdb/features/loongarch/base64.c   | 1 +
 gdb/features/loongarch/base64.xml | 1 +
 gdb/loongarch-linux-tdep.c        | 4 ++++
 gdb/loongarch-tdep.c              | 1 +
 gdb/loongarch-tdep.h              | 7 ++++---
 7 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/gdb/features/loongarch/base32.c b/gdb/features/loongarch/base32.c
index 7105c152aed..3fb35ef2d05 100644
--- a/gdb/features/loongarch/base32.c
+++ b/gdb/features/loongarch/base32.c
@@ -41,6 +41,7 @@ create_feature_loongarch_base32 (struct target_desc *result, long regnum)
   tdesc_create_reg (feature, "r29", regnum++, 1, "general", 32, "uint32");
   tdesc_create_reg (feature, "r30", regnum++, 1, "general", 32, "uint32");
   tdesc_create_reg (feature, "r31", regnum++, 1, "general", 32, "uint32");
+  tdesc_create_reg (feature, "orig_a0", regnum++, 1, "general", 32, "uint32");
   tdesc_create_reg (feature, "pc", regnum++, 1, "general", 32, "code_ptr");
   tdesc_create_reg (feature, "badv", regnum++, 1, "general", 32, "code_ptr");
   return regnum;
diff --git a/gdb/features/loongarch/base32.xml b/gdb/features/loongarch/base32.xml
index 5b00f8a8d37..af47bbd3da4 100644
--- a/gdb/features/loongarch/base32.xml
+++ b/gdb/features/loongarch/base32.xml
@@ -39,6 +39,7 @@
   <reg name="r29" bitsize="32" type="uint32" group="general"/>
   <reg name="r30" bitsize="32" type="uint32" group="general"/>
   <reg name="r31" bitsize="32" type="uint32" group="general"/>
+  <reg name="orig_a0" bitsize="32" type="uint32" group="general"/>
   <reg name="pc" bitsize="32" type="code_ptr" group="general"/>
   <reg name="badv" bitsize="32" type="code_ptr" group="general"/>
 </feature>
diff --git a/gdb/features/loongarch/base64.c b/gdb/features/loongarch/base64.c
index 63eee024554..d84d4256294 100644
--- a/gdb/features/loongarch/base64.c
+++ b/gdb/features/loongarch/base64.c
@@ -41,6 +41,7 @@ create_feature_loongarch_base64 (struct target_desc *result, long regnum)
   tdesc_create_reg (feature, "r29", regnum++, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r30", regnum++, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r31", regnum++, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "orig_a0", regnum++, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "pc", regnum++, 1, "general", 64, "code_ptr");
   tdesc_create_reg (feature, "badv", regnum++, 1, "general", 64, "code_ptr");
   return regnum;
diff --git a/gdb/features/loongarch/base64.xml b/gdb/features/loongarch/base64.xml
index bef91e50dd7..2d8a1f6b734 100644
--- a/gdb/features/loongarch/base64.xml
+++ b/gdb/features/loongarch/base64.xml
@@ -39,6 +39,7 @@
   <reg name="r29" bitsize="64" type="uint64" group="general"/>
   <reg name="r30" bitsize="64" type="uint64" group="general"/>
   <reg name="r31" bitsize="64" type="uint64" group="general"/>
+  <reg name="orig_a0" bitsize="64" type="uint64" group="general"/>
   <reg name="pc" bitsize="64" type="code_ptr" group="general"/>
   <reg name="badv" bitsize="64" type="code_ptr" group="general"/>
 </feature>
diff --git a/gdb/loongarch-linux-tdep.c b/gdb/loongarch-linux-tdep.c
index 21fc67f9323..8f70dda83eb 100644
--- a/gdb/loongarch-linux-tdep.c
+++ b/gdb/loongarch-linux-tdep.c
@@ -48,6 +48,9 @@ loongarch_supply_gregset (const struct regset *regset,
 	  regcache->raw_supply (i, (const void *) buf);
 	}
 
+      buf = (const gdb_byte*) gprs + regsize * LOONGARCH_ORIG_A0_REGNUM;
+      regcache->raw_supply (LOONGARCH_ORIG_A0_REGNUM, (const void *) buf);
+
       buf = (const gdb_byte*) gprs + regsize * LOONGARCH_PC_REGNUM;
       regcache->raw_supply (LOONGARCH_PC_REGNUM, (const void *) buf);
 
@@ -57,6 +60,7 @@ loongarch_supply_gregset (const struct regset *regset,
   else if (regnum == 0)
     regcache->raw_supply_zeroed (0);
   else if ((regnum > 0 && regnum < 32)
+	   || regnum == LOONGARCH_ORIG_A0_REGNUM
 	   || regnum == LOONGARCH_PC_REGNUM
 	   || regnum == LOONGARCH_BADV_REGNUM)
     {
diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c
index f2f4e3be909..76480ce6c94 100644
--- a/gdb/loongarch-tdep.c
+++ b/gdb/loongarch-tdep.c
@@ -576,6 +576,7 @@ loongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   for (int i = 0; i < 32; i++)
     valid_p &= tdesc_numbered_register (feature_cpu, tdesc_data.get (), regnum++,
 					loongarch_r_normal_name[i] + 1);
+  valid_p &= tdesc_numbered_register (feature_cpu, tdesc_data.get (), regnum++, "orig_a0");
   valid_p &= tdesc_numbered_register (feature_cpu, tdesc_data.get (), regnum++, "pc");
   valid_p &= tdesc_numbered_register (feature_cpu, tdesc_data.get (), regnum++, "badv");
   if (!valid_p)
diff --git a/gdb/loongarch-tdep.h b/gdb/loongarch-tdep.h
index 54b34af1d66..acf0191fd65 100644
--- a/gdb/loongarch-tdep.h
+++ b/gdb/loongarch-tdep.h
@@ -35,9 +35,10 @@ enum
   LOONGARCH_A0_REGNUM = 4,		/* First Argument/Return Value.  */
   LOONGARCH_A7_REGNUM = 11,		/* Seventh Argument/Syscall Number.  */
   LOONGARCH_FP_REGNUM = 22,		/* Frame Pointer.  */
-  LOONGARCH_PC_REGNUM = 32,		/* Program Counter.  */
-  LOONGARCH_BADV_REGNUM = 33,		/* Bad Vaddr for Addressing Exception.  */
-  LOONGARCH_LINUX_NUM_GREGSET = 45,	/* 32 GPR, PC, BADV, RESERVED 11.  */
+  LOONGARCH_ORIG_A0_REGNUM = 32,	/* Syscall's original arg0.  */
+  LOONGARCH_PC_REGNUM = 33,		/* Program Counter.  */
+  LOONGARCH_BADV_REGNUM = 34,		/* Bad Vaddr for Addressing Exception.  */
+  LOONGARCH_LINUX_NUM_GREGSET = 45,	/* 32 GPR, ORIG_A0, PC, BADV, RESERVED 10.  */
 };
 
 /* Register set definitions.  */
-- 
2.37.0



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-07-05 14:38 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-03  3:58 [PATCH] gdb: LoongArch: add orig_a0 into register set Xi Ruoyao
2022-07-04  2:50 ` Tiezhu Yang
2022-07-04  6:20   ` [PATCH v2] " Xi Ruoyao
2022-07-05 14:38     ` Tiezhu Yang

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).