+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>
 
 
 #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 " #"
 
 
                                                    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);
 
     }
 }
 
+/* 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.  */
 
 
   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
 
       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,