diff options
-rw-r--r-- | gold/ChangeLog | 14 | ||||
-rw-r--r-- | gold/incremental.cc | 7 | ||||
-rw-r--r-- | gold/options.cc | 11 | ||||
-rw-r--r-- | gold/options.h | 22 |
4 files changed, 51 insertions, 3 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 536dea2..192d6f6 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,19 @@ 2011-07-06 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. + +2011-07-06 Cary Coutant <ccoutant@google.com> + * incremental.cc (Sized_incremental_binary::setup_readers): Pass input file index to Script_info ctor. (Sized_incremental_binary::do_file_has_changed): Find the diff --git a/gold/incremental.cc b/gold/incremental.cc index 0988ed4..710effc 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 05d6f88..16699aa 100644 --- a/gold/options.cc +++ b/gold/options.cc @@ -398,6 +398,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) { @@ -910,7 +918,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 c73bd45..230900a 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. @@ -822,6 +827,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")); @@ -1342,6 +1351,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 @@ -1459,9 +1474,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_; |