Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: ali_anwar <ali_anwar@codesourcery.com>
To: <gdb-patches@sourceware.org>
Subject: "maint print arch" causing gdb crash
Date: Fri, 05 Oct 2012 14:15:00 -0000	[thread overview]
Message-ID: <506EEAEC.2010604@codesourcery.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 610 bytes --]

Hi,

'gdbarch_dump' is in some cases passing a NULL pointer to 'sprintf' when 
printing 'gdbarch->stap_gdb_register_suffix' etc.  Printing NULL 
pointers like this is undefined behavior.  With glibc passing a NULL 
pointer just prints "(null)". With the MSVC libc, however, GDB crashes.

Attached patch fixes this issue using the similar approach discussed in 
following scenario:
http://sourceware.org/ml/gdb-patches/2011-10/msg00662.html

There are some newly added variables due to which "maint print arch" 
command was causing gdb crash on whindows host. This patch takes care of 
them.

OK?

Thanks,
-Ali

[-- Attachment #2: gdb_crash.patch --]
[-- Type: text/x-patch, Size: 6359 bytes --]

Index: ChangeLog
===================================================================
RCS file: /cvs/src/src/ChangeLog,v
retrieving revision 1.1037
diff -u -r1.1037 ChangeLog
--- ChangeLog	29 Sep 2012 15:35:50 -0000	1.1037
+++ ChangeLog	5 Oct 2012 12:48:14 -0000
@@ -1,3 +1,10 @@
+2012-10-05  Ali Anwar  <ali_anwar@codesourcery.com>
+
+	gdb/
+	* gdbarch.sh (function_list): Use 'pstring' when printing
+	variable which could return NULL.
+	* gdbarch.c: Regenerate.
+
 2012-09-28  Ian Lance Taylor  <iant@google.com>
 
 	* Makefile.def: Make all-target-libgo depend on
Index: gdb/gdbarch.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.c,v
retrieving revision 1.495
diff -u -r1.495 gdbarch.c
--- gdb/gdbarch.c	2 Aug 2012 09:36:38 -0000	1.495
+++ gdb/gdbarch.c	5 Oct 2012 12:48:15 -0000
@@ -1315,16 +1315,16 @@
                       host_address_to_string (gdbarch->stabs_argument_has_addr));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_gdb_register_prefix = %s\n",
-                      gdbarch->stap_gdb_register_prefix);
+                      pstring (gdbarch->stap_gdb_register_prefix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_gdb_register_suffix = %s\n",
-                      gdbarch->stap_gdb_register_suffix);
+                      pstring (gdbarch->stap_gdb_register_suffix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_integer_prefix = %s\n",
-                      gdbarch->stap_integer_prefix);
+                      pstring (gdbarch->stap_integer_prefix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_integer_suffix = %s\n",
-                      gdbarch->stap_integer_suffix);
+                      pstring (gdbarch->stap_integer_suffix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_stap_is_single_operand_p() = %d\n",
                       gdbarch_stap_is_single_operand_p (gdbarch));
@@ -1339,16 +1339,16 @@
                       host_address_to_string (gdbarch->stap_parse_special_token));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_register_indirection_prefix = %s\n",
-                      gdbarch->stap_register_indirection_prefix);
+                      pstring (gdbarch->stap_register_indirection_prefix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_register_indirection_suffix = %s\n",
-                      gdbarch->stap_register_indirection_suffix);
+                      pstring (gdbarch->stap_register_indirection_suffix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_register_prefix = %s\n",
-                      gdbarch->stap_register_prefix);
+                      pstring (gdbarch->stap_register_prefix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: stap_register_suffix = %s\n",
-                      gdbarch->stap_register_suffix);
+                      pstring (gdbarch->stap_register_suffix));
   fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_static_transform_name_p() = %d\n",
                       gdbarch_static_transform_name_p (gdbarch));
Index: gdb/gdbarch.sh
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.sh,v
retrieving revision 1.544
diff -u -r1.544 gdbarch.sh
--- gdb/gdbarch.sh	2 Aug 2012 09:36:39 -0000	1.544
+++ gdb/gdbarch.sh	5 Oct 2012 12:48:16 -0000
@@ -809,10 +809,10 @@
 #  \$10 ;; integer constant 10
 #
 # in this case, this prefix would be the character \`\$\'.
-v:const char *:stap_integer_prefix:::0:0::0:gdbarch->stap_integer_prefix
+v:const char *:stap_integer_prefix:::0:0::0:pstring (gdbarch->stap_integer_prefix)
 
 # Suffix used to mark an integer constant on the architecture's assembly.
-v:const char *:stap_integer_suffix:::0:0::0:gdbarch->stap_integer_suffix
+v:const char *:stap_integer_suffix:::0:0::0:pstring (gdbarch->stap_integer_suffix)
 
 # Prefix used to mark a register name on the architecture's assembly.
 # For example, on x86 the register name is written as:
@@ -820,10 +820,10 @@
 #  \%eax ;; register eax
 #
 # in this case, this prefix would be the character \`\%\'.
-v:const char *:stap_register_prefix:::0:0::0:gdbarch->stap_register_prefix
+v:const char *:stap_register_prefix:::0:0::0:pstring (gdbarch->stap_register_prefix)
 
 # Suffix used to mark a register name on the architecture's assembly
-v:const char *:stap_register_suffix:::0:0::0:gdbarch->stap_register_suffix
+v:const char *:stap_register_suffix:::0:0::0:pstring (gdbarch->stap_register_suffix)
 
 # Prefix used to mark a register indirection on the architecture's assembly.
 # For example, on x86 the register indirection is written as:
@@ -834,7 +834,7 @@
 #
 # Please note that we use the indirection prefix also for register
 # displacement, e.g., \`4\(\%eax\)\' on x86.
-v:const char *:stap_register_indirection_prefix:::0:0::0:gdbarch->stap_register_indirection_prefix
+v:const char *:stap_register_indirection_prefix:::0:0::0:pstring (gdbarch->stap_register_indirection_prefix)
 
 # Suffix used to mark a register indirection on the architecture's assembly.
 # For example, on x86 the register indirection is written as:
@@ -845,7 +845,7 @@
 #
 # Please note that we use the indirection suffix also for register
 # displacement, e.g., \`4\(\%eax\)\' on x86.
-v:const char *:stap_register_indirection_suffix:::0:0::0:gdbarch->stap_register_indirection_suffix
+v:const char *:stap_register_indirection_suffix:::0:0::0:pstring (gdbarch->stap_register_indirection_suffix)
 
 # Prefix used to name a register using GDB's nomenclature.
 #
@@ -853,10 +853,10 @@
 # language (e.g., \`10\' is the 10th general-purpose register).  However,
 # inside GDB this same register has an \`r\' appended to its name, so the 10th
 # register would be represented as \`r10\' internally.
-v:const char *:stap_gdb_register_prefix:::0:0::0:gdbarch->stap_gdb_register_prefix
+v:const char *:stap_gdb_register_prefix:::0:0::0:pstring (gdbarch->stap_gdb_register_prefix)
 
 # Suffix used to name a register using GDB's nomenclature.
-v:const char *:stap_gdb_register_suffix:::0:0::0:gdbarch->stap_gdb_register_suffix
+v:const char *:stap_gdb_register_suffix:::0:0::0:pstring (gdbarch->stap_gdb_register_suffix)

             reply	other threads:[~2012-10-05 14:15 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-05 14:15 ali_anwar [this message]
2012-10-05 22:05 ` Stan Shebs
2012-10-07  9:07 ` Yao Qi
2012-10-08 11:47   ` ali_anwar
2012-10-08 13:12     ` Yao Qi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=506EEAEC.2010604@codesourcery.com \
    --to=ali_anwar@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox