re PR target/85238 (lto-wrapper: fatal error: simple_object_copy_lto_debug_sections...
authorEric Botcazou <ebotcazou@adacore.com>
Thu, 12 Apr 2018 14:18:17 +0000 (14:18 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 12 Apr 2018 14:18:17 +0000 (14:18 +0000)
PR target/85238
* lto-wrapper.c (debug_objcopy): Open the files in binary mode.
* dwarf2out.c (dwarf2out_early_finish): Do not generate assembly in LTO
mode for PE-COFF targets.
* config/i386/i386-protos.h (i386_pe_asm_lto_start): Declare.
(i386_pe_asm_lto_end): Likewise.
* config/i386/cygming.h (TARGET_ASM_LTO_START): Define.
(TARGET_ASM_LTO_END): Likewise.
* config/i386/winnt.c (saved_debug_info_level): New static variable.
(i386_pe_asm_lto_start): New function.
(i386_pe_asm_lto_end): Likewise.

From-SVN: r259347

gcc/ChangeLog
gcc/config/i386/cygming.h
gcc/config/i386/i386-protos.h
gcc/config/i386/winnt.c
gcc/dwarf2out.c
gcc/lto-wrapper.c

index 798469f28a4004483eb4255b8e6f727306a52791..25bcfa906caa7a6343cba566d945f87b289a9f8d 100644 (file)
@@ -1,3 +1,17 @@
+2018-04-12  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR target/85238
+       * lto-wrapper.c (debug_objcopy): Open the files in binary mode.
+       * dwarf2out.c (dwarf2out_early_finish): Do not generate assembly in LTO
+       mode for PE-COFF targets.
+       * config/i386/i386-protos.h (i386_pe_asm_lto_start): Declare.
+       (i386_pe_asm_lto_end): Likewise.
+       * config/i386/cygming.h (TARGET_ASM_LTO_START): Define.
+       (TARGET_ASM_LTO_END): Likewise.
+       * config/i386/winnt.c (saved_debug_info_level): New static variable.
+       (i386_pe_asm_lto_start): New function.
+       (i386_pe_asm_lto_end): Likewise.
+
 2018-04-12  Cesar Philippidis  <cesar@codesourcery.com>
            Richard Biener  <rguenther@suse.de>
 
index 21b0f438a9a0a3ff2544391a639b498fcdda1d2b..1d358858106137949df8a6c60e5190e8adc847d1 100644 (file)
@@ -356,6 +356,12 @@ do {                                               \
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END i386_pe_file_end
 
+/* Kludge because of missing PE-COFF support for early LTO debug.  */
+#undef  TARGET_ASM_LTO_START
+#define TARGET_ASM_LTO_START i386_pe_asm_lto_start
+#undef  TARGET_ASM_LTO_END
+#define TARGET_ASM_LTO_END i386_pe_asm_lto_end
+
 #undef ASM_COMMENT_START
 #define ASM_COMMENT_START " #"
 
index ef7c818986f08c35b371adc178421b6b9c4ce8f8..40756f5973aefcfbcc03cfab18ea89a1cd078c99 100644 (file)
@@ -254,6 +254,8 @@ extern void i386_pe_asm_output_aligned_decl_common (FILE *, tree,
                                                    HOST_WIDE_INT,
                                                    HOST_WIDE_INT);
 extern void i386_pe_file_end (void);
+extern void i386_pe_asm_lto_start (void);
+extern void i386_pe_asm_lto_end (void);
 extern void i386_pe_start_function (FILE *, const char *, tree);
 extern void i386_pe_end_function (FILE *, const char *, tree);
 extern void i386_pe_end_cold_function (FILE *, const char *, tree);
index d5c256b23ceb811622a098ccbaedac77466968de..3a857f9102ac8d13d0de3f7ccdb5262bdc0a2b27 100644 (file)
@@ -808,6 +808,23 @@ i386_pe_file_end (void)
     }
 }
 
+/* Kludge because of missing PE-COFF support for early LTO debug.  */
+
+static enum debug_info_levels saved_debug_info_level;
+
+void
+i386_pe_asm_lto_start (void)
+{
+  saved_debug_info_level = debug_info_level;
+  debug_info_level = DINFO_LEVEL_NONE;
+}
+
+void
+i386_pe_asm_lto_end (void)
+{
+  debug_info_level = saved_debug_info_level;
+}
+
 \f
 /* x64 Structured Exception Handling unwind info.  */
 
index f52ec45ec73636271c26bffd2e344882aa7b5d09..620e66986be6c39b9c6b2184d0d94444ddf7fa57 100644 (file)
@@ -31820,7 +31820,11 @@ dwarf2out_early_finish (const char *filename)
   early_dwarf_finished = true;
 
   /* Do not generate DWARF assembler now when not producing LTO bytecode.  */
-  if (!flag_generate_lto && !flag_generate_offload)
+  if ((!flag_generate_lto && !flag_generate_offload)
+      /* 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)
     return;
 
   /* Now as we are going to output for LTO initialize sections and labels
index f7f6f6b5b3aadad653530806c7552020422a814a..f1f059cbfc0f58b4175bd1baa62dbc163488eb97 100644 (file)
@@ -983,7 +983,7 @@ debug_objcopy (const char *infile)
       infile = fname;
       inoff = (off_t) loffset;
     }
-  int infd = open (infile, O_RDONLY);
+  int infd = open (infile, O_RDONLY | O_BINARY);
   if (infd == -1)
     return NULL;
   simple_object_read *inobj = simple_object_start_read (infd, inoff,