usr/src/cmd/gdb/gdb.auxv.c.patch
author Jon Tibble <meths@btinternet.com>
Mon, 04 May 2015 14:04:39 +0100
branchoi_151a
changeset 254 9c2a4ac793f0
parent 46 9c200dad5ecc
permissions -rw-r--r--
Bash patch catchup including shellshock
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     1
--- gdb-6.8.orig/gdb/auxv.c	Wed Jan 16 08:27:37 2008
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     2
+++ gdb-6.8-64/gdb/auxv.c	Tue Aug 31 14:41:16 2010
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     3
@@ -82,7 +82,15 @@
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     4
 target_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     5
 		   gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     6
 {
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     7
-  const int sizeof_auxv_field = TYPE_LENGTH (builtin_type_void_data_ptr);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     8
+ 
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     9
+  /*
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    10
+   * Solaris pads out the auxv for 32 bit process to 64 bits when
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    11
+   * being read by a 64 bit process.  Use the native pointer size
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    12
+   * in gdb itself to determine the auxv field size.	
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    13
+   *
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    14
+   * const int sizeof_auxv_field = TYPE_LENGTH (builtin_type_void_data_ptr);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    15
+   */
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    16
+  const int sizeof_auxv_field = sizeof (void *);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    17
   gdb_byte *ptr = *readptr;
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    18
 
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    19
   if (endptr == ptr)
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    20
@@ -91,7 +99,20 @@
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    21
   if (endptr - ptr < sizeof_auxv_field * 2)
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    22
     return -1;
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    23
 
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    24
-  *typep = extract_unsigned_integer (ptr, sizeof_auxv_field);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    25
+  if (sizeof_auxv_field == 8 && gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) {
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    26
+    /*
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    27
+     * On 64 bit Solaris SPARC, i.e. big endian, the type will be in
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    28
+     * the left 4 bytes for 32 bit processes and the right 4 bytes
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    29
+     * for 64 bit processes.  The padding is 0.
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    30
+     */
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    31
+    *typep = extract_unsigned_integer (ptr, 4);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    32
+    if (*typep == 0) *typep = extract_unsigned_integer (ptr + 4, 4);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    33
+  } else {
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    34
+    /*
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    35
+     * Nothing special needs to be done on 32 bit or little endian systems.
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    36
+     */
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    37
+    *typep = extract_unsigned_integer (ptr, sizeof_auxv_field);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    38
+  }
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    39
   ptr += sizeof_auxv_field;
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    40
   *valp = extract_unsigned_integer (ptr, sizeof_auxv_field);
9c200dad5ecc Import sfw nuild 149
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    41
   ptr += sizeof_auxv_field;