diff --git a/sysinfo/os/cygwin.mk b/sysinfo/os/cygwin.mk
index a257b88..21cb1a1 100644
--- a/sysinfo/os/cygwin.mk
+++ b/sysinfo/os/cygwin.mk
@@ -8,5 +8,6 @@ OS_LIBDEF_EXT	= .def
 OS_ARCHIVE_EXT	= .a
 OS_SONAME	= copy
 OS_BINFMT	= PE
+OS_IMPLIB_TOOL	= dlltool
 
 CFLAGS_PIC	=
diff --git a/sysinfo/os/midipix.mk b/sysinfo/os/midipix.mk
index 96c178c..b2d7096 100644
--- a/sysinfo/os/midipix.mk
+++ b/sysinfo/os/midipix.mk
@@ -8,3 +8,4 @@ OS_LIBDEF_EXT	= .so.def
 OS_ARCHIVE_EXT	= .a
 OS_SONAME	= symlink
 OS_BINFMT	= PE
+OS_IMPLIB_TOOL	= mdso
diff --git a/sysinfo/os/mingw.mk b/sysinfo/os/mingw.mk
index c13e61d..53fe2d6 100644
--- a/sysinfo/os/mingw.mk
+++ b/sysinfo/os/mingw.mk
@@ -8,6 +8,7 @@ OS_LIBDEF_EXT	= .def
 OS_ARCHIVE_EXT	= .a
 OS_SONAME	= copy
 OS_BINFMT	= PE
+OS_IMPLIB_TOOL	= dlltool
 
 CFLAGS_PIC	=
 CFLAGS_OS      += -U__STRICT_ANSI__
diff --git a/sysinfo/os/msys.mk b/sysinfo/os/msys.mk
index b70cc78..27482e0 100644
--- a/sysinfo/os/msys.mk
+++ b/sysinfo/os/msys.mk
@@ -8,6 +8,7 @@ OS_LIBDEF_EXT	= .def
 OS_ARCHIVE_EXT	= .a
 OS_SONAME	= copy
 OS_BINFMT	= PE
+OS_IMPLIB_TOOL	= dlltool
 
 CFLAGS_PIC	=
 CFLAGS_OS      += -U__STRICT_ANSI__
diff --git a/sysinfo/os/pe.mk b/sysinfo/os/pe.mk
index bbb74b2..1b02484 100644
--- a/sysinfo/os/pe.mk
+++ b/sysinfo/os/pe.mk
@@ -19,9 +19,6 @@ implib-solink:		shared-lib $(IMPLIB_SOLINK)
 
 $(IMPLIB_DEF):		shared-lib
 
-$(IMPLIB_VER):		$(IMPLIB_DEF)
-			$(DLLTOOL) -l $(IMPLIB_VER) -d $(IMPLIB_DEF) -D $(DSO_VER)
-
 install-implib:		install-implib-ver \
 			package-install-implib-soname \
 			package-install-implib-solink
@@ -38,6 +35,20 @@ clean-implib:
 			rm -f $(IMPLIB_SOLINK)
 
 
+ifeq ($(OS_IMPLIB_TOOL),mdso)
+
+$(IMPLIB_VER):		$(IMPLIB_DEF)
+			$(MDSO) -m $(HOST_BITS) -i $(IMPLIB_VER) -n $(DSO_VER) $(IMPLIB_DEF)
+
+else ifeq ($(OS_IMPLIB_TOOL),dlltool)
+
+$(IMPLIB_VER):		$(IMPLIB_DEF)
+			$(DLLTOOL) -l $(IMPLIB_VER) -d $(IMPLIB_DEF) -D $(DSO_VER)
+
+endif
+
+
+
 ifeq ($(AVOID_VERSION),yes)
 
 package-implib-soname:
@@ -53,9 +64,19 @@ package-install-implib-soname:	install-implib-soname
 package-install-implib-solink:	install-implib-solink
 
 
+ifeq ($(OS_IMPLIB_TOOL),mdso)
+
+$(IMPLIB_SONAME):	$(IMPLIB_DEF)
+			$(MDSO) -m $(HOST_BITS) -i $(IMPLIB_SONAME) -n $(DSO_SONAME) $(IMPLIB_DEF)
+
+else ifeq ($(OS_IMPLIB_TOOL),dlltool)
+
 $(IMPLIB_SONAME):	$(IMPLIB_DEF)
 			$(DLLTOOL) -l $(IMPLIB_SONAME) -d $(IMPLIB_DEF) -D $(DSO_SONAME)
 
+endif
+
+
 $(IMPLIB_SOLINK):	$(IMPLIB_SONAME)
 			rm -f $(IMPLIB_SOLINK).tmp
 			ln -s $(IMP_SONAME) $(IMPLIB_SOLINK).tmp
diff --git a/sysinfo/toolchain/binutils.mk b/sysinfo/toolchain/binutils.mk
index 3232915..728eb66 100644
--- a/sysinfo/toolchain/binutils.mk
+++ b/sysinfo/toolchain/binutils.mk
@@ -16,3 +16,4 @@ ELFEDIT		= $(CROSS_COMPILE)elfedit
 OBJCOPY		= $(CROSS_COMPILE)objcopy
 READELF		= $(CROSS_COMPILE)readelf
 DLLTOOL		= $(CROSS_COMPILE)dlltool
+MDSO		= $(CROSS_COMPILE)mdso
diff --git a/sysinfo/toolchain/llvm.mk b/sysinfo/toolchain/llvm.mk
index 65b5396..b863456 100644
--- a/sysinfo/toolchain/llvm.mk
+++ b/sysinfo/toolchain/llvm.mk
@@ -16,3 +16,4 @@ ELFEDIT		= $(CROSS_COMPILE)elfedit
 OBJCOPY		= $(CROSS_COMPILE)objcopy
 READELF		= $(CROSS_COMPILE)readelf
 DLLTOOL		= $(CROSS_COMPILE)dlltool
+MDSO		= $(CROSS_COMPILE)mdso