Index: uspace/app/taskdump/Makefile
===================================================================
--- uspace/app/taskdump/Makefile	(revision 077bc9313c554bc43abfc9fc4e0b23e1c22e6759)
+++ uspace/app/taskdump/Makefile	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -33,4 +33,5 @@
 SOURCES = \
 	elf_core.c \
+	fibrildump.c \
 	taskdump.c \
 	symtab.c
Index: uspace/app/taskdump/fibrildump.c
===================================================================
--- uspace/app/taskdump/fibrildump.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
+++ uspace/app/taskdump/fibrildump.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2014 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup taskdump
+ * @{
+ */
+/** @file
+ */
+
+#include <errno.h>
+#include <fibril.h>
+#include <fibrildump.h>
+#include <stacktrace.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <symtab.h>
+#include <taskdump.h>
+#include <udebug.h>
+
+static int fibrildump_read_uintptr(void *, uintptr_t, uintptr_t *);
+
+static stacktrace_ops_t fibrildump_st_ops = {
+	.read_uintptr = fibrildump_read_uintptr
+}; 
+
+static int fibrildump_read_uintptr(void *arg, uintptr_t addr, uintptr_t *data)
+{
+	async_sess_t *sess = (async_sess_t *)arg;
+
+	return udebug_mem_read(sess, data, addr, sizeof(uintptr_t));
+}
+
+static int read_link(async_sess_t *sess, uintptr_t addr, link_t *link)
+{
+	int rc;
+
+	rc = udebug_mem_read(sess, (void *)link, addr, sizeof(link_t));
+	return rc;
+}
+
+static int read_fibril(async_sess_t *sess, uintptr_t addr, fibril_t *fibril)
+{
+	int rc;
+
+	rc = udebug_mem_read(sess, (void *)fibril, addr, sizeof(fibril_t));
+	return rc;
+}
+
+int fibrils_dump(symtab_t *symtab, async_sess_t *sess)
+{
+	uintptr_t fibril_list_addr;
+	link_t link;
+	fibril_t fibril;
+	uintptr_t addr, fibril_addr;
+	uintptr_t pc, fp;
+	int rc;
+
+	rc = symtab_name_to_addr(symtab, "fibril_list", &fibril_list_addr);
+	if (rc != EOK)
+		return EIO;
+
+	addr = fibril_list_addr;
+	while (true) {
+		rc = read_link(sess, addr, &link);
+		if (rc != EOK)
+			return EIO;
+
+		addr = (uintptr_t) link.next;
+		if (addr == fibril_list_addr)
+			break;
+
+		fibril_addr = (uintptr_t) list_get_instance((void *)addr,
+		    fibril_t, all_link);
+		printf("Fibril %p:\n", (void *) fibril_addr);
+		rc = read_fibril(sess, fibril_addr, &fibril);
+		if (rc != EOK)
+			return EIO;
+
+		pc = fibril.ctx.pc;
+		fp = context_get_fp(&fibril.ctx);
+		if (0) stacktrace_print_generic(&fibrildump_st_ops, sess,
+		    fp, pc);
+		td_stacktrace(fp, pc);
+	}
+
+	return EOK;
+}
+
+/** @}
+ */
Index: uspace/app/taskdump/include/fibrildump.h
===================================================================
--- uspace/app/taskdump/include/fibrildump.h	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
+++ uspace/app/taskdump/include/fibrildump.h	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2014 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup edit
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef FIBRILDUMP_H
+#define FIBRILDUMP_H
+
+#include <async.h>
+#include <symtab.h>
+
+extern int fibrils_dump(symtab_t *, async_sess_t *sess);
+
+#endif
+
+/** @}
+ */
Index: uspace/app/taskdump/include/symtab.h
===================================================================
--- uspace/app/taskdump/include/symtab.h	(revision 077bc9313c554bc43abfc9fc4e0b23e1c22e6759)
+++ uspace/app/taskdump/include/symtab.h	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -50,5 +50,5 @@
 extern int symtab_load(const char *file_name, symtab_t **symtab);
 extern void symtab_delete(symtab_t *st);
-extern int symtab_name_to_addr(symtab_t *st, char *name, uintptr_t *addr);
+extern int symtab_name_to_addr(symtab_t *st, const char *name, uintptr_t *addr);
 extern int symtab_addr_to_name(symtab_t *symtab, uintptr_t addr, char **name,
     size_t *offs);
Index: uspace/app/taskdump/include/taskdump.h
===================================================================
--- uspace/app/taskdump/include/taskdump.h	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
+++ uspace/app/taskdump/include/taskdump.h	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2014 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup edit
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef TASKDUMP_H
+#define TASKDUMP_H
+
+#include <stdint.h>
+
+extern int td_stacktrace(uintptr_t, uintptr_t);
+
+#endif
+
+/** @}
+ */
Index: uspace/app/taskdump/symtab.c
===================================================================
--- uspace/app/taskdump/symtab.c	(revision 077bc9313c554bc43abfc9fc4e0b23e1c22e6759)
+++ uspace/app/taskdump/symtab.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -202,5 +202,5 @@
  * @return	EOK on success, ENOENT if no such symbol was found.
  */
-int symtab_name_to_addr(symtab_t *st, char *name, uintptr_t *addr)
+int symtab_name_to_addr(symtab_t *st, const char *name, uintptr_t *addr)
 {
 	size_t i;
Index: uspace/app/taskdump/taskdump.c
===================================================================
--- uspace/app/taskdump/taskdump.c	(revision 077bc9313c554bc43abfc9fc4e0b23e1c22e6759)
+++ uspace/app/taskdump/taskdump.c	(revision ebc9c2cfd20bdd5c2f62803f849f0b88de5212c0)
@@ -35,4 +35,5 @@
 #include <async.h>
 #include <elf/elf_linux.h>
+#include <fibrildump.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -52,4 +53,5 @@
 #include <elf_core.h>
 #include <stacktrace.h>
+#include <taskdump.h>
 
 #define LINE_BYTES 16
@@ -76,4 +78,8 @@
 static istate_t reg_state;
 
+static stacktrace_ops_t td_stacktrace_ops = {
+	.read_uintptr = td_read_uintptr
+}; 
+
 int main(int argc, char *argv[])
 {
@@ -106,4 +112,8 @@
 	if (rc < 0)
 		printf("Failed dumping address space areas.\n");
+
+	rc = fibrils_dump(app_symtab, sess);
+	if (rc < 0)
+		printf("Failed dumping fibrils.\n");
 
 	udebug_end(sess);
@@ -311,9 +321,37 @@
 }
 
+int td_stacktrace(uintptr_t fp, uintptr_t pc)
+{
+	uintptr_t nfp;
+	stacktrace_t st;
+	char *sym_pc;
+	int rc;
+
+	st.op_arg = NULL;
+	st.ops = &td_stacktrace_ops;
+
+	while (stacktrace_fp_valid(&st, fp)) {
+		sym_pc = fmt_sym_address(pc);
+		printf("  %p: %s\n", (void *) fp, sym_pc);
+		free(sym_pc);
+
+		rc = stacktrace_ra_get(&st, fp, &pc);
+		if (rc != EOK)
+			return rc;
+
+		rc = stacktrace_fp_prev(&st, fp, &nfp);
+		if (rc != EOK)
+			return rc;
+
+		fp = nfp;
+	}
+
+	return EOK;
+}
+
 static int thread_dump(uintptr_t thash)
 {
 	istate_t istate;
-	uintptr_t pc, fp, nfp;
-	stacktrace_t st;
+	uintptr_t pc, fp;
 	char *sym_pc;
 	int rc;
@@ -336,22 +374,5 @@
 	free(sym_pc);
 
-	st.op_arg = NULL;
-	st.read_uintptr = td_read_uintptr;
-
-	while (stacktrace_fp_valid(&st, fp)) {
-		sym_pc = fmt_sym_address(pc);
-		printf("  %p: %s\n", (void *) fp, sym_pc);
-		free(sym_pc);
-
-		rc = stacktrace_ra_get(&st, fp, &pc);
-		if (rc != EOK)
-			return rc;
-
-		rc = stacktrace_fp_prev(&st, fp, &nfp);
-		if (rc != EOK)
-			return rc;
-
-		fp = nfp;
-	}
+	(void) td_stacktrace(fp, pc);
 
 	return EOK;
