GDB: Fix some null pointer dereferences due to disassembler-options patch.
authorPeter Bergner <bergner@vnet.ibm.com>
Tue, 7 Mar 2017 15:49:10 +0000 (09:49 -0600)
committerPeter Bergner <bergner@vnet.ibm.com>
Tue, 7 Mar 2017 15:49:10 +0000 (09:49 -0600)
gdb/
* gdbarch.sh (pstring_ptr): New static function.
(gdbarch_disassembler_options): Use it.
(gdbarch_verify_disassembler_options): Print valid_disassembler_options,
not valid_disassembler_option->name.
* gdbarch.c: Regenerate.

gdb/ChangeLog
gdb/gdbarch.c
gdb/gdbarch.sh

index f63c09cc80e8d6f08a4a7f94f47323949423e348..2427b103299a68d5bdd87d4103e5aa06a66f3691 100644 (file)
@@ -1,3 +1,11 @@
+2017-03-07  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * gdbarch.sh (pstring_ptr): New static function.
+       (gdbarch_disassembler_options): Use it.
+       (gdbarch_verify_disassembler_options): Print valid_disassembler_options,
+       not valid_disassembler_option->name.
+       * gdbarch.c: Regenerate.
+
 2017-03-07  Peter Bergner  <bergner@vnet.ibm.com>
 
        * config/powerpc/ppc64-linux.mh (MH_CFLAGS): Delete.
index f52cf5d698be7e85e19c11d227dd26c1ef6a8891..87eafb2ab65389cc08df0df28574a845aef645db 100644 (file)
@@ -84,6 +84,14 @@ pstring (const char *string)
   return string;
 }
 
+static char *
+pstring_ptr (char **string)
+{
+  if (string == NULL || *string == NULL)
+    return "(null)";
+  return *string;
+}
+
 /* Helper function to print a list of strings, represented as "const
    char *const *".  The list is printed comma-separated.  */
 
@@ -880,7 +888,7 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       core_addr_to_string_nz (gdbarch->deprecated_function_start_offset));
   fprintf_unfiltered (file,
                       "gdbarch_dump: disassembler_options = %s\n",
-                      pstring (*gdbarch->disassembler_options));
+                      pstring_ptr (gdbarch->disassembler_options));
   fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_displaced_step_copy_insn_p() = %d\n",
                       gdbarch_displaced_step_copy_insn_p (gdbarch));
@@ -1429,7 +1437,7 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       host_address_to_string (gdbarch->unwind_sp));
   fprintf_unfiltered (file,
                       "gdbarch_dump: valid_disassembler_options = %s\n",
-                      host_address_to_string (gdbarch->valid_disassembler_options->name));
+                      host_address_to_string (gdbarch->valid_disassembler_options));
   fprintf_unfiltered (file,
                       "gdbarch_dump: value_from_register = <%s>\n",
                       host_address_to_string (gdbarch->value_from_register));
index 6902e0e34d26d14f8a55e45a8391543fd7c792c0..39b1f9477c28dedacb2cdabca602fd2e04b49254 100755 (executable)
@@ -1164,8 +1164,8 @@ m:const char *:gnu_triplet_regexp:void:::default_gnu_triplet_regexp::0
 m:int:addressable_memory_unit_size:void:::default_addressable_memory_unit_size::0
 
 # Functions for allowing a target to modify its disassembler options.
-v:char **:disassembler_options:::0:0::0:pstring (*gdbarch->disassembler_options)
-v:const disasm_options_t *:valid_disassembler_options:::0:0::0:host_address_to_string (gdbarch->valid_disassembler_options->name)
+v:char **:disassembler_options:::0:0::0:pstring_ptr (gdbarch->disassembler_options)
+v:const disasm_options_t *:valid_disassembler_options:::0:0::0:host_address_to_string (gdbarch->valid_disassembler_options)
 
 EOF
 }
@@ -1678,6 +1678,14 @@ pstring (const char *string)
   return string;
 }
 
+static char *
+pstring_ptr (char **string)
+{
+  if (string == NULL || *string == NULL)
+    return "(null)";
+  return *string;
+}
+
 /* Helper function to print a list of strings, represented as "const
    char *const *".  The list is printed comma-separated.  */