Fix mips64 ddb backtracing
Vladimir 'φ-coder/phcoder' Serbinenko
phcoder at gmail.com
Wed May 26 22:27:25 UTC 2010
This is a multi-part message in MIME format.
--------------080906000803010207060400
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
I've come accross this issue when coding for yeeloong. It's easy to fix
(patch attached). After applying the patch I had the session with
debugger as in attached capture file.
Can this patch go directly to -current ?
--=20
Regards
Vladimir '=CF=86-coder/phcoder' Serbinenko
--------------080906000803010207060400
Content-Type: text/x-diff;
name="mips64_bt.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline;
filename="mips64_bt.diff"
=3D=3D=3D modified file 'mips/mips/db_trace.c'
--- mips/mips/db_trace.c 2010-05-26 07:47:16 +0000
+++ mips/mips/db_trace.c 2010-05-26 22:19:06 +0000
@@ -49,9 +49,19 @@
#define MIPS_END_OF_FUNCTION(ins) ((ins) =3D=3D 0x03e00008)
=20
/*
- * kdbpeekD(addr) - skip one word starting at 'addr', then read the seco=
nd word
+ * kdbpeekD(addr) - read double word.
*/
-#define kdbpeekD(addr) kdbpeek(((int *)(addr)) + 1)
+
+static inline register_t
+kdbpeekD (uintptr_t addr) {
+#ifdef __MIPSEL__
+ return ((register_t) kdbpeek ((int *) addr))
+ | (((register_t) kdbpeek ((int *) addr + 1)) << 32);
+#else
+ return ((register_t) kdbpeek ((int *) addr + 1))
+ | (((register_t) kdbpeek ((int *) addr)) << 32);
+#endif
+}
=20
/*
* Functions ``special'' enough to print by name
@@ -140,7 +150,7 @@
}
/* check for bad SP: could foul up next frame */
/*XXX MIPS64 bad: this hard-coded SP is lame */
- if (sp & 3 || sp < 0x80000000) {
+ if (sp & 3 || (uintptr_t) sp < 0xffffffff80000000ULL) {
(*printfn) ("SP 0x%x: not in kernel\n", sp);
ra =3D 0;
subr =3D 0;
@@ -181,7 +191,7 @@
}
/* check for bad PC */
/*XXX MIPS64 bad: These hard coded constants are lame */
- if (pc & 3 || pc < (uintptr_t)0x80000000) {
+ if (pc & 3 || (uintptr_t)pc < 0xffffffff80000000ULL) {
(*printfn) ("PC 0x%x: not in kernel\n", pc);
ra =3D 0;
goto done;
@@ -303,32 +313,34 @@
mask |=3D (1 << i.IType.rt);
switch (i.IType.rt) {
case 4:/* a0 */
- args[0] =3D kdbpeekD((int *)(sp + (short)i.IType.imm));
+ args[0] =3D kdbpeekD(sp + (short)i.IType.imm);
valid_args[0] =3D 1;
break;
=20
case 5:/* a1 */
- args[1] =3D kdbpeekD((int *)(sp + (short)i.IType.imm));
+ args[1] =3D kdbpeekD(sp + (short)i.IType.imm);
valid_args[1] =3D 1;
break;
=20
case 6:/* a2 */
- args[2] =3D kdbpeekD((int *)(sp + (short)i.IType.imm));
+ args[2] =3D kdbpeekD(sp + (short)i.IType.imm);
valid_args[2] =3D 1;
break;
=20
case 7:/* a3 */
- args[3] =3D kdbpeekD((int *)(sp + (short)i.IType.imm));
+ args[3] =3D kdbpeekD(sp + (short)i.IType.imm);
valid_args[3] =3D 1;
break;
=20
case 31: /* ra */
- ra =3D kdbpeekD((int *)(sp + (short)i.IType.imm));
+ ra =3D kdbpeekD(sp + (short)i.IType.imm);
}
break;
=20
case OP_ADDI:
case OP_ADDIU:
+ case OP_DADDIU:
+ case OP_DADDI:
/* look for stack pointer adjustment */
if (i.IType.rs !=3D 29 || i.IType.rt !=3D 29)
break;
@@ -337,17 +349,18 @@
}
=20
done:
- (*printfn) ("%s+%x (", fn_name(subr), pc - subr);
+ (*printfn) ("%s+%lx (", fn_name(subr), (unsigned long) (pc - subr));
for (j =3D 0; j < 4; j ++) {
if (j > 0)
(*printfn)(",");
if (valid_args[j])
- (*printfn)("%x", args[j]);
+ (*printfn)("%lx", (unsigned long) args[j]);
else
(*printfn)("?");
}
=20
- (*printfn) (") ra %x sp %x sz %d\n", ra, sp, stksize);
+ (*printfn) (") ra %lx sp %lx sz %ld\n", (unsigned long) ra,
+ (unsigned long) sp, (long) stksize);
=20
if (ra) {
if (pc =3D=3D ra && stksize =3D=3D 0)
--------------080906000803010207060400
Content-Type: application/cap;
name="capthu.cap"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="capthu.cap"
R1JVQiBDUzU1MzYgYXQgMDAwMDAyMDBTTUJ1cyBjb250cm9sbGVyIGVuYWJsZWQuCjAwMDAw
MDgwQ2FjaGVzIGVuYWJsZWQKV2VsY29tZSB0byBHUlVCIQoKZXJyb3I6IG5vIGRldmljZSBj
b25uZWN0ZWQuCmVycm9yOiBubyBkZXZpY2UgY29ubmVjdGVkLgpHTlUgR1JVQiAgdmVyc2lv
biAxLjk4CgogICBNaW5pbWFsIEJBU0gtbGlrZSBsaW5lIGVkaXRpbmcgaXMgc3VwcG9ydGVk
LiBGb3IgdGhlIGZpcnN0IHdvcmQsIFRBQgogICBsaXN0cyBwb3NzaWJsZSBjb21tYW5kIGNv
bXBsZXRpb25zLiBBbnl3aGVyZSBlbHNlIFRBQiBsaXN0cyBwb3NzaWJsZQogICBkZXZpY2Ug
b3IgZmlsZSBjb21wbGV0aW9ucy4gCgoKCgoKZ3J1Yj4gbXVsdGlib290MiAodXNiMCxtc2Rv
czEpL2tlcm5lbApncnViPiBib290CmVudHJ5OiBtaXBzX2luaXQoKQpDYWNoZSBpbmZvOgog
IHBpY2FjaGVfc3RyaWRlICAgID0gMAogIHBpY2FjaGVfbG9vcGNvdW50ID0gMAogIHBkY2Fj
aGVfc3RyaWRlICAgID0gMAogIHBkY2FjaGVfbG9vcGNvdW50ID0gMApjcHUwOiBVbmtub3du
IGNpZCAwIHByb2Nlc3NvciB2My45OQogIE1NVTogU3RhbmRhcmQgQkFULCA2NCBlbnRyaWVz
CiAgTDEgaS1jYWNoZTogMCB3YXlzIG9mIDAgc2V0cywgMzIgYnl0ZXMgcGVyIGxpbmUKICBM
MSBkLWNhY2hlOiAwIHdheXMgb2YgMCBzZXRzLCAzMiBieXRlcyBwZXIgbGluZQpQaHlzaWNh
bCBtZW1vcnkgY2h1bmsocyk6CjB4NDVmMDAwIC0gMHhmYmExZmZmLCAyNTkyNzI3MDQgYnl0
ZXMgKDYzMjk5IHBhZ2VzKQpNYXhtZW0gaXMgMHhmYmEyMDAwCktEQjogZGVidWdnZXIgYmFj
a2VuZHM6IGRkYgpLREI6IGN1cnJlbnQgYmFja2VuZDogZGRiCmh6PTEwMCBjeWxfcGVyX3Rp
Y2s6NDAwMDAwIGN5bF9wZXJfdXNlYzo0MDAgZnJlcTo0MDAwMDAwMDAgY3lsX3Blcl9oejo0
MDAwMDAwIGN5bF9wZXJfc3RhdGh6OjQwMDAwMDAgY3lsX3Blcl9wcm9maHo6NDAwMDAwMApD
b3B5cmlnaHQgKGMpIDE5OTItMjAxMCBUaGUgRnJlZUJTRCBQcm9qZWN0LgpDb3B5cmlnaHQg
KGMpIDE5NzksIDE5ODAsIDE5ODMsIDE5ODYsIDE5ODgsIDE5ODksIDE5OTEsIDE5OTIsIDE5
OTMsIDE5OTQKCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCkZyZWVCU0QgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFy
ayBvZiBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uLgpGcmVlQlNEIDkuMC1DVVJSRU5UICMzNjog
VGh1IE1heSAyNyAwMDoxNTo1NSBDRVNUIDIwMTAKICAgIHBoY29kZXJAZnJlZWJzZC5iZzQ1
LnBobmV0Oi9ob21lL3BoY29kZXIvY29tcGlsZS9taXBzL2hvbWUvcGhjb2Rlci9wNC95ZWVs
b29uZy9zcmMvc3lzL1lFRUxPT05HIG1pcHMKVHJhcCBjYXVzZSA9IDIgKFRMQiBtaXNzIChs
b2FkIG9yIGluc3RyLiBmZXRjaCkgLSBrZXJuZWwgbW9kZSkKWyB0aHJlYWQgcGlkIDAgdGlk
IDAgXQpTdG9wcGVkIGF0ICAgICAgMHhmZmZmZmZmZjgwMzg1YzY0OiAgICAgbGJ1ICAgICB2
MCwyMDUoYTApCmRiPiB0ClRyYWNpbmcgcGlkIDAgdGlkIDAgdGQgMHhmZmZmZmZmZjgwNDNm
MDcwCmZmZmZmZmZmODAzYzgyMTgrNDAgKD8sPyw/LD8pIHJhIGZmZmZmZmZmODAxMzczYjgg
c3AgZmZmZmZmZmY4MDQ3MDBlMCBzeiAxNgpmZmZmZmZmZjgwMTM3MjMwKzE4OCAoMCw/LGZm
ZmZmZmZmZmZmZmZmZmYsPykgcmEgZmZmZmZmZmY4MDEzNmFmOCBzcCBmZmZmZmZmZjgwNDcw
MGYwIHN6IDQ4CmZmZmZmZmZmODAxMzY2NjArNDk4ICg/LD8sPyw/KSByYSBmZmZmZmZmZjgw
MTM2ZGM4IHNwIGZmZmZmZmZmODA0NzAxMjAgc3ogMTkyCmZmZmZmZmZmODAxMzZjZDArZjgg
KD8sPyw/LD8pIHJhIGZmZmZmZmZmODAxM2E2MDAgc3AgZmZmZmZmZmY4MDQ3MDFlMCBzeiAx
NgpmZmZmZmZmZjgwMTNhNDQwKzFjMCAoPyw/LD8sPykgcmEgZmZmZmZmZmY4MDIyOTVhYyBz
cCBmZmZmZmZmZjgwNDcwMWYwIHN6IDgxNgpmZmZmZmZmZjgwMjI5NDIwKzE4YyAoPyw/LD8s
PykgcmEgZmZmZmZmZmY4MDNiOTQ0YyBzcCBmZmZmZmZmZjgwNDcwNTIwIHN6IDMyCnRyYXAr
MWM4YyAoPyw/LD8sPykgcmEgZmZmZmZmZmY4MDNhZDI0MCBzcCBmZmZmZmZmZjgwNDcwNTQw
IHN6IDI1NgpNaXBzS2VybkdlbkV4Y2VwdGlvbisxNTQgKDAsMCwwLGZmZmZmZmZmODA0NzA5
MDApIHJhIGZmZmZmZmZmODAzODVjNjQgc3AgZmZmZmZmZmY4MDQ3MDY0MCBzeiAzNjgKZmZm
ZmZmZmY4MDM4NWM1OCtjICg/LD8sPyw/KSByYSBmZmZmZmZmZjgwMzg4MDg4IHNwIGZmZmZm
ZmZmODA0NzA3YjAgc3ogMTYKZmZmZmZmZmY4MDM4ODAxOCs3MCAoZmZmZmZmZmY4MDQ3MDhm
OCw/LDAsPykgcmEgZmZmZmZmZmY4MDM3OWU1YyBzcCBmZmZmZmZmZjgwNDcwN2MwIHN6IDEy
OApmZmZmZmZmZjgwMzc5ZDcwK2VjICgwLGZmZmZmZmZmYzAwMDIwMDAsMiwwKSByYSBmZmZm
ZmZmZjgwM2I4MjgwIHNwIGZmZmZmZmZmODA0NzA4NDAgc3ogNDgwCnRyYXArYWMwICg/LD8s
Pyw/KSByYSBmZmZmZmZmZjgwM2FkMjQwIHNwIGZmZmZmZmZmODA0NzBhMjAgc3ogMjU2Ck1p
cHNLZXJuR2VuRXhjZXB0aW9uKzE1NCAoZmZmZmZmZmZjMDAwMjAwNCwwLDEsZmZmZmZmZmZj
MDAzMDAwMCkgcmEgZmZmZmZmZmY4MDNjYTVlNCBzcCBmZmZmZmZmZjgwNDcwYjIwIHN6IDM2
OApmZmZmZmZmZjgwM2NhNWIwKzM0ICg/LD8sPyw/KSByYSAwIHNwIGZmZmZmZmZmODA0NzBj
OTAgc3ogMApwaWQgMApkYj4gc2hvdyByZWdpc3RlcnMKYXQgICAgICAgICAgMHhmZmZmZmZm
ZjgwNDQxN2Q4CnYwICAgICAgICAgICAgICAgICAweDEKdjEgICAgICAgICAgICAgICAgICAg
MAphMCAgICAgICAgICAgICAgICAgICAwCmExICAgICAgICAgICAgICAgICAgIDAKYTIgICAg
ICAgICAgICAgICAgICAgMAphMyAgICAgICAgICAweGZmZmZmZmZmODA0NzA5MDAKdDAgICAg
ICAgICAgMHhmZmZmZmZmZjgwMzk2OWZjCnQxICAgICAgICAgICAgICAweDEwMDAKdDIgICAg
ICAgICAgICAgICAgICAgMAp0MyAgICAgICAgICAgICAgICAgICAwCnQ0ICAgICAgICAgIDB4
ZmZmZmZmZmY4MDQ3MDhlOAp0NSAgICAgICAgICAweGZmZmZmZmZmODA0NzA4ZjAKdDYgICAg
ICAgICAgMHhmZmZmZmZmZjgwNDcwODQwCnQ3ICAgICAgICAgIDB4ZmZmZmZmZmY4MDQ3MDg0
NApzMCAgICAgICAgICAweGZmZmZmZmZmODA0NzBiNDAKczEgICAgICAgICAgICAweDRlYjAw
MApzMiAgICAgICAgICAgICAgICAgICAwCnMzICAgICAgICAgICAgICAgICAweDIKczQgICAg
ICAgICAgICAgICAgICAgMAotLU1vcmUtLSAgICAgICAgczUgICAgICAgICAgMHhmZmZmZmZm
ZjgwNDRmYTU4Ci0tTW9yZS0tICAgICAgICBzNiAgICAgICAgICAweGZmZmZmZmZmODA0NzA5
MDAKczcgICAgICAgICAgICAgICAgICAgMAp0OCAgICAgICAgICAgICAgICAgICAwCnQ5ICAg
ICAgICAgICAgICAgICAgIDAKazAgICAgICAgICAgICAgICAgICAgMAprMSAgICAgICAgICAg
ICAgICAgICAwCmdwICAgICAgICAgIDB4ZmZmZmZmZmY4MDQ0MDg0MApzcCAgICAgICAgICAw
eGZmZmZmZmZmODA0NzA3YjAKczggICAgICAgICAgMHhmZmZmZmZmZmMwMDAyMDAwCnJhICAg
ICAgICAgIDB4ZmZmZmZmZmY4MDM4ODA4OApzciAgICAgICAgICAweDIwMTAwMDAyCmxvICAg
ICAgICAgICAgICAgIDB4NDgKaGkgICAgICAgICAgICAgICAgICAgMApiYWQgICAgICAgICAg
ICAgICAweGNkCmNzICAgICAgICAgICAgICAweDhjMDgKcGMgICAgICAgICAgMHhmZmZmZmZm
ZjgwMzg1YzY0CjB4ZmZmZmZmZmY4MDM4NWM2NDogICAgIGxidSAgICAgdjAsMjA1KGEwKQpk
Yj4g
--------------080906000803010207060400--
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 293 bytes
Desc: OpenPGP digital signature
Url : http://lists.freebsd.org/pipermail/freebsd-mips/attachments/20100526/bda81a64/signature.pgp
More information about the freebsd-mips
mailing list