summaryrefslogtreecommitdiffstats
path: root/sys/mips
diff options
context:
space:
mode:
authorgonzo <gonzo@FreeBSD.org>2011-11-28 19:48:04 +0000
committergonzo <gonzo@FreeBSD.org>2011-11-28 19:48:04 +0000
commit13174669a049b9fc6fd246482f95de6970bdeabe (patch)
treeadab6265620ff2387d4a344ba7f58c60b002a8b5 /sys/mips
parent24ed312289f3179df402147a37d683bc99b04771 (diff)
downloadFreeBSD-src-13174669a049b9fc6fd246482f95de6970bdeabe.zip
FreeBSD-src-13174669a049b9fc6fd246482f95de6970bdeabe.tar.gz
- Fix backtrace for MIPS64 platform
Diffstat (limited to 'sys/mips')
-rw-r--r--sys/mips/mips/db_trace.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/mips/mips/db_trace.c b/sys/mips/mips/db_trace.c
index 52546b5..ebb9e1b 100644
--- a/sys/mips/mips/db_trace.c
+++ b/sys/mips/mips/db_trace.c
@@ -30,7 +30,7 @@ extern char edata[];
/*
* A function using a stack frame has the following instruction as the first
- * one: addiu sp,sp,-<frame_size>
+ * one: [d]addiu sp,sp,-<frame_size>
*
* We make use of this to detect starting address of a function. This works
* better than using 'j ra' instruction to signify end of the previous
@@ -39,7 +39,8 @@ extern char edata[];
*
* XXX the abi does not require that the addiu instruction be the first one.
*/
-#define MIPS_START_OF_FUNCTION(ins) (((ins) & 0xffff8000) == 0x27bd8000)
+#define MIPS_START_OF_FUNCTION(ins) ((((ins) & 0xffff8000) == 0x27bd8000) \
+ || (((ins) & 0xffff8000) == 0x67bd8000))
/*
* MIPS ABI 3.0 requires that all functions return using the 'j ra' instruction
@@ -329,6 +330,8 @@ loop:
case OP_ADDI:
case OP_ADDIU:
+ case OP_DADDI:
+ case OP_DADDIU:
/* look for stack pointer adjustment */
if (i.IType.rs != 29 || i.IType.rt != 29)
break;
OpenPOWER on IntegriCloud