diff --git a/libports/lib/mk/libc-gen.inc b/libports/lib/mk/libc-gen.inc
index 9471ac35b9..b18db1f591 100644
--- a/libports/lib/mk/libc-gen.inc
+++ b/libports/lib/mk/libc-gen.inc
@@ -8,6 +8,9 @@ SRC_C = $(filter-out $(FILTER_OUT_C),$(notdir $(wildcard $(LIBC_GEN_DIR)/*.c)))
# 'sysconf.c' includes the local 'stdtime/tzfile.h'
INC_DIR += $(REP_DIR)/src/lib/libc/stdtime
+# '_pthread_stubs.c' includes the local 'libc_pdbg.h'
+INC_DIR += $(REP_DIR)/src/lib/libc
+
include $(REP_DIR)/lib/mk/libc-common.inc
vpath %.c $(LIBC_GEN_DIR)
diff --git a/libports/lib/mk/libc.mk b/libports/lib/mk/libc.mk
index ff3bcf0f93..0db85d8415 100644
--- a/libports/lib/mk/libc.mk
+++ b/libports/lib/mk/libc.mk
@@ -13,7 +13,8 @@ SRC_CC = atexit.cc dummies.cc rlimit.cc sysctl.cc \
issetugid.cc errno.cc gai_strerror.cc clock_gettime.cc \
gettimeofday.cc malloc.cc progname.cc fd_alloc.cc file_operations.cc \
plugin.cc plugin_registry.cc select.cc exit.cc environ.cc nanosleep.cc \
- libc_mem_alloc.cc pread_pwrite.cc readv_writev.cc poll.cc
+ libc_mem_alloc.cc pread_pwrite.cc readv_writev.cc poll.cc \
+ libc_pdbg.cc
#
# Files from string library that are not included in libc-raw_string because
diff --git a/libports/src/lib/libc/libc_pdbg.cc b/libports/src/lib/libc/libc_pdbg.cc
new file mode 100644
index 0000000000..1853f96625
--- /dev/null
+++ b/libports/src/lib/libc/libc_pdbg.cc
@@ -0,0 +1,22 @@
+/*
+ * \brief C implementation of 'Genode::printf()'
+ * \author Christian Prochaska
+ * \date 2013-07-29
+ */
+
+/*
+ * Copyright (C) 2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#include
+
+extern "C" void genode_printf(const char *format, ...)
+{
+ va_list list;
+ va_start(list, format);
+ Genode::vprintf(format, list);
+ va_end(list);
+}
diff --git a/libports/src/lib/libc/libc_pdbg.h b/libports/src/lib/libc/libc_pdbg.h
new file mode 100644
index 0000000000..72b04219a9
--- /dev/null
+++ b/libports/src/lib/libc/libc_pdbg.h
@@ -0,0 +1,39 @@
+/*
+ * \brief 'PDBG()' implementation for use in '.c' files
+ * \author Christian Prochaska
+ * \date 2013-07-29
+ */
+
+/*
+ * Copyright (C) 2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _LIBC_PDBG_H_
+#define _LIBC_PDBG_H_
+
+extern void genode_printf(const char *format, ...) __attribute__((format(printf, 1, 2)));
+
+/**
+ * Suppress debug messages in release version
+ */
+#ifdef GENODE_RELEASE
+#define DO_PDBG 0
+#else
+#define DO_PDBG 1
+#endif /* GENODE_RELEASE */
+
+#define ESC_DBG "\033[33m"
+#define ESC_END "\033[0m"
+
+/**
+ * Print debug message with function name
+ */
+#define PDBG(fmt, ...) \
+ if (DO_PDBG) {\
+ genode_printf("%s: " ESC_DBG fmt ESC_END "\n", \
+ __PRETTY_FUNCTION__, ##__VA_ARGS__ ); }
+
+#endif /* _LIBC_DEBUG_H_ */
diff --git a/libports/src/lib/libc/patches/pthread_not_implemented.patch b/libports/src/lib/libc/patches/pthread_not_implemented.patch
index 58702f8fad..ff569c5210 100644
--- a/libports/src/lib/libc/patches/pthread_not_implemented.patch
+++ b/libports/src/lib/libc/patches/pthread_not_implemented.patch
@@ -4,45 +4,23 @@ From: Christian Prochaska
---
- libc/gen/_pthread_stubs.c | 29 +++++++++++++++++++++++++++++
- 1 file changed, 29 insertions(+)
+ libc/gen/_pthread_stubs.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
diff --git a/libc/gen/_pthread_stubs.c b/libc/gen/_pthread_stubs.c
-index 063676f..c5112c5 100644
+index 063676f..5a79231 100644
--- libc/gen/_pthread_stubs.c
+++ libc/gen/_pthread_stubs.c
-@@ -30,9 +30,30 @@ __FBSDID("$FreeBSD$");
- #include
- #include
- #include
-+#include
+@@ -33,6 +33,8 @@ __FBSDID("$FreeBSD$");
#include "libc_private.h"
-+#define ESC_DBG "\033[33m"
-+#define ESC_END "\033[0m"
-+
-+/**
-+ * Suppress debug messages in release version
-+ */
-+#ifdef GENODE_RELEASE
-+#define DO_PDBG 0
-+#else
-+#define DO_PDBG 1
-+#endif /* GENODE_RELEASE */
-+
-+/**
-+ * Print debug message with function name
-+ */
-+#define PDBG(fmt, ...) \
-+ if (DO_PDBG) \
-+ printf("%s: " ESC_DBG fmt ESC_END "\n", \
-+ __PRETTY_FUNCTION__, ##__VA_ARGS__ )
++#include
+
/*
* Weak symbols: All libc internal usage of these functions should
* use the weak symbol versions (_pthread_XXX). If libpthread is
-@@ -138,12 +159,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
+@@ -138,12 +140,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
typedef ret (*FUNC_TYPE(name))(void); \
static ret FUNC_EXP(name)(void) \
{ \
@@ -57,7 +35,7 @@ index 063676f..c5112c5 100644
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \
return (func()); \
-@@ -157,12 +180,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
+@@ -157,12 +161,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
typedef ret (*FUNC_TYPE(name))(p0_type); \
static ret FUNC_EXP(name)(p0_type p0) \
{ \
@@ -72,7 +50,7 @@ index 063676f..c5112c5 100644
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \
return (func(p0)); \
-@@ -176,12 +201,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
+@@ -176,12 +182,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
typedef ret (*FUNC_TYPE(name))(p0_type, p1_type); \
static ret FUNC_EXP(name)(p0_type p0, p1_type p1) \
{ \
@@ -87,7 +65,7 @@ index 063676f..c5112c5 100644
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \
return (func(p0, p1)); \
-@@ -195,12 +222,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
+@@ -195,12 +203,14 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
typedef ret (*FUNC_TYPE(name))(p0_type, p1_type, p2_type); \
static ret FUNC_EXP(name)(p0_type p0, p1_type p1, p2_type p2) \
{ \