Bug#777753: [Reproducible-builds] Bug#777753: gcc: LTO produces unreproducible debug information

2015-02-24 Thread conchur
tags 53 + fixed-upstream
thanks

Backport for 4.9.x: 
https://gcc.gnu.org/viewcvs/gcc?view=revisionrevision=220935
Backport for 4.8.x: 
https://gcc.gnu.org/viewcvs/gcc?view=revisionrevision=220938

Versions including the fix: 4.8.5, 4.9.3, 5.0


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#777753: [Reproducible-builds] Bug#777753: gcc: LTO produces unreproducible debug information

2015-02-18 Thread conchur
 I have to correct my last statement. It is still necessary to add
 -flto-partition=none when using -flto in a package. My earlier statement
 came from the wrong understanding of buildid as explained in the gcc bug [3].

A new patch [4] was submitted by Richard Biener. Together these patches [1,2,3]
were enough to fix all my testcases and at least build some of the affected
packages reproducible (I haven't tested all of them). 

-flto-partition=none wasn't necessary anymore in my tests

The gcc-4.9 patch used for this test is attached.

[1] https://gcc.gnu.org/viewcvs/gcc?view=revisionrevision=220678
[2] https://gcc.gnu.org/viewcvs/gcc?view=revisionrevision=220613
[3] https://gcc.gnu.org/viewcvs/gcc?view=revisionrevision=220735
[4] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65015#c22diff -u gcc-4.9-4.9.2/debian/rules.patch gcc-4.9-4.9.2/debian/rules.patch
--- gcc-4.9-4.9.2/debian/rules.patch
+++ gcc-4.9-4.9.2/debian/rules.patch
@@ -232,6 +232,7 @@
 	sys-auxv-header \
 	libcilkrts-targets \
 	go-use-gold \
+	drop_opt \
 
 ifeq ($(with_softfloat),yes)
   debian_patches += arm-multilib-soft-float
only in patch2:
unchanged:
--- gcc-4.9-4.9.2.orig/debian/patches/drop_opt.diff
+++ gcc-4.9-4.9.2/debian/patches/drop_opt.diff
@@ -0,0 +1,46 @@
+Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65015
+
+--- a/src/gcc/dwarf2out.c
 b/src/gcc/dwarf2out.c
+@@ -19196,6 +19196,9 @@ gen_producer_string (void)
+   case OPT__sysroot_:
+   case OPT_nostdinc:
+   case OPT_nostdinc__:
++  case OPT_fpreprocessed:
++  case OPT_fltrans_output_list_:
++  case OPT_fresolution_:
+ 	/* Ignore these.  */
+ 	continue;
+   default:
+@@ -23984,8 +23987,13 @@ dwarf2out_finish (const char *filename)
+   gen_remaining_tmpl_value_param_die_attribute ();
+ 
+   /* Add the name for the main input file now.  We delayed this from
+- dwarf2out_init to avoid complications with PCH.  */
+-  add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
++ dwarf2out_init to avoid complications with PCH.
++ For LTO produced units use a fixed artificial name to avoid
++ leaking tempfile names into the dwarf.  */
++  if (!in_lto_p)
++add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
++  else
++add_name_attribute (comp_unit_die (), artificial);
+   if (!IS_ABSOLUTE_PATH (filename) || targetm.force_at_comp_dir)
+ add_comp_dir_attribute (comp_unit_die ());
+   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
+--- a/src//gcc/varasm.c
 b/src//gcc/varasm.c
+@@ -6964,7 +6964,12 @@ default_file_start (void)
+ fputs (ASM_APP_OFF, asm_out_file);
+ 
+   if (targetm.asm_file_start_file_directive)
+-output_file_directive (asm_out_file, main_input_filename);
++{
++  if (in_lto_p)
++output_file_directive (asm_out_file, artificial);
++  else
++output_file_directive (asm_out_file, main_input_filename);
++}
+ }
+ 
+ /* This is a generic routine suitable for use as TARGET_ASM_FILE_END