re PR go/64595 (go programs abort when debug info is stripped)
authorIan Lance Taylor <iant@google.com>
Fri, 23 Jan 2015 22:26:41 +0000 (22:26 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 23 Jan 2015 22:26:41 +0000 (22:26 +0000)
PR go/64595
* go-lang.c (go_langhook_init_options_struct): Set default
debug_info_level.
(go_langhook_post_options): If debug_info_level is still the
default, make sure write_symbols is set.
* gccgo.texi (Invoking gccgo): Document that -g1 is the default.

From-SVN: r220064

gcc/go/ChangeLog
gcc/go/gccgo.texi
gcc/go/go-lang.c

index a2d236c18338b47e67c886081b13125ee9021fc2..d525f5dd7cf3291b3086e59303a05e64e6736238 100644 (file)
@@ -1,3 +1,12 @@
+2015-01-23  Ian Lance Taylor  <iant@google.com>
+
+       PR go/64595
+       * go-lang.c (go_langhook_init_options_struct): Set default
+       debug_info_level.
+       (go_langhook_post_options): If debug_info_level is still the
+       default, make sure write_symbols is set.
+       * gccgo.texi (Invoking gccgo): Document that -g1 is the default.
+
 2015-01-16  Richard Henderson  <rth@redhat.com>
 
        * go-gcc.cc (Gcc_backend::call_expression): Add chain_expr argument.
index 0dd493f38e1208d2ddf51001e5e0e2a098a54f23..45fc9d718e720926ead0c73afaf76d1629db8667 100644 (file)
@@ -223,6 +223,18 @@ may be used.  Or the checks may be removed via
 @option{-fno-go-check-divide-overflow}.  This option is currently on
 by default, but in the future may be off by default on systems that do
 not require it.
+
+@item -g
+@cindex @option{-g for gccgo}
+This is the standard @command{gcc} option (@pxref{Debugging Options, ,
+Debugging Options, gcc, Using the GNU Compiler Collection (GCC)}).  It
+is mentioned here because by default @command{gccgo} turns on
+debugging information generation with the equivalent of the standard
+option @option{-g1}.  This is because Go programs require debugging
+information to be available in order to get backtrace information.  An
+explicit @option{-g0} may be used to disable the generation of
+debugging information, in which case certain standard library
+functions, such as @code{runtime.Callers}, will not operate correctly.
 @end table
 
 @c man end
index 2797e99620c36152ae48c5888430196950e9830d..fe5b583b51b55ed5d89ab30b9fa7ad1bf10fb352 100644 (file)
@@ -171,6 +171,12 @@ go_langhook_init_options_struct (struct gcc_options *opts)
   /* Exceptions are used to handle recovering from panics.  */
   opts->x_flag_exceptions = 1;
   opts->x_flag_non_call_exceptions = 1;
+
+  /* Go programs expect runtime.Callers to work, and that uses
+     libbacktrace that uses debug info.  Set the debug info level to 1
+     by default.  In post_options we will set the debug type if the
+     debug info level was not set back to 0 on the command line.  */
+  opts->x_debug_info_level = DINFO_LEVEL_TERSE;
 }
 
 /* Infrastructure for a vector of char * pointers.  */
@@ -289,6 +295,12 @@ go_langhook_post_options (const char **pfilename ATTRIBUTE_UNUSED)
   if (!global_options_set.x_flag_optimize_sibling_calls)
     global_options.x_flag_optimize_sibling_calls = 0;
 
+  /* If the debug info level is still 1, as set in init_options, make
+     sure that some debugging type is selected.  */
+  if (global_options.x_debug_info_level == DINFO_LEVEL_TERSE
+      && global_options.x_write_symbols == NO_DEBUG)
+    global_options.x_write_symbols = PREFERRED_DEBUGGING_TYPE;
+
   /* Returning false means that the backend should be used.  */
   return false;
 }