From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15224 invoked by alias); 16 Aug 2012 16:59:29 -0000 Received: (qmail 15208 invoked by uid 22791); 16 Aug 2012 16:59:26 -0000 X-SWARE-Spam-Status: No, hits=-4.7 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-wg0-f51.google.com (HELO mail-wg0-f51.google.com) (74.125.82.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 16 Aug 2012 16:59:11 +0000 Received: by wgbed3 with SMTP id ed3so1985293wgb.8 for ; Thu, 16 Aug 2012 09:59:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=FoBAbpT4Odr5WWgmwpefKhXxPebVrBkY5B8l98B+ywo=; b=Xp4KN2j9xKBcKQoh9nHX0aSTI7ypFXEuAznBi1ke9cHsql5pAlUisnyvQS4Q3coWqs xjYC7udif4zb5Olj73M/k61wXrW+dXJSBNsrMm6zxKBXGiCYbh0+10Nq/mIlVra/BRWQ VFBSVzzuYHbinBfVDD/q1AeXkWim1J5pYpJEZPLoufYl9krsJb1iwyosFledG8WNTthl SyZY/2N2spyjRg+4mFXr0IgyTb04DxWqlT77m+u4kPkKPOP1OLU+lt+1M3KebjgRUvpy NtHnEoMUJj82ywgNPMfxjDSSQLXwoS5O0frPyAc+HfGW6jeFYBE/NTOSgIEf71TvtWQ6 AxcQ== Received: by 10.180.107.2 with SMTP id gy2mr7588696wib.2.1345136349999; Thu, 16 Aug 2012 09:59:09 -0700 (PDT) MIME-Version: 1.0 Received: by 10.180.107.2 with SMTP id gy2mr7588677wib.2.1345136349897; Thu, 16 Aug 2012 09:59:09 -0700 (PDT) Received: by 10.216.65.145 with HTTP; Thu, 16 Aug 2012 09:59:09 -0700 (PDT) In-Reply-To: References: Date: Thu, 16 Aug 2012 16:59:00 -0000 Message-ID: Subject: Re: Reproducible gcc builds, gfortran, and -grecord-gcc-switches From: Simon Baldwin To: Michael Matz , gcc-patches@gcc.gnu.org Cc: Gerald Pfeifer Content-Type: text/plain; charset=ISO-8859-1 X-System-Of-Record: true X-Gm-Message-State: ALoCoQl+/4DV57Om5OmmnOaV38rZl9Vv+jP1W8eCNsake1zhlwkGSthxIZ/6FnP/JCbFnpfPJd/cjZg9gGQiwWjADSfbBudmhaqQYN487ZaxMIgBRIGg84Vhha+s7uuZp7OSKsvY1F3B9r9eP88Hqgy4MnGdPqfEghHCxUzSroRxkDyj5lB8RHhUTIeZI7rjkukjrvlMd+pJ X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-08/txt/msg01080.txt.bz2 On 16 August 2012 16:40, Michael Matz wrote: > > ,,, > > Do you have considered to use a new option flag (usable in the .opt files) > instead of a langhook? I.e. add a flag cl_dont_record to cl_option, a > string Norecord for the .opt files, some handling for it in > opt-functions.awk and the like? > > Adding lang-hooks used by debug producers make me twitch :) Okay. Below is an alternative approach. I've moved discussion to gcc-patches, since it's now more concrete than abstract. ---------- Omit OPT_cpp_ from the DWARF producer string in gfortran. Gfortran uses -cpp= 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= Tested for fortran (suppresses -cpp=...) and c (no effect). gcc/ChangeLog 2012-08-16 Simon Baldwin * dwarf2out.c (gen_producer_string): Omit command line switch if CL_NO_DWARF_RECORD flag set. * opts.c (print_specific_help): Add CL_NO_DWARF_RECORD handling. * opts.h (CL_NO_DWARF_RECORD): New. * opt-functions.awk (switch_flags): Add NoDwarfRecord. gcc/fortran/ChangeLog 2012-08-16 Simon Baldwin * lang.opt (-cpp=): Mark flag NoDwarfRecord. Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 190442) +++ gcc/dwarf2out.c (working copy) @@ -18101,6 +18101,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.c =================================================================== --- gcc/opts.c (revision 190442) +++ gcc/opts.c (working copy) @@ -1186,7 +1186,9 @@ print_specific_help (unsigned int includ { if (any_flags == 0) { - if (include_flags & CL_UNDOCUMENTED) + if (include_flags & CL_NO_DWARF_RECORD) + description = _("The following options are not recorded by DWARF"); + else if (include_flags & CL_UNDOCUMENTED) description = _("The following options are not documented"); else if (include_flags & CL_SEPARATE) description = _("The following options take separate arguments"); @@ -1292,7 +1294,7 @@ common_handle_option (struct gcc_options /* Walk along the argument string, parsing each word in turn. The format is: arg = [^]{word}[,{arg}] - word = {optimizers|target|warnings|undocumented| + word = {optimizers|target|warnings|undocumented|nodwarfrecord| params|common|} */ while (* a != 0) { @@ -1307,6 +1309,7 @@ common_handle_option (struct gcc_options { "target", CL_TARGET }, { "warnings", CL_WARNING }, { "undocumented", CL_UNDOCUMENTED }, + { "nodwarfrecord", CL_NO_DWARF_RECORD }, { "params", CL_PARAMS }, { "joined", CL_JOINED }, { "separate", CL_SEPARATE }, Index: gcc/opts.h =================================================================== --- gcc/opts.h (revision 190442) +++ 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 190442) +++ gcc/fortran/lang.opt (working copy) @@ -287,7 +287,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 190442) +++ 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