Index: uspace/app/taskdump/taskdump.c
===================================================================
--- uspace/app/taskdump/taskdump.c	(revision bc310a05ba9e9da83dfe5f2096a36e10f288e414)
+++ uspace/app/taskdump/taskdump.c	(revision 80487bc530704837cb7bf8a502bf18db19969479)
@@ -41,4 +41,5 @@
 #include <task.h>
 #include <kernel/mm/as.h>
+#include <libarch/istate.h>
 #include <macros.h>
 #include <assert.h>
@@ -58,4 +59,5 @@
 static void print_syntax();
 static int threads_dump(void);
+static int thread_dump(uintptr_t thash);
 static int areas_dump(void);
 static int area_dump(as_area_info_t *area);
@@ -229,4 +231,6 @@
 	for (i = 0; i < n_threads; i++) {
 		printf(" [%d] hash: 0x%lx\n", 1+i, thash_buf[i]);
+
+		thread_dump(thash_buf[i]);
 	}
 	putchar('\n');
@@ -291,4 +295,26 @@
 }
 
+static int thread_dump(uintptr_t thash)
+{
+	istate_t istate;
+	uintptr_t pc, fp;
+	int rc;
+
+	rc = udebug_regs_read(phoneid, thash, &istate);
+	if (rc < 0) {
+		printf("Failed reading registers (%d).\n", rc);
+		return EIO;
+	}
+
+	pc = istate_get_pc(&istate);
+	fp = istate_get_fp(&istate);
+
+	printf("Thread 0x%lx crashed at PC 0x%lx. FP 0x%lx\n", thash, pc, fp);
+	printf("Istate hexdump:\n");
+	hex_dump(0, &istate, (sizeof(istate_t) + 15) & ~15);
+
+	return EOK;
+}
+
 static int area_dump(as_area_info_t *area)
 {
