diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 5740d43..99b17bf 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1088,6 +1088,7 @@
 	dtrace-probe.c \
 	dummy-frame.c \
 	dwarf2-frame.c \
+	dwarf2utils.c \
 	dwarf2-frame-tailcall.c \
 	dwarf2expr.c \
 	dwarf2loc.c \
@@ -1707,6 +1708,7 @@
 	dummy-frame.o \
 	dwarf2-frame.o \
 	dwarf2-frame-tailcall.o \
+	dwarf2utils.o \
 	dwarf2expr.o \
 	dwarf2loc.o \
 	dwarf2read.o \
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index f1e2078..e2e7c62 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -43,6 +43,7 @@
 #include <algorithm>
 #include "target-descriptions.h"
 #include "arch/amd64.h"
+#include "dwarf2utils.h"
 #include "ax.h"
 #include "ax-gdb.h"
 
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index b1914cf..dd28ff7 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -75,6 +75,7 @@
 #include "common/underlying.h"
 #include "common/byte-vector.h"
 #include "filename-seen-cache.h"
+#include "dwarf2utils.h"
 #include <fcntl.h>
 #include <sys/types.h>
 #include <algorithm>
diff --git a/gdb/dwarf2utils.c b/gdb/dwarf2utils.c
new file mode 100644
index 0000000..9bb69f7
--- /dev/null
+++ b/gdb/dwarf2utils.c
@@ -0,0 +1,86 @@
+/* DWARF 2 debugging format utils for GDB.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Check for GCC >= 4.x according to the symtab->producer string.  Return minor
+   version (x) of 4.x in such case.  If it is not GCC or it is GCC older than
+   4.x return -1.  If it is GCC 5.x or higher return INT_MAX.  */
+
+#include "config.h"
+#include "dwarf2utils.h"
+#include "stdio.h"
+#include "string.h"
+#include "defs.h"
+#include "dyn-string.h"
+#include <ctype.h>
+
+#include "common/common-types.h"
+#include "common/common-exceptions.h"
+#include "common/common-utils.h"
+
+
+#include "utils.h"
+
+int
+producer_is_gcc_ge_4 (const char *producer)
+{
+  int major, minor;
+
+  if (! producer_is_gcc (producer, &major, &minor))
+    return -1;
+  if (major < 4)
+    return -1;
+  if (major > 4)
+    return INT_MAX;
+  return minor;
+}
+
+/* Returns nonzero if the given PRODUCER string is GCC and sets the MAJOR
+   and MINOR versions when not NULL.  Returns zero if the given PRODUCER
+   is NULL or it isn't GCC.  */
+
+int
+producer_is_gcc (const char *producer, int *major, int *minor)
+{
+  const char *cs;
+
+  if (producer != NULL && startswith (producer, "GNU "))
+    {
+      int maj, min;
+
+      if (major == NULL)
+	major = &maj;
+      if (minor == NULL)
+	minor = &min;
+
+      /* Skip any identifier after "GNU " - such as "C11" "C++" or "Java".
+	 A full producer string might look like:
+	 "GNU C 4.7.2"
+	 "GNU Fortran 4.8.2 20140120 (Red Hat 4.8.2-16) -mtune=generic ..."
+	 "GNU C++14 5.0.0 20150123 (experimental)"
+      */
+      cs = &producer[strlen ("GNU ")];
+      while (*cs && !isspace (*cs))
+        cs++;
+      if (*cs && isspace (*cs))
+        cs++;
+      if (sscanf (cs, "%d.%d", major, minor) == 2)
+	return 1;
+    }
+
+  /* Not recognized as GCC.  */
+  return 0;
+}
diff --git a/gdb/dwarf2utils.h b/gdb/dwarf2utils.h
new file mode 100644
index 0000000..95d629d
--- /dev/null
+++ b/gdb/dwarf2utils.h
@@ -0,0 +1,28 @@
+/* DWARF 2 debugging format utils for GDB.
+
+   Copyright (C) 2017 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+#ifndef DWARF2UTILS_H
+#define DWARF2UTILS_H
+
+/* See documentation in the utils.c file.  */
+extern int producer_is_gcc_ge_4 (const char *producer);
+
+/* See documentation in the utils.c file.  */
+extern int producer_is_gcc (const char *producer, int *major, int *minor);
+
+#endif
diff --git a/gdb/utils.c b/gdb/utils.c
index c660c6b..45373a0 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -2944,60 +2944,6 @@
   return make_cleanup (do_bpstat_clear_actions_cleanup, NULL);
 }
 
-/* Check for GCC >= 4.x according to the symtab->producer string.  Return minor
-   version (x) of 4.x in such case.  If it is not GCC or it is GCC older than
-   4.x return -1.  If it is GCC 5.x or higher return INT_MAX.  */
-
-int
-producer_is_gcc_ge_4 (const char *producer)
-{
-  int major, minor;
-
-  if (! producer_is_gcc (producer, &major, &minor))
-    return -1;
-  if (major < 4)
-    return -1;
-  if (major > 4)
-    return INT_MAX;
-  return minor;
-}
-
-/* Returns nonzero if the given PRODUCER string is GCC and sets the MAJOR
-   and MINOR versions when not NULL.  Returns zero if the given PRODUCER
-   is NULL or it isn't GCC.  */
-
-int
-producer_is_gcc (const char *producer, int *major, int *minor)
-{
-  const char *cs;
-
-  if (producer != NULL && startswith (producer, "GNU "))
-    {
-      int maj, min;
-
-      if (major == NULL)
-	major = &maj;
-      if (minor == NULL)
-	minor = &min;
-
-      /* Skip any identifier after "GNU " - such as "C11" or "C++".
-	 A full producer string might look like:
-	 "GNU C 4.7.2"
-	 "GNU Fortran 4.8.2 20140120 (Red Hat 4.8.2-16) -mtune=generic ..."
-	 "GNU C++14 5.0.0 20150123 (experimental)"
-      */
-      cs = &producer[strlen ("GNU ")];
-      while (*cs && !isspace (*cs))
-        cs++;
-      if (*cs && isspace (*cs))
-        cs++;
-      if (sscanf (cs, "%d.%d", major, minor) == 2)
-	return 1;
-    }
-
-  /* Not recognized as GCC.  */
-  return 0;
-}
 
 /* Helper for make_cleanup_free_char_ptr_vec.  */
 
diff --git a/gdb/utils.h b/gdb/utils.h
index 6d33e8d..7b45cc8 100644
--- a/gdb/utils.h
+++ b/gdb/utils.h
@@ -442,9 +442,6 @@
 extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout);
 #endif
 
-extern int producer_is_gcc_ge_4 (const char *producer);
-extern int producer_is_gcc (const char *producer, int *major, int *minor);
-
 extern int myread (int, char *, int);
 
 /* Ensure that V is aligned to an N byte boundary (B's assumed to be a
