gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Fri, 5 Apr 2013 19:17:15 +0000 (19:17 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Fri, 5 Apr 2013 19:17:15 +0000 (19:17 +0000)
Fix compatibility with Linux kernel 3.8.3.
* linux-tdep.c (linux_find_memory_regions_full): Move variable number
to more inner block.  Remove parsing of NUMBER from outer block.
Parse NUMBER only if KEYWORD has been identified.

gdb/ChangeLog
gdb/linux-tdep.c

index 9d319642b84e3b2267fcbace7639a77008613dc7..63c3fa9ad1f5aa9a103160c9f45cea86e9b16020 100644 (file)
@@ -1,3 +1,10 @@
+2013-04-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       Fix compatibility with Linux kernel 3.8.3.
+       * linux-tdep.c (linux_find_memory_regions_full): Move variable number
+       to more inner block.  Remove parsing of NUMBER from outer block.
+       Parse NUMBER only if KEYWORD has been identified.
+
 2013-04-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix variable name shadowing.
index cc63e9b8e5f6530f16f911e5c0505ebf74d25102..9def1086483d3db4bf2a05c27ad01bc57bb207d3 100644 (file)
@@ -720,20 +720,30 @@ linux_find_memory_regions_full (struct gdbarch *gdbarch,
               line = strtok (NULL, "\n"))
            {
              char keyword[64 + 1];
-             unsigned long number;
 
-             if (sscanf (line, "%64s%lu kB\n", keyword, &number) != 2)
+             if (sscanf (line, "%64s", keyword) != 1)
                {
                  warning (_("Error parsing {s,}maps file '%s'"), mapsfilename);
                  break;
                }
              if (strcmp (keyword, "Anonymous:") == 0)
                has_anonymous = 1;
-             if (number != 0 && (strcmp (keyword, "Shared_Dirty:") == 0
-                                 || strcmp (keyword, "Private_Dirty:") == 0
-                                 || strcmp (keyword, "Swap:") == 0
-                                 || strcmp (keyword, "Anonymous:") == 0))
-               modified = 1;
+             if (strcmp (keyword, "Shared_Dirty:") == 0
+                 || strcmp (keyword, "Private_Dirty:") == 0
+                 || strcmp (keyword, "Swap:") == 0
+                 || strcmp (keyword, "Anonymous:") == 0)
+               {
+                 unsigned long number;
+
+                 if (sscanf (line, "%*s%lu", &number) != 1)
+                   {
+                     warning (_("Error parsing {s,}maps file '%s' number"),
+                              mapsfilename);
+                     break;
+                   }
+                 if (number != 0)
+                   modified = 1;
+               }
            }
 
          /* Older Linux kernels did not support the "Anonymous:" counter.