This is the mail archive of the gdb-patches@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]

[commit, arm] Fix PR gdb/13218 (GDB segfaults on 3.x kernels)


Hello,

when running on recent Linux kernels that report a two-level version number
like 3.0 or 3.1, GDB on ARM will crash in a routine get_linux_version called
from _initialize_arm_linux_nat, because that routine hard-codes parsing of
three version number components.

However, it turns out that the parsed version number is in fact not used
anywhere; that routine in question has been in basically unchanged since
the very beginning of CVS, and even then the version number was not used.

So the patch below simply removes all that dead code, fixing the crash in
the process.

Tested on arm-linux-gnueabi, committed to mainline.

Bye,
Ulrich



ChangeLog:

	PR gdb/13218
	* arm-linux-nat.c (os_version, os_major, os_minor, os_release):
	Remove unused variables.
	(get_linux_version): Remove function.
	(_initialize_arm_linux_nat): Do not call it.


Index: gdb/arm-linux-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-linux-nat.c,v
retrieving revision 1.49
diff -u -p -r1.49 arm-linux-nat.c
--- gdb/arm-linux-nat.c	7 Oct 2011 17:15:15 -0000	1.49
+++ gdb/arm-linux-nat.c	10 Oct 2011 18:36:53 -0000
@@ -72,22 +72,6 @@ static int arm_linux_vfp_register_count;
 
 extern int arm_apcs_32;
 
-/* The following variables are used to determine the version of the
-   underlying GNU/Linux operating system.  Examples:
-
-   GNU/Linux 2.0.35             GNU/Linux 2.2.12
-   os_version = 0x00020023      os_version = 0x0002020c
-   os_major = 2                 os_major = 2
-   os_minor = 0                 os_minor = 2
-   os_release = 35              os_release = 12
-
-   Note: os_version = (os_major << 16) | (os_minor << 8) | os_release
-
-   These are initialized using get_linux_version() from
-   _initialize_arm_linux_nat().  */
-
-static unsigned int os_version, os_major, os_minor, os_release;
-
 /* On GNU/Linux, threads are implemented as pseudo-processes, in which
    case we may be tracing more than one process at a time.  In that
    case, inferior_ptid will contain the main process ID and the
@@ -644,31 +628,6 @@ ps_get_thread_area (const struct ps_proc
   return PS_OK;
 }
 
-static unsigned int
-get_linux_version (unsigned int *vmajor,
-		   unsigned int *vminor,
-		   unsigned int *vrelease)
-{
-  struct utsname info;
-  char *pmajor, *pminor, *prelease, *tail;
-
-  if (-1 == uname (&info))
-    {
-      warning (_("Unable to determine GNU/Linux version."));
-      return -1;
-    }
-
-  pmajor = strtok (info.release, ".");
-  pminor = strtok (NULL, ".");
-  prelease = strtok (NULL, ".");
-
-  *vmajor = (unsigned int) strtoul (pmajor, &tail, 0);
-  *vminor = (unsigned int) strtoul (pminor, &tail, 0);
-  *vrelease = (unsigned int) strtoul (prelease, &tail, 0);
-
-  return ((*vmajor << 16) | (*vminor << 8) | *vrelease);
-}
-
 static const struct target_desc *
 arm_linux_read_description (struct target_ops *ops)
 {
@@ -1287,8 +1246,6 @@ _initialize_arm_linux_nat (void)
 {
   struct target_ops *t;
 
-  os_version = get_linux_version (&os_major, &os_minor, &os_release);
-
   /* Fill in the generic GNU/Linux methods.  */
   t = linux_target ();
 
-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


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