diff --git a/build/tools/build-llvm.sh b/build/tools/build-llvm.sh
index f4daf9e..44b256d 100755
--- a/build/tools/build-llvm.sh
+++ b/build/tools/build-llvm.sh
@@ -45,6 +45,9 @@
 PACKAGE_DIR=
 register_var_option "--package-dir=<path>" PACKAGE_DIR "Create archive tarball in specific directory"
 
+WINE=wine
+register_var_option "--wine=<path>" WINE "WINE needed to run llvm-config.exe for building mclinker with --mingw"
+
 POLLY=no
 do_polly_option () { POLLY=yes; }
 register_option "--with-polly" do_polly_option "Enable Polyhedral optimizations for LLVM"
@@ -267,9 +270,21 @@
 cd $LLVM_BUILD_OUT && run make install $MAKE_FLAGS
 fail_panic "Couldn't install llvm toolchain to $TOOLCHAIN_BUILD_PREFIX"
 
-# Build mclinker only against default the LLVM version, once
-# mclinker isn't mingw-ready yet.  ToDo
-if [ "$TOOLCHAIN" = "llvm-$DEFAULT_LLVM_VERSION" -a "$MINGW" != "yes" ] ; then
+# create llvm-config wrapper if needed.
+# llvm-config is invoked by other llvm projects (eg. mclinker/configure)
+# to figure out flags and libs dependencies.  Unfortunately in canadian-build
+# llvm-config[.exe] may not run directly.  Create a wrapper.
+LLVM_CONFIG=llvm-config
+if [ "$MINGW" = "yes" ] ; then
+    LLVM_CONFIG=llvm-config.sh
+    cat > $TOOLCHAIN_BUILD_PREFIX/bin/$LLVM_CONFIG <<EOF
+$WINE \`dirname \$0\`/llvm-config.exe "\$@"
+EOF
+    chmod 0755 $TOOLCHAIN_BUILD_PREFIX/bin/$LLVM_CONFIG
+fi
+
+# build mclinker only against default the LLVM version, once
+if [ "$TOOLCHAIN" = "llvm-$DEFAULT_LLVM_VERSION" -a "$DARWIN" != "yes" ] ; then
     dump "Copy     : mclinker source"
     MCLINKER_SRC_DIR=$BUILD_OUT/mclinker
     mkdir -p $MCLINKER_SRC_DIR
@@ -288,10 +303,9 @@
 
     run $MCLINKER_SRC_DIR/configure \
         --prefix=$TOOLCHAIN_BUILD_PREFIX \
-        --with-llvm-config=$TOOLCHAIN_BUILD_PREFIX/bin/llvm-config \
+        --with-llvm-config=$TOOLCHAIN_BUILD_PREFIX/bin/$LLVM_CONFIG \
         --host=$ABI_CONFIGURE_HOST \
-        --build=$ABI_CONFIGURE_BUILD \
-        --with-bug-report-url=$DEFAULT_ISSUE_TRACKER_URL
+        --build=$ABI_CONFIGURE_BUILD
     fail_panic "Couldn't configure mclinker"
 
     dump "Building : mclinker"
diff --git a/build/tools/toolchain-patches/mclinker/0003-Fix-mingw-build.patch b/build/tools/toolchain-patches/mclinker/0003-Fix-mingw-build.patch
new file mode 100644
index 0000000..03e71c6
--- /dev/null
+++ b/build/tools/toolchain-patches/mclinker/0003-Fix-mingw-build.patch
@@ -0,0 +1,615 @@
+From 9a50212671d7df41e624421c16ff67c5ebff1062 Mon Sep 17 00:00:00 2001
+From: Andrew Hsieh <andrewhsieh@google.com>
+Date: Wed, 27 Feb 2013 16:34:52 +0800
+Subject: [PATCH] Fix mingw build
+
+Change-Id: I11f3ac34154aa5cd1f2d4f9630f877e5bf0e5f6a
+---
+ debug/Makefile.am                  |    1 +
+ include/mcld/LD/Diagnostic.h       |    6 +
+ include/mcld/LD/DiagnosticEngine.h |    1 +
+ include/mcld/LD/MsgHandler.h       |    7 ++
+ include/mcld/Support/FileHandle.h  |    2 +
+ include/mcld/Support/mingw/mman.h  |   55 +++++++++++
+ lib/LD/Diagnostic.cpp              |    5 +
+ lib/Support/FileHandle.cpp         |    4 +
+ lib/Support/FileSystem.cpp         |    3 +
+ lib/Support/Path.cpp               |   10 ++-
+ lib/Support/Space.cpp              |   14 +++
+ lib/Support/Unix/FileSystem.inc    |   20 ++++
+ lib/Support/Unix/PathV3.inc        |   10 ++
+ lib/Support/mingw/mman.inc         |  180 ++++++++++++++++++++++++++++++++++++
+ lib/Support/raw_ostream.cpp        |    2 +-
+ lib/Target/GNULDBackend.cpp        |    4 +
+ lib/Target/Mips/MipsLDBackend.cpp  |    4 +
+ m4/llvm.m4                         |    2 +-
+ optimized/Makefile.am              |    1 +
+ tools/llvm-mcld/llvm-mcld.cpp      |    2 +-
+ 20 files changed, 329 insertions(+), 4 deletions(-)
+ create mode 100644 include/mcld/Support/mingw/mman.h
+ create mode 100644 lib/Support/mingw/mman.inc
+
+diff --git a/debug/Makefile.am b/debug/Makefile.am
+index e41d1aa..cf8442a 100644
+--- a/debug/Makefile.am
++++ b/debug/Makefile.am
+@@ -174,6 +174,7 @@ SOURCE = ${LIBDIR}/ADT/StringEntry.cpp \
+ 	${LIBDIR}/Support/Windows/FileSystem.inc \
+ 	${LIBDIR}/Support/Windows/PathV3.inc \
+ 	${LIBDIR}/Support/Windows/System.inc \
++	${LIBDIR}/Support/mingw/mman.inc \
+ 	${LIBDIR}/CodeGen/MCLDTargetMachine.cpp \
+ 	${LIBDIR}/CodeGen/MCLinker.cpp \
+ 	${LIBDIR}/Object/ObjectLinker.cpp \
+diff --git a/include/mcld/LD/Diagnostic.h b/include/mcld/LD/Diagnostic.h
+index 5e7d436..2b125db 100644
+--- a/include/mcld/LD/Diagnostic.h
++++ b/include/mcld/LD/Diagnostic.h
+@@ -64,6 +64,12 @@ public:
+     return (unsigned int)m_Engine.state().ArgumentVals[pIdx];
+   }
+ 
++  unsigned long long getArgULongLong(unsigned int pIdx) const {
++    assert(getArgKind(pIdx) == DiagnosticEngine::ak_ulonglong &&
++           "Invalid argument accessor!");
++    return (unsigned long long)m_Engine.state().ArgumentVals[pIdx];
++  }
++
+   bool getArgBool(unsigned int pIdx) const {
+     assert(getArgKind(pIdx) == DiagnosticEngine::ak_bool &&
+            "Invalid argument accessor!");
+diff --git a/include/mcld/LD/DiagnosticEngine.h b/include/mcld/LD/DiagnosticEngine.h
+index 9d24c7a..f3d3b3c 100644
+--- a/include/mcld/LD/DiagnosticEngine.h
++++ b/include/mcld/LD/DiagnosticEngine.h
+@@ -53,6 +53,7 @@ public:
+     ak_c_string,    // const char *
+     ak_sint,        // int
+     ak_uint,        // unsigned int
++    ak_ulonglong,   // unsigned long long, (eg. size_t in 64-bit)
+     ak_bool         // bool
+   };
+ 
+diff --git a/include/mcld/LD/MsgHandler.h b/include/mcld/LD/MsgHandler.h
+index c89f744..9b1ed80 100644
+--- a/include/mcld/LD/MsgHandler.h
++++ b/include/mcld/LD/MsgHandler.h
+@@ -103,6 +103,13 @@ operator<<(const MsgHandler& pHandler, unsigned long pValue)
+ }
+ 
+ inline const MsgHandler &
++operator<<(const MsgHandler& pHandler, unsigned long long pValue)
++{
++  pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_ulonglong);
++  return pHandler;
++}
++
++inline const MsgHandler &
+ operator<<(const MsgHandler& pHandler, bool pValue)
+ {
+   pHandler.addTaggedVal(pValue, DiagnosticEngine::ak_bool);
+diff --git a/include/mcld/Support/FileHandle.h b/include/mcld/Support/FileHandle.h
+index ce43e0f..4130c7a 100644
+--- a/include/mcld/Support/FileHandle.h
++++ b/include/mcld/Support/FileHandle.h
+@@ -58,12 +58,14 @@ public:
+     ReadOwner   = S_IRUSR,
+     WriteOwner  = S_IWUSR,
+     ExeOwner    = S_IXUSR,
++#if !defined(_WIN32)
+     ReadGroup   = S_IRGRP,
+     WriteGroup  = S_IWGRP,
+     ExeGroup    = S_IXGRP,
+     ReadOther   = S_IROTH,
+     WriteOther  = S_IWOTH,
+     ExeOther    = S_IXOTH,
++#endif
+     System      = 0xFFFFFFFF
+   };
+ 
+diff --git a/include/mcld/Support/mingw/mman.h b/include/mcld/Support/mingw/mman.h
+new file mode 100644
+index 0000000..96f68b2
+--- /dev/null
++++ b/include/mcld/Support/mingw/mman.h
+@@ -0,0 +1,55 @@
++/*
++ * sys/mman.h
++ * mman-win32
++ */
++
++#ifndef _SYS_MMAN_H_
++#define _SYS_MMAN_H_
++
++#ifndef _WIN32_WINNT		// Allow use of features specific to Windows XP or later.                   
++#define _WIN32_WINNT 0x0501	// Change this to the appropriate value to target other versions of Windows.
++#endif						
++
++/* All the headers include this file. */
++#ifndef _MSC_VER
++#include <_mingw.h>
++#endif
++
++#include <sys/types.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#define PROT_NONE       0
++#define PROT_READ       1
++#define PROT_WRITE      2
++#define PROT_EXEC       4
++
++#define MAP_FILE        0
++#define MAP_SHARED      1
++#define MAP_PRIVATE     2
++#define MAP_TYPE        0xf
++#define MAP_FIXED       0x10
++#define MAP_ANONYMOUS   0x20
++#define MAP_ANON        MAP_ANONYMOUS
++
++#define MAP_FAILED      ((void *)-1)
++
++/* Flags for msync. */
++#define MS_ASYNC        1
++#define MS_SYNC         2
++#define MS_INVALIDATE   4
++
++void*   mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
++int     munmap(void *addr, size_t len);
++int     mprotect(void *addr, size_t len, int prot);
++int     msync(void *addr, size_t len, int flags);
++int     mlock(const void *addr, size_t len);
++int     munlock(const void *addr, size_t len);
++
++#ifdef __cplusplus
++};
++#endif
++
++#endif /*  _SYS_MMAN_H_ */
+diff --git a/lib/LD/Diagnostic.cpp b/lib/LD/Diagnostic.cpp
+index 786a68b..b596a94 100644
+--- a/lib/LD/Diagnostic.cpp
++++ b/lib/LD/Diagnostic.cpp
+@@ -157,6 +157,11 @@ void Diagnostic::format(const char* pBegin, const char* pEnd,
+         llvm::raw_string_ostream(pOutStr) << val;
+         break;
+       }
++      case DiagnosticEngine::ak_ulonglong: {
++        unsigned long long val = getArgULongLong(arg_no);
++        llvm::raw_string_ostream(pOutStr) << val;
++        break;
++      }
+       case DiagnosticEngine::ak_bool: {
+         bool val = getArgBool(arg_no);
+         if (val)
+diff --git a/lib/Support/FileHandle.cpp b/lib/Support/FileHandle.cpp
+index 437e741..52c68a3 100644
+--- a/lib/Support/FileHandle.cpp
++++ b/lib/Support/FileHandle.cpp
+@@ -18,7 +18,11 @@
+ #endif
+ 
+ #include <sys/stat.h>
++#if defined(HAVE_SYS_MMAN_H)
+ #include <sys/mman.h>
++#elif defined(_WIN32)
++#include <mcld/Support/mingw/mman.h>
++#endif
+ 
+ #if defined(_MSC_VER)
+ #include <io.h>
+diff --git a/lib/Support/FileSystem.cpp b/lib/Support/FileSystem.cpp
+index fb2633d..7084a9a 100644
+--- a/lib/Support/FileSystem.cpp
++++ b/lib/Support/FileSystem.cpp
+@@ -27,3 +27,6 @@ using namespace mcld::sys::fs;
+ #include "Windows/FileSystem.inc"
+ #include "Windows/PathV3.inc" 
+ #endif 
++#if defined(_WIN32)
++#include "mingw/mman.inc"
++#endif
+\ No newline at end of file
+diff --git a/lib/Support/Path.cpp b/lib/Support/Path.cpp
+index d359162..2f439de 100644
+--- a/lib/Support/Path.cpp
++++ b/lib/Support/Path.cpp
+@@ -78,12 +78,20 @@ Path& Path::append(const Path& pPath)
+     unsigned int new_size = old_size + pPath.native().size();
+ 
+     m_PathName.resize(new_size);
+-    strcpy(const_cast<char*>(m_PathName.data()+old_size), pPath.native().data());
++#if defined(MCLD_ON_WIN32)
++    wcscpy(const_cast<ValueType*>(m_PathName.data()+old_size), pPath.native().data());
++#else
++    strcpy(const_cast<ValueType*>(m_PathName.data()+old_size), pPath.native().data());
++#endif
+   }
+   //first path is a,second path is b
+   else if(this->string()[this->native().size()-1] != separator &&
+           pPath.string()[0] != separator) {
++#if defined(MCLD_ON_WIN32)
++    m_PathName.append(L"\\");
++#else
+     m_PathName.append("/");
++#endif
+     m_PathName.append(pPath.native());
+   }
+   // a/,b or a,/b just append
+diff --git a/lib/Support/Space.cpp b/lib/Support/Space.cpp
+index 6ec2c53..db5ad03 100644
+--- a/lib/Support/Space.cpp
++++ b/lib/Support/Space.cpp
+@@ -16,6 +16,20 @@ using namespace mcld;
+ 
+ //===----------------------------------------------------------------------===//
+ // constant data
++#if defined(_WIN32)
++#include <windows.h>
++int getpagesize (void) 
++{
++  static int _pagesize = 0;
++  if (! _pagesize) 
++  {
++    SYSTEM_INFO sysinfo;
++    GetSystemInfo (&sysinfo);
++    _pagesize = sysinfo.dwPageSize;
++  }
++  return _pagesize;
++}
++#endif
+ static const off_t PageSize = getpagesize();
+ 
+ //===----------------------------------------------------------------------===//
+diff --git a/lib/Support/Unix/FileSystem.inc b/lib/Support/Unix/FileSystem.inc
+index ce6d0df..96d1e10 100644
+--- a/lib/Support/Unix/FileSystem.inc
++++ b/lib/Support/Unix/FileSystem.inc
+@@ -36,12 +36,32 @@ int open(const Path& pPath, int pOFlag, int pPerm)
+ 
+ ssize_t pread(int pFD, void* pBuf, size_t pCount, size_t pOffset)
+ {
++#if !defined(_WIN32)
+   return ::pread(pFD, pBuf, pCount, pOffset);
++#else
++  off_t curr_pos = lseek (pFD, 0, SEEK_CUR);
++  if (lseek (pFD, pOffset, SEEK_SET) != pOffset)
++    return -1;
++  ssize_t retval = read (pFD, pBuf, pCount);
++  if (lseek (pFD, curr_pos, SEEK_SET) != curr_pos)
++    return -1;
++  return retval;    
++#endif
+ }
+ 
+ ssize_t pwrite(int pFD, const void* pBuf, size_t pCount, size_t pOffset)
+ {
++#if !defined(_WIN32)
+   return ::pwrite(pFD, pBuf, pCount, pOffset);
++#else
++  off_t curr_pos = lseek (pFD, 0, SEEK_CUR);
++  if (lseek (pFD, pOffset, SEEK_SET) != pOffset)
++    return -1;
++  ssize_t retval = write (pFD, pBuf, pCount);
++  if (lseek (pFD, curr_pos, SEEK_SET) != curr_pos)
++    return -1;
++  return retval;    
++#endif
+ }
+ 
+ int ftruncate(int pFD, size_t pLength)
+diff --git a/lib/Support/Unix/PathV3.inc b/lib/Support/Unix/PathV3.inc
+index 1506e94..65ba267 100644
+--- a/lib/Support/Unix/PathV3.inc
++++ b/lib/Support/Unix/PathV3.inc
+@@ -20,6 +20,10 @@
+ #include <stack>
+ #include <unistd.h>
+ 
++#if defined(_WIN32)
++#include <limits.h>
++#endif
++
+ namespace mcld{
+ namespace sys{
+ namespace fs{
+@@ -154,14 +158,19 @@ void status(const Path& p, FileStatus& pFileStatus)
+     pFileStatus.setType(CharacterFile);
+   else if(S_ISFIFO(path_stat.st_mode))
+     pFileStatus.setType(FifoFile);
++#if !defined(_WIN32)
+   else if(S_ISSOCK(path_stat.st_mode))
+     pFileStatus.setType(SocketFile);
++#endif    
+   else
+     pFileStatus.setType(TypeUnknown);
+ }
+ 
+ void symlink_status(const Path& p, FileStatus& pFileStatus)
+ {
++#if defined(_WIN32)
++  pFileStatus.setType(FileNotFound);
++#else
+   struct stat path_stat;
+   if(lstat(p.c_str(), &path_stat)!= 0)
+   {
+@@ -188,6 +197,7 @@ void symlink_status(const Path& p, FileStatus& pFileStatus)
+     pFileStatus.setType(SocketFile);
+   else
+     pFileStatus.setType(TypeUnknown);
++#endif
+ }
+ 
+ /// read_dir - return true if we read one entry
+diff --git a/lib/Support/mingw/mman.inc b/lib/Support/mingw/mman.inc
+new file mode 100644
+index 0000000..be4be5b
+--- /dev/null
++++ b/lib/Support/mingw/mman.inc
+@@ -0,0 +1,180 @@
++
++#include <windows.h>
++#include <errno.h>
++#include <io.h>
++
++#include "mcld/Support/mingw/mman.h"
++
++#ifndef FILE_MAP_EXECUTE
++#define FILE_MAP_EXECUTE    0x0020
++#endif /* FILE_MAP_EXECUTE */
++
++static int __map_mman_error(const DWORD err, const int deferr)
++{
++    if (err == 0)
++        return 0;
++    //TODO: implement
++    return err;
++}
++
++static DWORD __map_mmap_prot_page(const int prot)
++{
++    DWORD protect = 0;
++    
++    if (prot == PROT_NONE)
++        return protect;
++        
++    if ((prot & PROT_EXEC) != 0)
++    {
++        protect = ((prot & PROT_WRITE) != 0) ? 
++                    PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ;
++    }
++    else
++    {
++        protect = ((prot & PROT_WRITE) != 0) ?
++                    PAGE_READWRITE : PAGE_READONLY;
++    }
++    
++    return protect;
++}
++
++static DWORD __map_mmap_prot_file(const int prot)
++{
++    DWORD desiredAccess = 0;
++    
++    if (prot == PROT_NONE)
++        return desiredAccess;
++        
++    if ((prot & PROT_READ) != 0)
++        desiredAccess |= FILE_MAP_READ;
++    if ((prot & PROT_WRITE) != 0)
++        desiredAccess |= FILE_MAP_WRITE;
++    if ((prot & PROT_EXEC) != 0)
++        desiredAccess |= FILE_MAP_EXECUTE;
++    
++    return desiredAccess;
++}
++
++void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
++{
++    HANDLE fm, h;
++    
++    void * map = MAP_FAILED;
++    
++#ifdef _MSC_VER
++#pragma warning(push)
++#pragma warning(disable: 4293)
++#endif
++
++    const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ? 
++                    (DWORD)off : (DWORD)(off & 0xFFFFFFFFL);
++    const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
++                    (DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL);
++    const DWORD protect = __map_mmap_prot_page(prot);
++    const DWORD desiredAccess = __map_mmap_prot_file(prot);
++
++    const off_t maxSize = off + (off_t)len;
++
++    const DWORD dwMaxSizeLow = (sizeof(off_t) <= sizeof(DWORD)) ? 
++                    (DWORD)maxSize : (DWORD)(maxSize & 0xFFFFFFFFL);
++    const DWORD dwMaxSizeHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
++                    (DWORD)0 : (DWORD)((maxSize >> 32) & 0xFFFFFFFFL);
++
++#ifdef _MSC_VER
++#pragma warning(pop)
++#endif
++
++    errno = 0;
++    
++    if (len == 0 
++        /* Unsupported flag combinations */
++        || (flags & MAP_FIXED) != 0
++        /* Usupported protection combinations */
++        || prot == PROT_EXEC)
++    {
++        errno = EINVAL;
++        return MAP_FAILED;
++    }
++    
++    h = ((flags & MAP_ANONYMOUS) == 0) ? 
++                    (HANDLE)_get_osfhandle(fildes) : INVALID_HANDLE_VALUE;
++
++    if ((flags & MAP_ANONYMOUS) == 0 && h == INVALID_HANDLE_VALUE)
++    {
++        errno = EBADF;
++        return MAP_FAILED;
++    }
++
++    fm = CreateFileMapping(h, NULL, protect, dwMaxSizeHigh, dwMaxSizeLow, NULL);
++
++    if (fm == NULL)
++    {
++        errno = __map_mman_error(GetLastError(), EPERM);
++        return MAP_FAILED;
++    }
++  
++    map = MapViewOfFile(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len);
++
++    CloseHandle(fm);
++  
++    if (map == NULL)
++    {
++        errno = __map_mman_error(GetLastError(), EPERM);
++        return MAP_FAILED;
++    }
++
++    return map;
++}
++
++int munmap(void *addr, size_t len)
++{
++    if (UnmapViewOfFile(addr))
++        return 0;
++        
++    errno =  __map_mman_error(GetLastError(), EPERM);
++    
++    return -1;
++}
++
++int mprotect(void *addr, size_t len, int prot)
++{
++    DWORD newProtect = __map_mmap_prot_page(prot);
++    DWORD oldProtect = 0;
++    
++    if (VirtualProtect(addr, len, newProtect, &oldProtect))
++        return 0;
++    
++    errno =  __map_mman_error(GetLastError(), EPERM);
++    
++    return -1;
++}
++
++int msync(void *addr, size_t len, int flags)
++{
++    if (FlushViewOfFile(addr, len))
++        return 0;
++    
++    errno =  __map_mman_error(GetLastError(), EPERM);
++    
++    return -1;
++}
++
++int mlock(const void *addr, size_t len)
++{
++    if (VirtualLock((LPVOID)addr, len))
++        return 0;
++        
++    errno =  __map_mman_error(GetLastError(), EPERM);
++    
++    return -1;
++}
++
++int munlock(const void *addr, size_t len)
++{
++    if (VirtualUnlock((LPVOID)addr, len))
++        return 0;
++        
++    errno =  __map_mman_error(GetLastError(), EPERM);
++    
++    return -1;
++}
+diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp
+index e294bc3..836438b 100644
+--- a/lib/Support/raw_ostream.cpp
++++ b/lib/Support/raw_ostream.cpp
+@@ -12,7 +12,7 @@
+ # include <unistd.h>
+ #endif
+ 
+-#if defined(_MSC_VER)
++#if defined(_WIN32)
+ #include <io.h>
+ #ifndef STDIN_FILENO
+ # define STDIN_FILENO 0
+diff --git a/lib/Target/GNULDBackend.cpp b/lib/Target/GNULDBackend.cpp
+index 3e8915d..67c28cf 100644
+--- a/lib/Target/GNULDBackend.cpp
++++ b/lib/Target/GNULDBackend.cpp
+@@ -37,6 +37,10 @@
+ #include <mcld/LD/StubFactory.h>
+ #include <mcld/Object/ObjectBuilder.h>
+ 
++#if defined(_WIN32)
++  #define bzero(b,l) (memset((b), 0, (l)), (void)0)
++#endif
++
+ using namespace mcld;
+ 
+ //===--------------------------------------------------------------------===//
+diff --git a/lib/Target/Mips/MipsLDBackend.cpp b/lib/Target/Mips/MipsLDBackend.cpp
+index 8a62bd3..2f8f2fa 100644
+--- a/lib/Target/Mips/MipsLDBackend.cpp
++++ b/lib/Target/Mips/MipsLDBackend.cpp
+@@ -27,6 +27,10 @@
+ #include <mcld/Target/OutputRelocSection.h>
+ #include <mcld/Object/ObjectBuilder.h>
+ 
++#if defined(_WIN32)
++  #define bzero(b,l) (memset((b), 0, (l)), (void)0)
++#endif
++
+ using namespace mcld;
+ 
+ //===----------------------------------------------------------------------===//
+diff --git a/m4/llvm.m4 b/m4/llvm.m4
+index 42c9f58..a8732ad 100644
+--- a/m4/llvm.m4
++++ b/m4/llvm.m4
+@@ -111,7 +111,7 @@ AC_DEFUN([CHECK_LLVM],
+ 			*-*-win32*)
+ 				llvm_cv_platform_type="Win32" ;;
+ 			*-*-mingw*)
+-				llvm_cv_platform_type="Win32" ;;
++				llvm_cv_platform_type="Unix" ;;
+ 			*-*-haiku*)
+ 				llvm_cv_platform_type="Unix" ;;
+ 			*-unknown-eabi*)
+diff --git a/optimized/Makefile.am b/optimized/Makefile.am
+index 2e5df69..efd46dc 100644
+--- a/optimized/Makefile.am
++++ b/optimized/Makefile.am
+@@ -173,6 +173,7 @@ SOURCE = ${LIBDIR}/ADT/StringEntry.cpp \
+ 	${LIBDIR}/Support/Windows/FileSystem.inc \
+ 	${LIBDIR}/Support/Windows/PathV3.inc \
+ 	${LIBDIR}/Support/Windows/System.inc \
++	${LIBDIR}/Support/mingw/mman.inc \
+ 	${LIBDIR}/CodeGen/MCLDTargetMachine.cpp \
+ 	${LIBDIR}/CodeGen/MCLinker.cpp \
+ 	${LIBDIR}/Object/ObjectLinker.cpp \
+diff --git a/tools/llvm-mcld/llvm-mcld.cpp b/tools/llvm-mcld/llvm-mcld.cpp
+index 1f77ed1..68eebf0 100644
+--- a/tools/llvm-mcld/llvm-mcld.cpp
++++ b/tools/llvm-mcld/llvm-mcld.cpp
+@@ -45,7 +45,7 @@
+ # include <unistd.h>
+ #endif
+ 
+-#if defined(_MSC_VER)
++#if defined(_WIN32)
+ #include <io.h>
+ #ifndef STDIN_FILENO
+ # define STDIN_FILENO 0
+-- 
+1.7.7.3
+
