* 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