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]

[PATCH] Fix DJGPP LTO with debug

This patch from clones the fixes done for
mingw and darwin to make LTO work together with -g in GCC 8+.

It's said to build OK in a djgpp configuration and I expect similar
results as for mingw and darwin.

The original application the reporter ran into the issue with isn't
fixed because of latent issues when combining a -g0 compile with
a -g link (the default for those targets).

Bootstrapped on x86_64-unknown-linux-gnu, ok for trunk and GCC 8 branch?

DJ, did you ever run the testsuite with a configuration that has LTO
enabled?  I don't see any djgpp results posted to gcc-testresults.
Quick googling doesn't yield anything useful with regarding on how to
do actual testing with a cross so I only built a i686-pc-msdosdjgpp
cross cc1/lto1 from x86_64-linux which went fine.


2018-07-27 Jan Willem Jagersma  <>

	PR target/86651
	* dwarf2out.c (dwarf2out_early_finish): Do not generate assembly in LTO
	mode for COFF targets.
	* defaults.h (TARGET_COFF): Define.
	* config/i386/djgpp.h (TARGET_ASM_LTO_START, TARGET_ASM_LTO_END,
	TARGET_COFF): Define.
	(i386_djgpp_asm_lto_start, i386_djgpp_asm_lto_end): Declare.
	* config/i386/djgpp.c (saved_debug_info_level): New static variable.
	(i386_djgpp_asm_lto_start, i386_djgpp_asm_lto_end): New functions.

diff --git a/gcc/config/i386/djgpp.c b/gcc/config/i386/djgpp.c
index f168eed6f06..d187c3a7452 100644
--- a/gcc/config/i386/djgpp.c
+++ b/gcc/config/i386/djgpp.c
@@ -47,3 +47,20 @@ i386_djgpp_asm_named_section(const char *name, unsigned int flags,
   fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
+/* Kludge because of missing COFF support for early LTO debug.  */
+static enum debug_info_levels saved_debug_info_level;
+i386_djgpp_asm_lto_start (void)
+  saved_debug_info_level = debug_info_level;
+  debug_info_level = DINFO_LEVEL_NONE;
+i386_djgpp_asm_lto_end (void)
+  debug_info_level = saved_debug_info_level;
diff --git a/gcc/config/i386/djgpp.h b/gcc/config/i386/djgpp.h
index 01774cea4d6..dd8c71b833a 100644
--- a/gcc/config/i386/djgpp.h
+++ b/gcc/config/i386/djgpp.h
@@ -157,8 +157,19 @@ along with GCC; see the file COPYING3.  If not see
+#define TARGET_COFF 1
+/* Kludge because of missing COFF support for early LTO debug.  */
+#define TARGET_ASM_LTO_START i386_djgpp_asm_lto_start
+#define TARGET_ASM_LTO_END i386_djgpp_asm_lto_end
 /* Function protypes for gcc/i386/djgpp.c */
 i386_djgpp_asm_named_section(const char *name, unsigned int flags,
 			     tree decl);
+void i386_djgpp_asm_lto_start (void);
+void i386_djgpp_asm_lto_end (void);
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 78a08a33f12..9035b333be8 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1282,6 +1282,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define TARGET_PECOFF 0
+#ifndef TARGET_COFF
+#define TARGET_COFF 0
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 8377cbc5dd1..c75aadbaa2c 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -31938,10 +31938,10 @@ dwarf2out_early_finish (const char *filename)
   /* Do not generate DWARF assembler now when not producing LTO bytecode.  */
   if ((!flag_generate_lto && !flag_generate_offload)
-      /* FIXME: Disable debug info generation for PE-COFF targets since the
+      /* FIXME: Disable debug info generation for (PE-)COFF targets since the
 	 copy_lto_debug_sections operation of the simple object support in
 	 libiberty is not implemented for them yet.  */
-      || TARGET_PECOFF)
   /* Now as we are going to output for LTO initialize sections and labels

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