Reproducible gcc builds, gfortran, and -grecord-gcc-switches
Simon Baldwin
simonb@google.com
Fri Aug 24 11:09:00 GMT 2012
On 21 August 2012 17:18, Joseph S. Myers <joseph@codesourcery.com> wrote:
>
> On Tue, 21 Aug 2012, Simon Baldwin wrote:
>
> > Index: gcc/doc/options.texi
> > ===================================================================
> > --- gcc/doc/options.texi (revision 190535)
> > +++ gcc/doc/options.texi (working copy)
> > @@ -468,4 +468,8 @@ of @option{-@var{opt}}, if not explicitl
> > specify several different languages. Each @var{language} must have
> > been declared by an earlier @code{Language} record. @xref{Option file
> > format}.
> > +
> > +@item NoDWARFRecord
> > +The option is added to the list of those omitted from the producer
> > string
> > +written by @option{-grecord-gcc-switches}.
>
> Remove "added to the list of those" (which seems unnecessarily verbose).
>
> > +@item @samp{nodwarfrecord}
> > +Display only those options that are marked for addition to the list of
> > +options omitted from @option{-grecord-gcc-switches}.
>
> I don't think there's any need for special --help support for options with
> this flag; this flag is really an implementation detail. (Thus, I think
> all the opts.c changes are unnecessary.)
Thanks, revised and shorter version below. Please take another look when ready.
----------
Omit OPT_cpp_ from the DWARF producer string in gfortran.
Gfortran uses -cpp=<temporary file> internally, and with -grecord_gcc_switches
this command line switch is stored by default in object files. This causes
problems with build and packaging systems that care about gcc binary
reproducibility and file checksums; the temporary file is different on each
compiler invocation.
Fixed by adding a new opt marker NoDWARFRecord and associated flag, filtering
options for this this setting when writing the producer string, and setting
this flag for fortran -cpp=<temporary file>
Tested for fortran (suppresses -cpp=...) and c (no effect).
gcc/ChangeLog
2012-08-24 Simon Baldwin <simonb@google.com>
* dwarf2out.c (gen_producer_string): Omit command line switch if
CL_NO_DWARF_RECORD flag set.
* opts.h (CL_NO_DWARF_RECORD): New.
* opt-functions.awk (switch_flags): Add NoDWARFRecord.
* doc/options.texi: Document NoDWARFRecord option flag.
gcc/fortran/ChangeLog
2012-08-24 Simon Baldwin <simonb@google.com>
* lang.opt (-cpp=): Mark flag NoDWARFRecord.
Index: gcc/doc/options.texi
===================================================================
--- gcc/doc/options.texi (revision 190642)
+++ gcc/doc/options.texi (working copy)
@@ -468,4 +468,8 @@ of @option{-@var{opt}}, if not explicitl
specify several different languages. Each @var{language} must have
been declared by an earlier @code{Language} record. @xref{Option file
format}.
+
+@item NoDWARFRecord
+The option is omitted from the producer string written by
+@option{-grecord-gcc-switches}.
@end table
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c (revision 190642)
+++ gcc/dwarf2out.c (working copy)
@@ -18138,6 +18138,9 @@ gen_producer_string (void)
/* Ignore these. */
continue;
default:
+ if (cl_options[save_decoded_options[j].opt_index].flags
+ & CL_NO_DWARF_RECORD)
+ continue;
gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
== '-');
switch (save_decoded_options[j].canonical_option[0][1])
Index: gcc/opts.h
===================================================================
--- gcc/opts.h (revision 190642)
+++ gcc/opts.h (working copy)
@@ -145,6 +145,7 @@ extern const unsigned int cl_lang_count;
#define CL_JOINED (1U << 22) /* If takes joined argument. */
#define CL_SEPARATE (1U << 23) /* If takes a separate argument. */
#define CL_UNDOCUMENTED (1U << 24) /* Do not output with --help. */
+#define CL_NO_DWARF_RECORD (1U << 25) /* Do not add to producer string. */
/* Flags for an enumerated option argument. */
#define CL_ENUM_CANONICAL (1 << 0) /* Canonical for this value. */
Index: gcc/fortran/lang.opt
===================================================================
--- gcc/fortran/lang.opt (revision 190642)
+++ gcc/fortran/lang.opt (working copy)
@@ -295,7 +295,7 @@ Fortran Negative(nocpp)
Enable preprocessing
cpp=
-Fortran Joined Negative(nocpp) Undocumented
+Fortran Joined Negative(nocpp) Undocumented NoDWARFRecord
; Internal option generated by specs from -cpp.
nocpp
Index: gcc/opt-functions.awk
===================================================================
--- gcc/opt-functions.awk (revision 190642)
+++ gcc/opt-functions.awk (working copy)
@@ -103,6 +103,7 @@ function switch_flags (flags)
test_flag("JoinedOrMissing", flags, " | CL_JOINED") \
test_flag("Separate", flags, " | CL_SEPARATE") \
test_flag("Undocumented", flags, " | CL_UNDOCUMENTED") \
+ test_flag("NoDWARFRecord", flags, " | CL_NO_DWARF_RECORD") \
test_flag("Warning", flags, " | CL_WARNING") \
test_flag("Optimization", flags, " | CL_OPTIMIZATION")
sub( "^0 \\| ", "", result )
--
Google UK Limited | Registered Office: Belgrave House, 76 Buckingham
Palace Road, London SW1W 9TQ | Registered in England Number: 3977902
More information about the Gcc-patches
mailing list