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]

Reproducible gcc builds, gfortran, and -grecord-gcc-switches

The default setting of -grecord-gcc-switches recently changed from 0 to 1:

    2012-04-25  Jakub Jelinek  <>

        * common.opt (flag_debug_types_section): Default to 0.
        (dwarf_record_gcc_switches): Default to 1.

Because of this, by default all objects in libraries built as part of
gcc now have driver command line options stored in their debug_str
section.  For C and C++ that's not an issue.  However, Fortran has a
special undocumented extra option created by its specs, "-cpp=%g.f90".
 As a result all the object files in libgfortran.a now have a
temporary filename baked into their debug_str section.

This creates a problem for build and packaging systems that are
fanatical about binary reproducibility and checksums.  Temporary file
names differ on each compilation, so that two different builds of
libgfortran.a, and by extension all of gcc, will not be bit-identical.

Anyone else encountered this?  Bug or feature?  There are several
possible and relatively easy fixes -- any thoughts or feedback on
which fixes might be better, or worse?  Something for mainline or for
only google-specific branches?

Google UK Limited | Registered Office: Belgrave House, 76 Buckingham
Palace Road, London SW1W 9TQ | Registered in England Number: 3977902

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