public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [gold patch] Incremental 25/25: Add --incremental-startup-unchanged option
@ 2011-06-01 22:53 Cary Coutant
  2011-06-01 23:01 ` Cary Coutant
  0 siblings, 1 reply; 3+ messages in thread
From: Cary Coutant @ 2011-06-01 22:53 UTC (permalink / raw)
  To: Ian Lance Taylor, Binutils

[-- Attachment #1: Type: text/plain, Size: 1332 bytes --]

GCC adds a few startup files at the beginning of the link command, and
-Wl,--incremental-unchanged options can't be placed in front of them.
In distributed build systems where those startup files may not even be
staged if they haven't changed, or where the timestamps might not be
reliable, it's useful to be able to claim that those "startup" files
are all unchanged. This patch adds a --incremental-startup-unchanged
option, which provides the disposition for all files that precede it
(or the first --incremental-changed/-unchanged/-unknown option).

Tested on x86_64 with strace, to ensure that there are no stat() calls
to the startup files.

-cary


2011-06-01 Cary Coutant  <ccoutant@google.com>

	* gold/incremental.cc (Sized_incremental_binary::do_file_has_changed):
	Check disposition for startup file.
	(Incremental_inputs::report_command_line): Ignore
	--incremental-startup-unchanged option.
	* gold/options.cc
	(General_options::parse_incremental_startup_unchanged): New function.
	(General_options::General_options): Initialize new data member.
	* gold/options.h (Incremental_disposition): Add INCREMENTAL_STARTUP.
	(General_options): Add --incremental-startup-unchanged option.
	(General_options::incremental_startup_disposition): New function.
	(General_options::incremental_startup_disposition_): New data member.

[-- Attachment #2: incr-patch-25.txt --]
[-- Type: text/plain, Size: 5236 bytes --]

Patch 25: Add --incremental-startup-unchanged option.


2011-06-01 Cary Coutant  <ccoutant@google.com>

	* gold/incremental.cc (Sized_incremental_binary::do_file_has_changed):
	Check disposition for startup file.
	(Incremental_inputs::report_command_line): Ignore
	--incremental-startup-unchanged option.
	* gold/options.cc
	(General_options::parse_incremental_startup_unchanged): New function.
	(General_options::General_options): Initialize new data member.
	* gold/options.h (Incremental_disposition): Add INCREMENTAL_STARTUP.
	(General_options): Add --incremental-startup-unchanged option.
	(General_options::incremental_startup_disposition): New function.
	(General_options::incremental_startup_disposition_): New data member.


diff --git a/gold/incremental.cc b/gold/incremental.cc
index 89af75d..7fc56de 100644
--- a/gold/incremental.cc
+++ b/gold/incremental.cc
@@ -460,6 +460,12 @@ Sized_incremental_binary<size, big_endian>::do_file_has_changed(
   if (input_argument != NULL)
     disp = input_argument->file().options().incremental_disposition();
 
+  // For files at the beginning of the command line (i.e., those added
+  // implicitly by gcc), check whether the --incremental-startup-unchanged
+  // option was used.
+  if (disp == INCREMENTAL_STARTUP)
+    disp = parameters->options().incremental_startup_disposition();
+
   if (disp != INCREMENTAL_CHECK)
     return disp == INCREMENTAL_CHANGED;
 
@@ -938,6 +944,7 @@ Incremental_inputs::report_command_line(int argc, const char* const* argv)
 	  || strcmp(argv[i], "--incremental-changed") == 0
 	  || strcmp(argv[i], "--incremental-unchanged") == 0
 	  || strcmp(argv[i], "--incremental-unknown") == 0
+	  || strcmp(argv[i], "--incremental-startup-unchanged") == 0
 	  || is_prefix_of("--incremental-base=", argv[i])
 	  || is_prefix_of("--incremental-patch=", argv[i])
 	  || is_prefix_of("--debug=", argv[i]))
diff --git a/gold/options.cc b/gold/options.cc
index b41daa2..1a4e50b 100644
--- a/gold/options.cc
+++ b/gold/options.cc
@@ -380,6 +380,14 @@ General_options::parse_incremental_unknown(const char*, const char*,
 }
 
 void
+General_options::parse_incremental_startup_unchanged(const char*, const char*,
+						     Command_line*)
+{
+  this->implicit_incremental_ = true;
+  this->incremental_startup_disposition_ = INCREMENTAL_UNCHANGED;
+}
+
+void
 General_options::parse_library(const char*, const char* arg,
                                Command_line* cmdline)
 {
@@ -892,7 +900,8 @@ General_options::General_options()
     plugins_(NULL),
     dynamic_list_(),
     incremental_mode_(INCREMENTAL_OFF),
-    incremental_disposition_(INCREMENTAL_CHECK),
+    incremental_disposition_(INCREMENTAL_STARTUP),
+    incremental_startup_disposition_(INCREMENTAL_CHECK),
     implicit_incremental_(false),
     excluded_libs_(),
     symbols_to_retain_(),
diff --git a/gold/options.h b/gold/options.h
index f261622..6c2a4e1 100644
--- a/gold/options.h
+++ b/gold/options.h
@@ -63,6 +63,11 @@ class Script_info;
 
 enum Incremental_disposition
 {
+  // Startup files that appear before the first disposition option.
+  // These will default to INCREMENTAL_CHECK unless the
+  // --incremental-startup-unchanged option is given.
+  // (For files added implicitly by gcc before any user options.)
+  INCREMENTAL_STARTUP,
   // Determine the status from the timestamp (default).
   INCREMENTAL_CHECK,
   // Assume the file changed from the previous build.
@@ -810,6 +815,10 @@ class General_options
   DEFINE_special(incremental_unknown, options::TWO_DASHES, '\0',
                  N_("Use timestamps to check files (default)"), NULL);
 
+  DEFINE_special(incremental_startup_unchanged, options::TWO_DASHES, '\0',
+                 N_("Assume startup files unchanged "
+		    "(files preceding this option)"), NULL);
+
   DEFINE_percent(incremental_patch, options::TWO_DASHES, '\0', 10,
 		 N_("Amount of extra space to allocate for patches"),
 		 N_("PERCENT"));
@@ -1326,6 +1335,12 @@ class General_options
   incremental_disposition() const
   { return this->incremental_disposition_; }
 
+  // The disposition to use for startup files (those that precede the
+  // first --incremental-changed, etc. option).
+  Incremental_disposition
+  incremental_startup_disposition() const
+  { return this->incremental_startup_disposition_; }
+
   // Return true if S is the name of a library excluded from automatic
   // symbol export.
   bool
@@ -1443,9 +1458,12 @@ class General_options
   // --incremental-unchanged or --incremental-unknown option.  The
   // value may change as we proceed parsing the command line flags.
   Incremental_disposition incremental_disposition_;
+  // The disposition to use for startup files (those marked
+  // INCREMENTAL_STARTUP).
+  Incremental_disposition incremental_startup_disposition_;
   // Whether we have seen one of the options that require incremental
-  // build (--incremental-changed, --incremental-unchanged or
-  // --incremental-unknown)
+  // build (--incremental-changed, --incremental-unchanged,
+  // --incremental-unknown, or --incremental-startup-unchanged).
   bool implicit_incremental_;
   // Libraries excluded from automatic export, via --exclude-libs.
   Unordered_set<std::string> excluded_libs_;

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gold patch] Incremental 25/25: Add --incremental-startup-unchanged option
  2011-06-01 22:53 [gold patch] Incremental 25/25: Add --incremental-startup-unchanged option Cary Coutant
@ 2011-06-01 23:01 ` Cary Coutant
  2011-07-05 20:57   ` Ian Lance Taylor
  0 siblings, 1 reply; 3+ messages in thread
From: Cary Coutant @ 2011-06-01 23:01 UTC (permalink / raw)
  To: Ian Lance Taylor, Binutils

> GCC adds a few startup files at the beginning of the link command, and
> -Wl,--incremental-unchanged options can't be placed in front of them.
> In distributed build systems where those startup files may not even be
> staged if they haven't changed, or where the timestamps might not be
> reliable, it's useful to be able to claim that those "startup" files
> are all unchanged. This patch adds a --incremental-startup-unchanged
> option, which provides the disposition for all files that precede it
> (or the first --incremental-changed/-unchanged/-unknown option).
>
> Tested on x86_64 with strace, to ensure that there are no stat() calls
> to the startup files.

Oops, forgot to remove the "gold/" from the ChangeLog entries...

-cary

2011-06-01 Cary Coutant  <ccoutant@google.com>

	* incremental.cc (Sized_incremental_binary::do_file_has_changed):
	Check disposition for startup file.
	(Incremental_inputs::report_command_line): Ignore
	--incremental-startup-unchanged option.
	* options.cc (General_options::parse_incremental_startup_unchanged):
	New function.
	(General_options::General_options): Initialize new data member.
	* options.h (Incremental_disposition): Add INCREMENTAL_STARTUP.
	(General_options): Add --incremental-startup-unchanged option.
	(General_options::incremental_startup_disposition): New function.
	(General_options::incremental_startup_disposition_): New data member.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gold patch] Incremental 25/25: Add --incremental-startup-unchanged option
  2011-06-01 23:01 ` Cary Coutant
@ 2011-07-05 20:57   ` Ian Lance Taylor
  0 siblings, 0 replies; 3+ messages in thread
From: Ian Lance Taylor @ 2011-07-05 20:57 UTC (permalink / raw)
  To: Cary Coutant; +Cc: Binutils

Cary Coutant <ccoutant@google.com> writes:

> 2011-06-01 Cary Coutant  <ccoutant@google.com>
>
> 	* incremental.cc (Sized_incremental_binary::do_file_has_changed):
> 	Check disposition for startup file.
> 	(Incremental_inputs::report_command_line): Ignore
> 	--incremental-startup-unchanged option.
> 	* options.cc (General_options::parse_incremental_startup_unchanged):
> 	New function.
> 	(General_options::General_options): Initialize new data member.
> 	* options.h (Incremental_disposition): Add INCREMENTAL_STARTUP.
> 	(General_options): Add --incremental-startup-unchanged option.
> 	(General_options::incremental_startup_disposition): New function.
> 	(General_options::incremental_startup_disposition_): New data member.

This is OK.

Thanks.

Ian

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-07-05 20:56 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-01 22:53 [gold patch] Incremental 25/25: Add --incremental-startup-unchanged option Cary Coutant
2011-06-01 23:01 ` Cary Coutant
2011-07-05 20:57   ` Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).