This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Make LTO link pick up compile-time -g

On Mon, 9 Sep 2019, Matthias Klose wrote:

> On 09.09.19 14:02, Richard Biener wrote:
> > So this is really a very poor mans solution that also might
> > uncover issues with -g0 at compile-time vs. -g at link-time
> > if there are mixed -g0/g TUs in the LTO link.
> Could this be documented, at least in the man page? e.g. invoke.texi.  As a
> bonus I would very much welcome a section in the user manual about LTO
> building.  E.g. what will work, what currently doesn't work, etc.  Happy to
> review and extend such documentation, but I don't feel comfortable to write
> that on my own.

Like the following?


2019-09-09  Richard Biener  <>

	* lto-opts.c (lto_write_options): Stream -g when debug is enabled.
	* lto-wrapper.c (merge_and_complain): Pick up -g.
	(append_compiler_options): Likewise.
	(run_gcc): Re-instantiate handling -g0 at link-time.
	* doc/invoke.texi (flto): Document debug info generation.

Index: gcc/lto-opts.c
--- gcc/lto-opts.c	(revision 275454)
+++ gcc/lto-opts.c	(working copy)
@@ -94,6 +94,10 @@ lto_write_options (void)
 				      : "-fno-pie");
+  /* If debug info is enabled append -g.  */
+  if (debug_info_level > DINFO_LEVEL_NONE)
+    append_to_collect_gcc_options (&temporary_obstack, &first_p, "-g");
   /* Append options from target hook and store them to offload_lto section.  */
   if (lto_stream_offload_p)
Index: gcc/lto-wrapper.c
--- gcc/lto-wrapper.c	(revision 275454)
+++ gcc/lto-wrapper.c	(working copy)
@@ -265,6 +265,7 @@ merge_and_complain (struct cl_decoded_op
 	case OPT_fshow_column:
 	case OPT_fcommon:
 	case OPT_fgnu_tm:
+	case OPT_g:
 	  /* Do what the old LTO code did - collect exactly one option
 	     setting per OPT code, we pick the first we encounter.
 	     ???  This doesn't make too much sense, but when it doesn't
@@ -617,6 +618,7 @@ append_compiler_options (obstack *argv_o
 	case OPT_fopenacc:
 	case OPT_fopenacc_dim_:
 	case OPT_foffload_abi_:
+	case OPT_g:
 	case OPT_O:
 	case OPT_Ofast:
 	case OPT_Og:
@@ -1399,6 +1401,10 @@ run_gcc (unsigned argc, char *argv[])
 	  linker_output_rel = !strcmp (option->arg, "rel");
+	case OPT_g:
+	  /* Recognize -g0.  */
+	  skip_debug = option->arg && !strcmp (option->arg, "0");
+	  break;
Index: gcc/doc/invoke.texi
--- gcc/doc/invoke.texi	(revision 275454)
+++ gcc/doc/invoke.texi	(working copy)
@@ -10335,6 +10335,14 @@ conflicting translation units.  Specific
 precedence; and for example @option{-ffp-contract=off} takes precedence
 over @option{-ffp-contract=fast}.  You can override them at link time.
+To enable debug info generation you need to supply @option{-g} at
+compile-time.  If any of the input files at link time were built
+with debug info generation enabled the link will enable debug info
+generation as well.  Any elaborate debug info settings
+like the dwarf level @option{-gdwarf-5} need to be explicitely repeated
+at the linker command line and mixing different settings in different
+translation units is discouraged.
 If LTO encounters objects with C linkage declared with incompatible
 types in separate translation units to be linked together (undefined
 behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]