Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* MIPS/Linux: Register number overlap in target descriptions
@ 2007-12-04 15:01 Maciej W. Rozycki
  2007-12-04 15:10 ` Daniel Jacobowitz
  0 siblings, 1 reply; 3+ messages in thread
From: Maciej W. Rozycki @ 2007-12-04 15:01 UTC (permalink / raw)
  To: gdb-patches; +Cc: Maciej W. Rozycki

Hello,

 Due to the way target register numbers are assigned in the target 
description (using the last number used plus one unless overridden) we 
have two registers overlapping each other.  Specifically, both "pc" and 
"f0" are assigned 37 as their number, which happens because the 
description of "f0" is provided after one of "cause", which specifies 36 
explicitly and "pc" is assigned 37 likewise.  I gather it breaks register 
numbering as such too as there are places elsewhere in the code that refer 
to some registers by number literally.

 To rectify, the change specifies 38 for "f0" explicitly.  For consistency 
and to raise people's attention, I have similarly decided to specify 0 for 
"r0".

 Tested natively for mips-linux-gnu with no regressions.

2007-12-04  Maciej W. Rozycki  <macro@mips.com>

	* features/mips-cpu.xml: Specify "regnum" for "r0" explicitly.
	* features/mips64-cpu.xml: Likewise.
	* features/mips-fpu.xml: Specify "regnum" for "f0" explicitly.
	* features/mips64-fpu.xml: Likewise.
	* features/mips-linux.c: Regenerate.
	* features/mips64-linux.c: Regenerate.

 OK to apply?

  Maciej

gdb-mips-tdesc.diff
Index: gdb/src/gdb/features/mips-cpu.xml
===================================================================
--- gdb.orig/src/gdb/features/mips-cpu.xml	2007-12-03 11:05:25.000000000 +0000
+++ gdb/src/gdb/features/mips-cpu.xml	2007-12-03 11:07:06.000000000 +0000
@@ -7,7 +7,7 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.mips.cpu">
-  <reg name="r0" bitsize="32"/>
+  <reg name="r0" bitsize="32" regnum="0"/>
   <reg name="r1" bitsize="32"/>
   <reg name="r2" bitsize="32"/>
   <reg name="r3" bitsize="32"/>
Index: gdb/src/gdb/features/mips-fpu.xml
===================================================================
--- gdb.orig/src/gdb/features/mips-fpu.xml	2007-12-03 11:05:25.000000000 +0000
+++ gdb/src/gdb/features/mips-fpu.xml	2007-12-03 11:07:15.000000000 +0000
@@ -7,7 +7,7 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.mips.fpu">
-  <reg name="f0" bitsize="32" type="ieee_single"/>
+  <reg name="f0" bitsize="32" type="ieee_single" regnum="38"/>
   <reg name="f1" bitsize="32" type="ieee_single"/>
   <reg name="f2" bitsize="32" type="ieee_single"/>
   <reg name="f3" bitsize="32" type="ieee_single"/>
Index: gdb/src/gdb/features/mips64-cpu.xml
===================================================================
--- gdb.orig/src/gdb/features/mips64-cpu.xml	2007-12-03 11:05:25.000000000 +0000
+++ gdb/src/gdb/features/mips64-cpu.xml	2007-12-03 11:06:01.000000000 +0000
@@ -7,7 +7,7 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.mips.cpu">
-  <reg name="r0" bitsize="64"/>
+  <reg name="r0" bitsize="64" regnum="0"/>
   <reg name="r1" bitsize="64"/>
   <reg name="r2" bitsize="64"/>
   <reg name="r3" bitsize="64"/>
Index: gdb/src/gdb/features/mips64-fpu.xml
===================================================================
--- gdb.orig/src/gdb/features/mips64-fpu.xml	2007-12-03 11:05:25.000000000 +0000
+++ gdb/src/gdb/features/mips64-fpu.xml	2007-12-03 11:06:48.000000000 +0000
@@ -7,7 +7,7 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.mips.fpu">
-  <reg name="f0" bitsize="64" type="ieee_double"/>
+  <reg name="f0" bitsize="64" type="ieee_double" regnum="38"/>
   <reg name="f1" bitsize="64" type="ieee_double"/>
   <reg name="f2" bitsize="64" type="ieee_double"/>
   <reg name="f3" bitsize="64" type="ieee_double"/>
Index: gdb/src/gdb/features/mips-linux.c
===================================================================
--- gdb.orig/src/gdb/features/mips-linux.c	2007-12-03 11:13:40.000000000 +0000
+++ gdb/src/gdb/features/mips-linux.c	2007-12-03 11:53:07.000000000 +0000
@@ -57,43 +57,43 @@
   tdesc_create_reg (feature, "cause", 36, 1, NULL, 32, "int");
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
-  tdesc_create_reg (feature, "f0", 37, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f1", 38, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f2", 39, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f3", 40, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f4", 41, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f5", 42, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f6", 43, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f7", 44, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f8", 45, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f9", 46, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f10", 47, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f11", 48, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f12", 49, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f13", 50, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f14", 51, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f15", 52, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f16", 53, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f17", 54, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f18", 55, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f19", 56, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f20", 57, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f21", 58, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f22", 59, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f23", 60, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f24", 61, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f25", 62, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f26", 63, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f27", 64, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f28", 65, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f29", 66, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f30", 67, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "f31", 68, 1, NULL, 32, "ieee_single");
-  tdesc_create_reg (feature, "fcsr", 69, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fir", 70, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "f0", 38, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f1", 39, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f2", 40, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f3", 41, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f4", 42, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f5", 43, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f6", 44, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f7", 45, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f8", 46, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f9", 47, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f10", 48, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f11", 49, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f12", 50, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f13", 51, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f14", 52, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f15", 53, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f16", 54, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f17", 55, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f18", 56, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f19", 57, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f20", 58, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f21", 59, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f22", 60, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f23", 61, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f24", 62, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f25", 63, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f26", 64, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f27", 65, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f28", 66, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f29", 67, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f30", 68, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f31", 69, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "fcsr", 70, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fir", 71, 1, "float", 32, "int");
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
-  tdesc_create_reg (feature, "restart", 71, 1, "system", 32, "int");
+  tdesc_create_reg (feature, "restart", 72, 1, "system", 32, "int");
 
   tdesc_mips_linux = result;
 }
Index: gdb/src/gdb/features/mips64-linux.c
===================================================================
--- gdb.orig/src/gdb/features/mips64-linux.c	2007-12-03 11:13:40.000000000 +0000
+++ gdb/src/gdb/features/mips64-linux.c	2007-12-03 11:53:07.000000000 +0000
@@ -57,43 +57,43 @@
   tdesc_create_reg (feature, "cause", 36, 1, NULL, 64, "int");
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
-  tdesc_create_reg (feature, "f0", 37, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f1", 38, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f2", 39, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f3", 40, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f4", 41, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f5", 42, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f6", 43, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f7", 44, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f8", 45, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f9", 46, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f10", 47, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f11", 48, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f12", 49, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f13", 50, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f14", 51, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f15", 52, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f16", 53, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f17", 54, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f18", 55, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f19", 56, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f20", 57, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f21", 58, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f22", 59, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f23", 60, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f24", 61, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f25", 62, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f26", 63, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f27", 64, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f28", 65, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f29", 66, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f30", 67, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f31", 68, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "fcsr", 69, 1, "float", 64, "int");
-  tdesc_create_reg (feature, "fir", 70, 1, "float", 64, "int");
+  tdesc_create_reg (feature, "f0", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 64, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 65, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 66, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 67, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 68, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 69, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fcsr", 70, 1, "float", 64, "int");
+  tdesc_create_reg (feature, "fir", 71, 1, "float", 64, "int");
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
-  tdesc_create_reg (feature, "restart", 71, 1, "system", 64, "int");
+  tdesc_create_reg (feature, "restart", 72, 1, "system", 64, "int");
 
   tdesc_mips64_linux = result;
 }


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

* Re: MIPS/Linux: Register number overlap in target descriptions
  2007-12-04 15:01 MIPS/Linux: Register number overlap in target descriptions Maciej W. Rozycki
@ 2007-12-04 15:10 ` Daniel Jacobowitz
  2007-12-04 15:20   ` Maciej W. Rozycki
  0 siblings, 1 reply; 3+ messages in thread
From: Daniel Jacobowitz @ 2007-12-04 15:10 UTC (permalink / raw)
  To: Maciej W. Rozycki; +Cc: gdb-patches, Maciej W. Rozycki

On Tue, Dec 04, 2007 at 03:01:33PM +0000, Maciej W. Rozycki wrote:
> Hello,
> 
>  Due to the way target register numbers are assigned in the target 
> description (using the last number used plus one unless overridden) we 
> have two registers overlapping each other.  Specifically, both "pc" and 
> "f0" are assigned 37 as their number, which happens because the 
> description of "f0" is provided after one of "cause", which specifies 36 
> explicitly and "pc" is assigned 37 likewise.  I gather it breaks register 
> numbering as such too as there are places elsewhere in the code that refer 
> to some registers by number literally.

No, those numberings are different.  They are used for internal
register layout, but only sent to the target if there is no XML
description.  So a mismatch is fine except when you're trying to
retain compatibility with legacy stubs.

Of course, I was trying.  Not sure how I missed this - did it have
any symptoms?

Patch is OK.  After this, I hope the register numbers line up with
mips-elf again; I think they do.

-- 
Daniel Jacobowitz
CodeSourcery


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

* Re: MIPS/Linux: Register number overlap in target descriptions
  2007-12-04 15:10 ` Daniel Jacobowitz
@ 2007-12-04 15:20   ` Maciej W. Rozycki
  0 siblings, 0 replies; 3+ messages in thread
From: Maciej W. Rozycki @ 2007-12-04 15:20 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches, Maciej W. Rozycki

On Tue, 4 Dec 2007, Daniel Jacobowitz wrote:

> No, those numberings are different.  They are used for internal
> register layout, but only sent to the target if there is no XML
> description.  So a mismatch is fine except when you're trying to
> retain compatibility with legacy stubs.

 Ah, I see.

> Of course, I was trying.  Not sure how I missed this - did it have
> any symptoms?

 I just spotted it while putting support for DSP registers I am about to 
submit in line with HEAD.

> Patch is OK.  After this, I hope the register numbers line up with
> mips-elf again; I think they do.

 It looks like.

  Maciej


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

end of thread, other threads:[~2007-12-04 15:20 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-12-04 15:01 MIPS/Linux: Register number overlap in target descriptions Maciej W. Rozycki
2007-12-04 15:10 ` Daniel Jacobowitz
2007-12-04 15:20   ` Maciej W. Rozycki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox