Commit | Line | Data |
---|---|---|
7e1edb90 ILT |
1 | // parameters.cc -- general parameters for a link using gold |
2 | ||
6cb15b7f ILT |
3 | // Copyright 2006, 2007 Free Software Foundation, Inc. |
4 | // Written by Ian Lance Taylor <iant@google.com>. | |
5 | ||
6 | // This file is part of gold. | |
7 | ||
8 | // This program is free software; you can redistribute it and/or modify | |
9 | // it under the terms of the GNU General Public License as published by | |
10 | // the Free Software Foundation; either version 3 of the License, or | |
11 | // (at your option) any later version. | |
12 | ||
13 | // This program is distributed in the hope that it will be useful, | |
14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | // GNU General Public License for more details. | |
17 | ||
18 | // You should have received a copy of the GNU General Public License | |
19 | // along with this program; if not, write to the Free Software | |
20 | // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | |
21 | // MA 02110-1301, USA. | |
22 | ||
7e1edb90 ILT |
23 | #include "gold.h" |
24 | ||
25 | #include "options.h" | |
96803768 | 26 | #include "target.h" |
7e1edb90 ILT |
27 | #include "parameters.h" |
28 | ||
29 | namespace gold | |
30 | { | |
31 | ||
32 | // Initialize the parameters from the options. | |
33 | ||
3c2fafa5 | 34 | Parameters::Parameters(Errors* errors) |
c7912668 | 35 | : errors_(errors), threads_(false), output_file_name_(NULL), |
3c2fafa5 | 36 | output_file_type_(OUTPUT_INVALID), sysroot_(), |
e2827e5f | 37 | strip_(STRIP_INVALID), allow_shlib_undefined_(false), |
a2b1aa12 | 38 | symbolic_(false), demangle_(false), detect_odr_violations_(false), |
c7912668 | 39 | optimization_level_(0), export_dynamic_(false), debug_(0), |
ad2d6943 | 40 | is_doing_static_link_valid_(false), doing_static_link_(false), |
cd72c291 ILT |
41 | is_target_valid_(false), target_(NULL), size_(0), is_big_endian_(false), |
42 | max_page_size_(0), common_page_size_(0) | |
7e1edb90 | 43 | { |
3c2fafa5 ILT |
44 | } |
45 | ||
46 | // Set fields from the command line options. | |
47 | ||
48 | void | |
49 | Parameters::set_from_options(const General_options* options) | |
50 | { | |
c7912668 | 51 | this->threads_ = options->threads(); |
3c2fafa5 ILT |
52 | this->output_file_name_ = options->output_file_name(); |
53 | this->sysroot_ = options->sysroot(); | |
e2827e5f | 54 | this->allow_shlib_undefined_ = options->allow_shlib_undefined(); |
45aa233b | 55 | this->symbolic_ = options->Bsymbolic(); |
a2b1aa12 | 56 | this->demangle_ = options->demangle(); |
a55ce7fe | 57 | this->detect_odr_violations_ = options->detect_odr_violations(); |
45aa233b | 58 | this->optimization_level_ = options->optimize(); |
3c2fafa5 | 59 | this->export_dynamic_ = options->export_dynamic(); |
c7912668 | 60 | this->debug_ = options->debug(); |
3c2fafa5 | 61 | |
45aa233b | 62 | if (options->shared()) |
7e1edb90 | 63 | this->output_file_type_ = OUTPUT_SHARED; |
45aa233b | 64 | else if (options->relocatable()) |
7e1edb90 ILT |
65 | this->output_file_type_ = OUTPUT_OBJECT; |
66 | else | |
67 | this->output_file_type_ = OUTPUT_EXECUTABLE; | |
9e2dcb77 ILT |
68 | |
69 | if (options->strip_all()) | |
70 | this->strip_ = STRIP_ALL; | |
71 | else if (options->strip_debug()) | |
72 | this->strip_ = STRIP_DEBUG; | |
02d2ba74 ILT |
73 | else if (options->strip_debug_gdb()) |
74 | this->strip_ = STRIP_DEBUG_UNUSED_BY_GDB; | |
9e2dcb77 ILT |
75 | else |
76 | this->strip_ = STRIP_NONE; | |
3c2fafa5 | 77 | |
cd72c291 ILT |
78 | this->max_page_size_ = options->max_page_size(); |
79 | this->common_page_size_ = options->common_page_size(); | |
80 | ||
3c2fafa5 | 81 | this->options_valid_ = true; |
7e1edb90 ILT |
82 | } |
83 | ||
b3b74ddc ILT |
84 | // Set whether we are doing a static link. |
85 | ||
86 | void | |
87 | Parameters::set_doing_static_link(bool doing_static_link) | |
88 | { | |
89 | this->doing_static_link_ = doing_static_link; | |
90 | this->is_doing_static_link_valid_ = true; | |
91 | } | |
92 | ||
96803768 | 93 | // Set the target. |
9025d29d ILT |
94 | |
95 | void | |
96803768 | 96 | Parameters::set_target(Target* target) |
9025d29d | 97 | { |
96803768 | 98 | if (!this->is_target_valid_) |
9025d29d | 99 | { |
96803768 ILT |
100 | this->target_ = target; |
101 | this->size_ = target->get_size(); | |
102 | this->is_big_endian_ = target->is_big_endian(); | |
103 | this->is_target_valid_ = true; | |
9025d29d ILT |
104 | } |
105 | else | |
96803768 | 106 | gold_assert(target == this->target_); |
9025d29d ILT |
107 | } |
108 | ||
109 | // Our local version of the variable, which is not const. | |
110 | ||
111 | static Parameters* static_parameters; | |
112 | ||
7e1edb90 ILT |
113 | // The global variable. |
114 | ||
115 | const Parameters* parameters; | |
116 | ||
117 | // Initialize the global variable. | |
118 | ||
119 | void | |
3c2fafa5 ILT |
120 | initialize_parameters(Errors* errors) |
121 | { | |
122 | parameters = static_parameters = new Parameters(errors); | |
123 | } | |
124 | ||
125 | // Set values from the options. | |
126 | ||
127 | void | |
128 | set_parameters_from_options(const General_options* options) | |
7e1edb90 | 129 | { |
3c2fafa5 | 130 | static_parameters->set_from_options(options); |
9025d29d ILT |
131 | } |
132 | ||
b3b74ddc ILT |
133 | // Set whether we are doing a static link. |
134 | ||
135 | void | |
136 | set_parameters_doing_static_link(bool doing_static_link) | |
137 | { | |
138 | static_parameters->set_doing_static_link(doing_static_link); | |
139 | } | |
140 | ||
96803768 | 141 | // Set the target. |
b3b74ddc | 142 | |
9025d29d | 143 | void |
96803768 | 144 | set_parameters_target(Target* target) |
9025d29d | 145 | { |
96803768 | 146 | static_parameters->set_target(target); |
7e1edb90 ILT |
147 | } |
148 | ||
149 | } // End namespace gold. |