Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 May 2010 00:27:02 +0200
From:      =?UTF-8?B?VmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28=?= <phcoder@gmail.com>
To:        freebsd-mips@freebsd.org
Subject:   Fix mips64 ddb backtracing
Message-ID:  <4BFDA036.7080502@gmail.com>

next in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigD727110BCA27BDBB1AB618B8

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

--------------enigD727110BCA27BDBB1AB618B8
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iF4EAREKAAYFAkv9oEQACgkQNak7dOguQglDIwD/fdoZ/Q+v+4m/YjbLrjyQkXNJ
cCi0mavXPiYAcd3NfkIBAJlcgz2Z/nvDM7pUQgSYyN1as/tXojiOPuw/qEs+hPqB
=5mUf
-----END PGP SIGNATURE-----

--------------enigD727110BCA27BDBB1AB618B8--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4BFDA036.7080502>