diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/recordmcount.pl | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl index 1891cf9743fc..ee9e12676776 100755 --- a/scripts/recordmcount.pl +++ b/scripts/recordmcount.pl | |||
@@ -187,6 +187,36 @@ my $mcount_s = $dirname . "/.tmp_mc_" . $prefix . ".s"; | |||
187 | my $mcount_o = $dirname . "/.tmp_mc_" . $prefix . ".o"; | 187 | my $mcount_o = $dirname . "/.tmp_mc_" . $prefix . ".o"; |
188 | 188 | ||
189 | # | 189 | # |
190 | # --globalize-symbols came out in 2.17, we must test the version | ||
191 | # of objcopy, and if it is less than 2.17, then we can not | ||
192 | # record local functions. | ||
193 | my $use_locals = 01; | ||
194 | my $local_warn_once = 0; | ||
195 | my $found_version = 0; | ||
196 | |||
197 | open (IN, "$objcopy --version |") || die "error running $objcopy"; | ||
198 | while (<IN>) { | ||
199 | if (/objcopy.*\s(\d+)\.(\d+)/) { | ||
200 | my $major = $1; | ||
201 | my $minor = $2; | ||
202 | |||
203 | $found_version = 1; | ||
204 | if ($major < 2 || | ||
205 | ($major == 2 && $minor < 17)) { | ||
206 | $use_locals = 0; | ||
207 | } | ||
208 | last; | ||
209 | } | ||
210 | } | ||
211 | close (IN); | ||
212 | |||
213 | if (!$found_version) { | ||
214 | print STDERR "WARNING: could not find objcopy version.\n" . | ||
215 | "\tDisabling local function references.\n"; | ||
216 | } | ||
217 | |||
218 | |||
219 | # | ||
190 | # Step 1: find all the local (static functions) and weak symbols. | 220 | # Step 1: find all the local (static functions) and weak symbols. |
191 | # 't' is local, 'w/W' is weak (we never use a weak function) | 221 | # 't' is local, 'w/W' is weak (we never use a weak function) |
192 | # | 222 | # |
@@ -229,6 +259,17 @@ sub update_funcs | |||
229 | 259 | ||
230 | # is this function static? If so, note this fact. | 260 | # is this function static? If so, note this fact. |
231 | if (defined $locals{$ref_func}) { | 261 | if (defined $locals{$ref_func}) { |
262 | |||
263 | # only use locals if objcopy supports globalize-symbols | ||
264 | if (!$use_locals) { | ||
265 | print STDERR | ||
266 | "$inputfile: WARNING: referencing local function " . | ||
267 | "$ref_func for mcount\n" . | ||
268 | "\tConsider upgrading objcopy to support the globalize-" . | ||
269 | "symbols option.\n" | ||
270 | if (!$local_warn_once++); | ||
271 | return; | ||
272 | } | ||
232 | $convert{$ref_func} = 1; | 273 | $convert{$ref_func} = 1; |
233 | } | 274 | } |
234 | 275 | ||