Configure scripts tend to do things like this:
nm -B /dev/null
which, on Windows, turn into:
nm -B nul
and nul here acts like a normal file with 0 size as far as stat() is concerned.
Check harder for the file in question being unusual (isatty() does see that).
And since configure script expects /dev/nul, do report it that way.

diff -urN binutils-2.27.orig/binutils/bucomm.c binutils-2.27/binutils/bucomm.c
--- binutils-2.27.orig/binutils/bucomm.c	2016-08-03 09:36:51.000000000 +0200
+++ binutils-2.27/binutils/bucomm.c	2016-09-21 20:43:33.158175700 +0200
@@ -575,6 +575,15 @@
 {
   struct stat statbuf;

+  int f, t;
+  t = -1;
+  f = open (file_name, O_RDONLY | O_BINARY);
+  if (f != 0)
+    {
+      t = isatty (f);
+      close (f);
+    }
+
   if (stat (file_name, &statbuf) < 0)
     {
       if (errno == ENOENT)
@@ -600,8 +600,15 @@
     }
   else if (S_ISDIR (statbuf.st_mode))
     non_fatal (_("Warning: '%s' is a directory"), file_name);
-  else if (! S_ISREG (statbuf.st_mode))
-    non_fatal (_("Warning: '%s' is not an ordinary file"), file_name);
+  else if (! S_ISREG (statbuf.st_mode) || t > 0)
+    {
+#ifdef _WIN32
+      /* libtool passes /dev/null and checks for /dev/null in the output */
+      if (stricmp (file_name, "nul") == 0)
+        file_name = "/dev/null";
+#endif
+      non_fatal (_("Warning: '%s' is not an ordinary file"), file_name);
+    }
   else if (statbuf.st_size < 0)
     non_fatal (_("Warning: '%s' has negative size, probably it is too large"),
                file_name);
diff -urN binutils-2.27.orig/binutils/elfedit.c binutils-2.27/binutils/elfedit.c
--- binutils-2.27.orig/binutils/elfedit.c	2016-08-03 09:36:51.000000000 +0200
+++ binutils-2.27/binutils/elfedit.c	2016-09-21 20:38:40.359931800 +0200
@@ -483,6 +483,14 @@
 check_file (const char *file_name, struct stat *statbuf_p)
 {
   struct stat statbuf;
+  int f, t;
+  t = -1;
+  f = open (file_name, O_RDONLY | O_BINARY);
+  if (f != 0)
+    {
+      t = isatty (f);
+      close (f);
+    }

   if (statbuf_p == NULL)
     statbuf_p = &statbuf;
@@ -497,8 +505,13 @@
       return 1;
     }

-  if (! S_ISREG (statbuf_p->st_mode))
+  if (! S_ISREG (statbuf_p->st_mode) || t > 0)
     {
+#ifdef _WIN32
+      /* libtool passes /dev/null and checks for /dev/null in the output */
+      if (stricmp (file_name, "nul") == 0)
+        file_name = "/dev/null";
+#endif
       error (_("'%s' is not an ordinary file\n"), file_name);
       return 1;
     }
