diff --git a/src/fdlib.c b/src/fdlib.c
index 4b92d1530c2b0dffcc77fef514a114f781b7b519..4d7f8892af220769bc61e7f8db29c0cb8091a559 100644
--- a/src/fdlib.c
+++ b/src/fdlib.c
@@ -1058,6 +1058,23 @@ PMOD_EXPORT int debug_fd_rename(const char *old, const char *new)
   return ret;
 }
 
+PMOD_EXPORT int debug_fd_chdir(const char *dir)
+{
+  p_wchar1 *dname = pike_dwim_utf8_to_utf16(dir);
+  int ret;
+
+  if (!dname) {
+    errno = ENOMEM;
+    return -1;
+  }
+
+  ret = _wchdir(dname);
+
+  free(dname);
+
+  return ret;
+}
+
 PMOD_EXPORT FD debug_fd_open(const char *file, int open_mode, int create_mode)
 {
   HANDLE x;
diff --git a/src/fdlib.h b/src/fdlib.h
index 1c773b66adcac434d641718059cece6b04de7786..b327a3c9b59082977337c9c44e934be0c86f59a3 100644
--- a/src/fdlib.h
+++ b/src/fdlib.h
@@ -94,6 +94,7 @@ typedef off_t PIKE_OFF_T;
 #define fd_unlink(FILE)	debug_fd_unlink(FILE)
 #define fd_mkdir(DIR,MODE)	debug_fd_mkdir(DIR,MODE)
 #define fd_rename(O,N)	debug_fd_rename(O,N)
+#define fd_chdir(DIR)	debug_fd_chdir(DIR)
 #define fd_open(X,Y,Z) dmalloc_register_fd(debug_fd_open((X),(Y)|fd_BINARY,(Z)))
 #define fd_socket(X,Y,Z) dmalloc_register_fd(debug_fd_socket((X),(Y),(Z)))
 #define fd_pipe(X) debug_fd_pipe( (X) DMALLOC_POS )
@@ -140,6 +141,7 @@ PMOD_EXPORT int debug_fd_rmdir(const char *dir);
 PMOD_EXPORT int debug_fd_unlink(const char *file);
 PMOD_EXPORT int debug_fd_mkdir(const char *dir, int mode);
 PMOD_EXPORT int debug_fd_rename(const char *old, const char *new);
+PMOD_EXPORT int debug_fd_chdir(const char *dir);
 PMOD_EXPORT FD debug_fd_open(const char *file, int open_mode, int create_mode);
 PMOD_EXPORT FD debug_fd_socket(int domain, int type, int proto);
 PMOD_EXPORT int debug_fd_pipe(int fds[2] DMALLOC_LINE_ARGS);
@@ -381,6 +383,7 @@ static int PIKE_UNUSED_ATTRIBUTE debug_fd_mkdir(const char *dir, int mode)
 #define fd_mkdir(DIR,MODE)	debug_fd_mkdir(DIR,MODE)
 #endif
 #define fd_rename(O,N)	rename(O,N)
+#define fd_chdir(DIR)	chdir(DIR)
 #define fd_open(X,Y,Z) dmalloc_register_fd(open((X),(Y)|fd_BINARY,(Z)))
 #define fd_socket(X,Y,Z) dmalloc_register_fd(socket((X),(Y),(Z)))
 #define fd_pipe pipe /* FIXME */