components/gdb/patches/gdb.procfs.c.patch
author Tomas Klacko <tomas.klacko@oracle.com>
Tue, 07 Jan 2014 05:15:45 -0800
changeset 1622 72f10d7bcda6
parent 1511 4d3b0b480760
child 6420 65948e9e205b
permissions -rw-r--r--
17824699 ksh93 coredumps in ed_emacsread() when changing prompt string (PS1)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1511
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     1
--- gdb-7.6/gdb/procfs.c	2012-12-31 22:32:49.000000000 -0800
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     2
+++ gdb-7.6/gdb/procfs.c	2013-08-15 00:05:56.550245791 -0700
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     3
@@ -159,20 +159,33 @@
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     4
 		   gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     5
 {
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     6
   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     7
+  const int sizeof_auxv_field = sizeof (void *);
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     8
   gdb_byte *ptr = *readptr;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     9
 
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    10
   if (endptr == ptr)
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    11
     return 0;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    12
 
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    13
-  if (endptr - ptr < 8 * 2)
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    14
+  if (endptr - ptr < sizeof_auxv_field * 2)
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    15
     return -1;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    16
 
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    17
-  *typep = extract_unsigned_integer (ptr, 4, byte_order);
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    18
-  ptr += 8;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    19
+  /*
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    20
+   * On 64 bit Solaris SPARC, i.e. big endian, the type will be in
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    21
+   * the left 4 bytes for 32 bit processes and the right 4 bytes
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    22
+   * for 64 bit processes.  The padding is 0.
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    23
+   */
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    24
+  if ((sizeof_auxv_field == 8) && (byte_order == BFD_ENDIAN_BIG)) {
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    25
+    if (*typep == 0)
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    26
+      *typep = extract_unsigned_integer (ptr + 4, 4, byte_order);
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    27
+  } else
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    28
+    *typep = extract_unsigned_integer (ptr, sizeof_auxv_field , byte_order);
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    29
+
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    30
+  ptr += sizeof_auxv_field;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    31
+
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    32
   /* The size of data is always 64-bit.  If the application is 32-bit,
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    33
      it will be zero extended, as expected.  */
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    34
-  *valp = extract_unsigned_integer (ptr, 8, byte_order);
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    35
-  ptr += 8;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    36
+
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    37
+  *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    38
+  ptr += sizeof_auxv_field;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    39
 
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    40
   *readptr = ptr;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    41
   return 1;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    42
@@ -347,7 +360,7 @@
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    43
 #  define AS_PROC_NAME_FMT     "/proc/%d/as"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    44
 #  define MAP_PROC_NAME_FMT    "/proc/%d/map"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    45
 #  define STATUS_PROC_NAME_FMT "/proc/%d/status"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    46
-#  define MAX_PROC_NAME_SIZE sizeof("/proc/99999/lwp/8096/lstatus")
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    47
+#  define MAX_PROC_NAME_SIZE sizeof("/proc/012345679/lwp/0123456789/lstatus")
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    48
 # endif
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    49
 /* the name of the proc status struct depends on the implementation */
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    50
 typedef pstatus_t   gdb_prstatus_t;
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    51
@@ -355,11 +368,11 @@
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    52
 #else /* ! NEW_PROC_API */
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    53
 /* format strings for /proc paths */
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    54
 # ifndef CTL_PROC_NAME_FMT
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    55
-#  define MAIN_PROC_NAME_FMT   "/proc/%05d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    56
-#  define CTL_PROC_NAME_FMT    "/proc/%05d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    57
-#  define AS_PROC_NAME_FMT     "/proc/%05d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    58
-#  define MAP_PROC_NAME_FMT    "/proc/%05d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    59
-#  define STATUS_PROC_NAME_FMT "/proc/%05d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    60
+#  define MAIN_PROC_NAME_FMT   "/proc/%06d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    61
+#  define CTL_PROC_NAME_FMT    "/proc/%06d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    62
+#  define AS_PROC_NAME_FMT     "/proc/%06d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    63
+#  define MAP_PROC_NAME_FMT    "/proc/%06d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    64
+#  define STATUS_PROC_NAME_FMT "/proc/%06d"
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    65
 #  define MAX_PROC_NAME_SIZE sizeof("/proc/ttttppppp")
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    66
 # endif
4d3b0b480760 17086418 upgrade gdb to 7.6
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    67
 /* The name of the proc status struct depends on the implementation.  */