X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Fparameters.cc;h=d677044a079dbbde43a9dd90ad52d5557a6ff5e0;hb=2da4b788f7a80ed9589d0e8856584e9dfa2813ff;hp=7fc5730ee732134382ed61a8afa6f73855dddcc4;hpb=b490c0bbaf81fb741c6751eff30082883343e2ff;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/parameters.cc b/gold/parameters.cc index 7fc5730ee7..d677044a07 100644 --- a/gold/parameters.cc +++ b/gold/parameters.cc @@ -1,6 +1,6 @@ // parameters.cc -- general parameters for a link using gold -// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2006-2020 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -125,8 +125,12 @@ Parameters::set_target_once(Target* target) { gold_assert(this->target_ == NULL); this->target_ = target; + target->select_as_default_target(); if (this->options_valid()) - this->check_target_endianness(); + { + this->check_target_endianness(); + this->check_rodata_segment(); + } } // Clear the target, for testing. @@ -212,23 +216,29 @@ 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")); } } +void +Parameters::check_rodata_segment() +{ + if (this->options().user_set_Trodata_segment() + && !this->options().rosegment() + && !this->target().isolate_execinstr()) + gold_error(_("-Trodata-segment is meaningless without --rosegment")); +} + // Return the name of the entry symbol. const char* Parameters::entry() const { const char* ret = this->options().entry(); - if (ret == NULL) - { - // FIXME: Need to support target specific entry symbol. - ret = "_start"; - } + if (ret == NULL && parameters->target_valid()) + ret = parameters->target().entry_symbol_name(); return ret; } @@ -288,7 +298,6 @@ void set_parameters_target(Target* target) { static_parameters.set_target(target); - target->select_as_default_target(); } void @@ -352,7 +361,8 @@ 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,