This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Move GDB producer parsing routines to a separate file


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b32b108aba2c0119d0e231d203d3284539da2379

commit b32b108aba2c0119d0e231d203d3284539da2379
Author: Walfred Tedeschi <walfred.tedeschi@intel.com>
Date:   Tue Sep 26 18:26:41 2017 +0100

    Move GDB producer parsing routines to a separate file
    
    gdb/ChangeLog:
    2017-09-26  Walfred Tedeschi  <walfred.tedeschi@intel.com>
    
    	* Makefile.in (SFILES): Add producer.c.
    	(COMMON_OBS): Add producer.o
    	* amd64-tdep.c (producer.h): Add new include.
    	* dwarf2read.c (producer.h): Add new include.
    	* producer.c: New file.
    	* producer.h: New file.
    	* utils.c (producer_is_gcc, producer_is_gcc_ge_4): Move to
    	producer.c.
    	* utils.h (producer_is_gcc, producer_is_gcc_ge_4): Move to
    	producer.h.

Diff:
---
 gdb/ChangeLog    | 13 ++++++++++
 gdb/Makefile.in  |  2 ++
 gdb/amd64-tdep.c |  1 +
 gdb/dwarf2read.c |  1 +
 gdb/producer.c   | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 gdb/producer.h   | 33 +++++++++++++++++++++++++
 gdb/utils.c      | 54 -----------------------------------------
 gdb/utils.h      |  3 ---
 8 files changed, 123 insertions(+), 57 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 68f4817..7f295e6 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,16 @@
+2017-09-26  Walfred Tedeschi  <walfred.tedeschi@intel.com>
+
+	* Makefile.in (SFILES): Add producer.c.
+	(COMMON_OBS): Add producer.o
+	* amd64-tdep.c (producer.h): Add new include.
+	* dwarf2read.c (producer.h): Add new include.
+	* producer.c: New file.
+	* producer.h: New file.
+	* utils.c (producer_is_gcc, producer_is_gcc_ge_4): Move to
+	producer.c.
+	* utils.h (producer_is_gcc, producer_is_gcc_ge_4): Move to
+	producer.h.
+
 2017-09-26  Matthias Klose  <doko@ubuntu.com>
 
 	* configure.ac: Search ncursesw before ncurses.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 5740d43..9004b35 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1170,6 +1170,7 @@ SFILES = \
 	parse.c \
 	printcmd.c \
 	probe.c \
+	producer.c \
 	proc-service.list \
 	progspace.c \
 	progspace-and-thread.c \
@@ -1792,6 +1793,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
 	print-utils.o \
 	printcmd.o \
 	probe.o \
+	producer.o \
 	progspace.o \
 	progspace-and-thread.o \
 	prologue-value.o \
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index f1e2078..e56c388 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 "producer.h"
 #include "ax.h"
 #include "ax-gdb.h"
 
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index b1914cf..4083c63 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 "producer.h"
 #include <fcntl.h>
 #include <sys/types.h>
 #include <algorithm>
diff --git a/gdb/producer.c b/gdb/producer.c
new file mode 100644
index 0000000..3f9297a
--- /dev/null
+++ b/gdb/producer.c
@@ -0,0 +1,73 @@
+/* Producer string parsers for GDB.
+
+   Copyright (C) 2012-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/>.  */
+
+#include "defs.h"
+#include "producer.h"
+
+/* See producer.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;
+}
+
+/* See producer.h.  */
+
+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/producer.h b/gdb/producer.h
new file mode 100644
index 0000000..143d4e1
--- /dev/null
+++ b/gdb/producer.h
@@ -0,0 +1,33 @@
+/* Producer string parsers for GDB.
+
+   Copyright (C) 2012-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 PRODUCER_H
+#define PRODUCER_H
+
+/* 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.  */
+extern int producer_is_gcc_ge_4 (const char *producer);
+
+/* 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.  */
+extern int producer_is_gcc (const char *producer, int *major, int *minor);
+
+#endif
diff --git a/gdb/utils.c b/gdb/utils.c
index 41ad35f..24294be 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -2947,60 +2947,6 @@ make_bpstat_clear_actions_cleanup (void)
   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 @@ void dummy_obstack_deallocate (void *object, void *data);
 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]