This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[commit, arm] Fix PR gdb/13218 (GDB segfaults on 3.x kernels)
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 10 Oct 2011 20:51:52 +0200 (CEST)
- Subject: [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