2013-01-16 Sriraman Tallam <tmsriram@google.com>
[platform/upstream/binutils.git] / gold / parameters.cc
index 0384dd6..d69b62c 100644 (file)
@@ -1,6 +1,7 @@
 // parameters.cc -- general parameters for a link using gold
 
-// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
+// Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -64,7 +65,7 @@ Set_parameters_target_once set_parameters_target_once(&static_parameters);
 // Class Parameters.
 
 Parameters::Parameters()
-   : errors_(NULL), options_(NULL), target_(NULL),
+   : errors_(NULL), timer_(NULL), options_(NULL), target_(NULL),
      doing_static_link_valid_(false), doing_static_link_(false),
      debug_(0), incremental_mode_(General_options::INCREMENTAL_OFF),
      set_parameters_target_once_(&set_parameters_target_once)
@@ -79,6 +80,13 @@ Parameters::set_errors(Errors* errors)
 }
 
 void
+Parameters::set_timer(Timer* timer)
+{
+  gold_assert(this->timer_ == NULL);
+  this->timer_ = timer;
+}
+
+void
 Parameters::set_options(const General_options* options)
 {
   gold_assert(!this->options_valid());
@@ -205,7 +213,7 @@ Parameters::check_target_endianness()
          gold_assert(endianness == General_options::ENDIANNESS_LITTLE);
          big_endian = false;;
        }
-      
+
       if (this->target().is_big_endian() != big_endian)
        gold_error(_("input file does not match -EB/EL option"));
     }
@@ -270,6 +278,10 @@ set_parameters_errors(Errors* errors)
 { static_parameters.set_errors(errors); }
 
 void
+set_parameters_timer(Timer* timer)
+{ static_parameters.set_timer(timer); }
+
+void
 set_parameters_options(const General_options* options)
 { static_parameters.set_options(options); }
 
@@ -341,12 +353,19 @@ parameters_force_valid_target()
   else
     is_big_endian = GOLD_DEFAULT_BIG_ENDIAN;
 
-  Target* target = select_target(elfcpp::GOLD_DEFAULT_MACHINE,
+  Target* target = select_target(NULL, 0,
+                                elfcpp::GOLD_DEFAULT_MACHINE,
                                 GOLD_DEFAULT_SIZE,
                                 is_big_endian,
                                 elfcpp::GOLD_DEFAULT_OSABI,
                                 0);
-  gold_assert(target != NULL);
+
+  if (target == NULL)
+    {
+      gold_assert(is_big_endian != GOLD_DEFAULT_BIG_ENDIAN);
+      gold_fatal(_("no supported target for -EB/-EL option"));
+    }
+
   set_parameters_target(target);
 }