ldmain.c revision 1.12 1 1.1 skrll /* Main program of GNU linker.
2 1.12 christos Copyright (C) 1991-2025 Free Software Foundation, Inc.
3 1.1 skrll Written by Steve Chamberlain steve (at) cygnus.com
4 1.1 skrll
5 1.1 skrll This file is part of the GNU Binutils.
6 1.1 skrll
7 1.1 skrll This program is free software; you can redistribute it and/or modify
8 1.1 skrll it under the terms of the GNU General Public License as published by
9 1.1 skrll the Free Software Foundation; either version 3 of the License, or
10 1.1 skrll (at your option) any later version.
11 1.1 skrll
12 1.1 skrll This program is distributed in the hope that it will be useful,
13 1.1 skrll but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 skrll MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 skrll GNU General Public License for more details.
16 1.1 skrll
17 1.1 skrll You should have received a copy of the GNU General Public License
18 1.1 skrll along with this program; if not, write to the Free Software
19 1.1 skrll Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 1.1 skrll MA 02110-1301, USA. */
21 1.1 skrll
22 1.1 skrll #include "sysdep.h"
23 1.1 skrll #include "bfd.h"
24 1.12 christos #include "bfdver.h"
25 1.1 skrll #include "safe-ctype.h"
26 1.1 skrll #include "libiberty.h"
27 1.1 skrll #include "bfdlink.h"
28 1.9 christos #include "ctf-api.h"
29 1.1 skrll #include "filenames.h"
30 1.10 christos #include "elf/common.h"
31 1.1 skrll
32 1.1 skrll #include "ld.h"
33 1.1 skrll #include "ldmain.h"
34 1.1 skrll #include "ldmisc.h"
35 1.1 skrll #include "ldwrite.h"
36 1.1 skrll #include "ldexp.h"
37 1.1 skrll #include "ldlang.h"
38 1.1 skrll #include <ldgram.h>
39 1.1 skrll #include "ldlex.h"
40 1.1 skrll #include "ldfile.h"
41 1.1 skrll #include "ldemul.h"
42 1.1 skrll #include "ldctor.h"
43 1.10 christos #if BFD_SUPPORTS_PLUGINS
44 1.3 christos #include "plugin.h"
45 1.3 christos #include "plugin-api.h"
46 1.10 christos #endif /* BFD_SUPPORTS_PLUGINS */
47 1.1 skrll
48 1.1 skrll /* Somewhere above, sys/stat.h got included. */
49 1.1 skrll #if !defined(S_ISDIR) && defined(S_IFDIR)
50 1.1 skrll #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
51 1.1 skrll #endif
52 1.1 skrll
53 1.1 skrll #include <string.h>
54 1.1 skrll
55 1.12 christos #if defined (HAVE_GETRUSAGE)
56 1.12 christos #include <sys/resource.h>
57 1.12 christos #endif
58 1.12 christos
59 1.1 skrll #ifndef TARGET_SYSTEM_ROOT
60 1.1 skrll #define TARGET_SYSTEM_ROOT ""
61 1.1 skrll #endif
62 1.1 skrll
63 1.1 skrll /* EXPORTS */
64 1.1 skrll
65 1.1 skrll FILE *saved_script_handle = NULL;
66 1.1 skrll FILE *previous_script_handle = NULL;
67 1.10 christos bool force_make_executable = false;
68 1.1 skrll
69 1.1 skrll char *default_target;
70 1.1 skrll const char *output_filename = "a.out";
71 1.1 skrll
72 1.1 skrll /* Name this program was invoked by. */
73 1.1 skrll char *program_name;
74 1.1 skrll
75 1.1 skrll /* The prefix for system library directories. */
76 1.1 skrll const char *ld_sysroot;
77 1.1 skrll
78 1.1 skrll /* The canonical representation of ld_sysroot. */
79 1.6 christos char *ld_canon_sysroot;
80 1.1 skrll int ld_canon_sysroot_len;
81 1.1 skrll
82 1.5 christos /* Set by -G argument, for targets like MIPS ELF. */
83 1.1 skrll int g_switch_value = 8;
84 1.1 skrll
85 1.1 skrll /* Nonzero means print names of input files as processed. */
86 1.9 christos unsigned int trace_files;
87 1.1 skrll
88 1.4 christos /* Nonzero means report actions taken by the linker, and describe the linker script in use. */
89 1.10 christos bool verbose;
90 1.1 skrll
91 1.1 skrll /* Nonzero means version number was printed, so exit successfully
92 1.1 skrll instead of complaining if no input files are given. */
93 1.10 christos bool version_printed;
94 1.1 skrll
95 1.1 skrll /* TRUE if we should demangle symbol names. */
96 1.10 christos bool demangling;
97 1.1 skrll
98 1.12 christos bool in_section_ordering;
99 1.12 christos
100 1.1 skrll args_type command_line;
101 1.1 skrll
102 1.1 skrll ld_config_type config;
103 1.1 skrll
104 1.1 skrll sort_type sort_section;
105 1.1 skrll
106 1.1 skrll static const char *get_sysroot
107 1.1 skrll (int, char **);
108 1.1 skrll static char *get_emulation
109 1.1 skrll (int, char **);
110 1.10 christos static bool add_archive_element
111 1.3 christos (struct bfd_link_info *, bfd *, const char *, bfd **);
112 1.6 christos static void multiple_definition
113 1.3 christos (struct bfd_link_info *, struct bfd_link_hash_entry *,
114 1.1 skrll bfd *, asection *, bfd_vma);
115 1.6 christos static void multiple_common
116 1.3 christos (struct bfd_link_info *, struct bfd_link_hash_entry *,
117 1.3 christos bfd *, enum bfd_link_hash_type, bfd_vma);
118 1.6 christos static void add_to_set
119 1.1 skrll (struct bfd_link_info *, struct bfd_link_hash_entry *,
120 1.1 skrll bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
121 1.6 christos static void constructor_callback
122 1.10 christos (struct bfd_link_info *, bool, const char *, bfd *,
123 1.1 skrll asection *, bfd_vma);
124 1.6 christos static void warning_callback
125 1.1 skrll (struct bfd_link_info *, const char *, const char *, bfd *,
126 1.1 skrll asection *, bfd_vma);
127 1.1 skrll static void warning_find_reloc
128 1.1 skrll (bfd *, asection *, void *);
129 1.6 christos static void undefined_symbol
130 1.1 skrll (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
131 1.10 christos bool);
132 1.6 christos static void reloc_overflow
133 1.1 skrll (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
134 1.1 skrll const char *, bfd_vma, bfd *, asection *, bfd_vma);
135 1.6 christos static void reloc_dangerous
136 1.1 skrll (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
137 1.6 christos static void unattached_reloc
138 1.1 skrll (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
139 1.10 christos static bool notice
140 1.3 christos (struct bfd_link_info *, struct bfd_link_hash_entry *,
141 1.5 christos struct bfd_link_hash_entry *, bfd *, asection *, bfd_vma, flagword);
142 1.1 skrll
143 1.1 skrll static struct bfd_link_callbacks link_callbacks =
144 1.1 skrll {
145 1.1 skrll add_archive_element,
146 1.1 skrll multiple_definition,
147 1.1 skrll multiple_common,
148 1.1 skrll add_to_set,
149 1.1 skrll constructor_callback,
150 1.1 skrll warning_callback,
151 1.1 skrll undefined_symbol,
152 1.1 skrll reloc_overflow,
153 1.1 skrll reloc_dangerous,
154 1.1 skrll unattached_reloc,
155 1.1 skrll notice,
156 1.12 christos fatal,
157 1.1 skrll einfo,
158 1.1 skrll info_msg,
159 1.1 skrll minfo,
160 1.9 christos ldlang_override_segment_assignment,
161 1.10 christos ldlang_ctf_acquire_strings,
162 1.10 christos NULL,
163 1.10 christos ldlang_ctf_new_dynsym,
164 1.9 christos ldlang_write_ctf_late
165 1.1 skrll };
166 1.1 skrll
167 1.4 christos static bfd_assert_handler_type default_bfd_assert_handler;
168 1.7 christos static bfd_error_handler_type default_bfd_error_handler;
169 1.4 christos
170 1.1 skrll struct bfd_link_info link_info;
171 1.1 skrll
172 1.10 christos struct dependency_file
174 1.10 christos {
175 1.10 christos struct dependency_file *next;
176 1.10 christos char *name;
177 1.10 christos };
178 1.10 christos
179 1.10 christos static struct dependency_file *dependency_files, *dependency_files_tail;
180 1.10 christos
181 1.10 christos void
182 1.10 christos track_dependency_files (const char *filename)
183 1.10 christos {
184 1.10 christos struct dependency_file *dep
185 1.10 christos = (struct dependency_file *) xmalloc (sizeof (*dep));
186 1.10 christos dep->name = xstrdup (filename);
187 1.10 christos dep->next = NULL;
188 1.10 christos if (dependency_files == NULL)
189 1.10 christos dependency_files = dep;
190 1.10 christos else
191 1.10 christos dependency_files_tail->next = dep;
192 1.10 christos dependency_files_tail = dep;
193 1.10 christos }
194 1.10 christos
195 1.10 christos static void
196 1.10 christos write_dependency_file (void)
197 1.10 christos {
198 1.10 christos FILE *out;
199 1.10 christos struct dependency_file *dep;
200 1.10 christos
201 1.10 christos out = fopen (config.dependency_file, FOPEN_WT);
202 1.10 christos if (out == NULL)
203 1.12 christos {
204 1.12 christos bfd_set_error (bfd_error_system_call);
205 1.10 christos fatal (_("%P: cannot open dependency file %s: %E\n"),
206 1.10 christos config.dependency_file);
207 1.10 christos }
208 1.10 christos
209 1.10 christos fprintf (out, "%s:", output_filename);
210 1.10 christos
211 1.10 christos for (dep = dependency_files; dep != NULL; dep = dep->next)
212 1.10 christos fprintf (out, " \\\n %s", dep->name);
213 1.10 christos
214 1.10 christos fprintf (out, "\n");
215 1.10 christos for (dep = dependency_files; dep != NULL; dep = dep->next)
216 1.10 christos fprintf (out, "\n%s:\n", dep->name);
217 1.10 christos
218 1.10 christos fclose (out);
219 1.10 christos }
220 1.1 skrll
221 1.3 christos static void
223 1.11 christos ld_cleanup (void)
224 1.11 christos {
225 1.11 christos bfd *ibfd, *inext;
226 1.11 christos if (link_info.output_bfd)
227 1.11 christos bfd_close_all_done (link_info.output_bfd);
228 1.11 christos for (ibfd = link_info.input_bfds; ibfd; ibfd = inext)
229 1.11 christos {
230 1.11 christos inext = ibfd->link.next;
231 1.10 christos bfd_close_all_done (ibfd);
232 1.12 christos }
233 1.12 christos #if BFD_SUPPORTS_PLUGINS
234 1.12 christos /* Note - we do not call ld_plugin_start (PHASE_PLUGINS) here as this
235 1.12 christos function is only called when the linker is exiting - ie after any
236 1.3 christos stats may have been reported, and potentially in the middle of a
237 1.3 christos phase where we have already started recording plugin stats. */
238 1.3 christos plugin_call_cleanup ();
239 1.3 christos #endif
240 1.1 skrll if (output_filename && delete_output_file_on_failure)
241 1.1 skrll unlink_if_ordinary (output_filename);
242 1.7 christos }
243 1.4 christos
244 1.4 christos /* Hook to notice BFD assertions. */
245 1.4 christos
246 1.4 christos static void
247 1.4 christos ld_bfd_assert_handler (const char *fmt, const char *bfdver,
248 1.10 christos const char *file, int line)
249 1.4 christos {
250 1.7 christos config.make_executable = false;
251 1.7 christos (*default_bfd_assert_handler) (fmt, bfdver, file, line);
252 1.7 christos }
253 1.7 christos
254 1.7 christos /* Hook the bfd error/warning handler for --fatal-warnings. */
255 1.7 christos
256 1.7 christos static void
257 1.7 christos ld_bfd_error_handler (const char *fmt, va_list ap)
258 1.10 christos {
259 1.7 christos if (config.fatal_warnings)
260 1.4 christos config.make_executable = false;
261 1.4 christos (*default_bfd_error_handler) (fmt, ap);
262 1.12 christos }
263 1.12 christos
264 1.12 christos static void
265 1.12 christos display_external_script (void)
266 1.12 christos {
267 1.12 christos if (saved_script_handle == NULL)
268 1.12 christos return;
269 1.12 christos
270 1.12 christos static const int ld_bufsz = 8193;
271 1.12 christos size_t n;
272 1.12 christos char *buf = (char *) xmalloc (ld_bufsz);
273 1.12 christos
274 1.12 christos rewind (saved_script_handle);
275 1.12 christos while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
276 1.12 christos {
277 1.12 christos buf[n] = 0;
278 1.12 christos info_msg ("%s", buf);
279 1.12 christos }
280 1.12 christos rewind (saved_script_handle);
281 1.12 christos free (buf);
282 1.12 christos }
283 1.12 christos
284 1.12 christos struct ld_phase_data
285 1.12 christos {
286 1.12 christos const char * name;
287 1.12 christos
288 1.12 christos unsigned long start;
289 1.12 christos unsigned long duration;
290 1.12 christos
291 1.12 christos bool started;
292 1.12 christos bool broken;
293 1.12 christos
294 1.12 christos #if defined (HAVE_GETRUSAGE)
295 1.12 christos struct rusage begin;
296 1.12 christos struct rusage use;
297 1.12 christos #endif
298 1.12 christos };
299 1.12 christos
300 1.12 christos static struct ld_phase_data phase_data [NUM_PHASES] =
301 1.12 christos {
302 1.12 christos [PHASE_ALL] = { .name = "ALL" },
303 1.12 christos [PHASE_CTF] = { .name = "ctf processing" },
304 1.12 christos [PHASE_MERGE] = { .name = "string merge" },
305 1.12 christos [PHASE_PARSE] = { .name = "parsing" },
306 1.12 christos [PHASE_PLUGINS] = { .name = "plugins" },
307 1.12 christos [PHASE_PROCESS] = { .name = "processing files" },
308 1.12 christos [PHASE_WRITE] = { .name = "write" },
309 1.12 christos };
310 1.12 christos
311 1.12 christos void
312 1.12 christos ld_start_phase (ld_phase phase)
313 1.12 christos {
314 1.12 christos struct ld_phase_data * pd = phase_data + phase;
315 1.12 christos
316 1.12 christos /* We record data even if config.stats_file is NULL. This allows
317 1.12 christos us to record data about phases that start before the command line
318 1.12 christos arguments have been parsed. ie PHASE_ALL and PHASE_PARSE. */
319 1.12 christos
320 1.12 christos /* Do not overwrite the fields if we have already started recording. */
321 1.12 christos if (pd->started)
322 1.12 christos {
323 1.12 christos /* Since we do not queue phase starts and stops, if a phase is started
324 1.12 christos multiple times there is a likelyhood that it will be stopped multiple
325 1.12 christos times as well. This is problematic as we will only record the data
326 1.12 christos for the first time the phase stops and ignore all of the other stops.
327 1.12 christos
328 1.12 christos So let the user know. Ideally real users will never actually see
329 1.12 christos this message, and instead only developers who are adding new phase
330 1.12 christos tracking code will ever encounter it. */
331 1.12 christos einfo ("%P: --stats: phase %s started twice - data may be unreliable\n",
332 1.12 christos pd->name);
333 1.12 christos return;
334 1.12 christos }
335 1.12 christos
336 1.12 christos /* It is OK if other phases are also active at this point.
337 1.12 christos It just means that the phases overlap or that one phase is a sub-task
338 1.12 christos of another. Since we record resources on a per-phase basis, this
339 1.12 christos should not matter. */
340 1.12 christos
341 1.12 christos pd->started = true;
342 1.12 christos pd->start = get_run_time ();
343 1.12 christos
344 1.12 christos #if defined (HAVE_GETRUSAGE)
345 1.12 christos /* Record the resource usage at the start of the phase. */
346 1.12 christos struct rusage usage;
347 1.12 christos
348 1.12 christos if (getrusage (RUSAGE_SELF, & usage) != 0)
349 1.12 christos /* FIXME: Complain ? */
350 1.12 christos return;
351 1.12 christos
352 1.12 christos memcpy (& pd->begin, & usage, sizeof usage);
353 1.12 christos #endif
354 1.12 christos }
355 1.12 christos
356 1.12 christos void
357 1.12 christos ld_stop_phase (ld_phase phase)
358 1.12 christos {
359 1.12 christos struct ld_phase_data * pd = phase_data + phase;
360 1.12 christos
361 1.12 christos if (!pd->started)
362 1.12 christos {
363 1.12 christos /* We set the broken flag to indicate that the data
364 1.12 christos recorded for this phase is inconsistent. */
365 1.12 christos pd->broken = true;
366 1.12 christos return;
367 1.12 christos }
368 1.12 christos
369 1.12 christos pd->duration += get_run_time () - pd->start;
370 1.12 christos pd->started = false;
371 1.12 christos
372 1.12 christos #if defined (HAVE_GETRUSAGE)
373 1.12 christos struct rusage usage;
374 1.12 christos
375 1.12 christos if (getrusage (RUSAGE_SELF, & usage) != 0)
376 1.12 christos /* FIXME: Complain ? */
377 1.12 christos return;
378 1.12 christos
379 1.12 christos if (phase == PHASE_ALL)
380 1.12 christos memcpy (& pd->use, & usage, sizeof usage);
381 1.12 christos else
382 1.12 christos {
383 1.12 christos struct timeval t;
384 1.12 christos
385 1.12 christos /* For sub-phases we record the increase in specific fields. */
386 1.12 christos /* FIXME: Most rusage{} fields appear to be irrelevent to when considering
387 1.12 christos linker resource usage. Currently we record maxrss and user and system
388 1.12 christos cpu times. Are there any other fields that might be useful ? */
389 1.12 christos
390 1.12 christos #ifndef timeradd /* Macros copied from <sys/time.h>. */
391 1.12 christos #define timeradd(a, b, result) \
392 1.12 christos do \
393 1.12 christos { \
394 1.12 christos (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
395 1.12 christos (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
396 1.12 christos if ((result)->tv_usec >= 1000000) \
397 1.12 christos { \
398 1.12 christos ++(result)->tv_sec; \
399 1.12 christos (result)->tv_usec -= 1000000; \
400 1.12 christos } \
401 1.12 christos } \
402 1.12 christos while (0)
403 1.12 christos #endif
404 1.12 christos
405 1.12 christos #ifndef timersub
406 1.12 christos #define timersub(a, b, result) \
407 1.12 christos do \
408 1.12 christos { \
409 1.12 christos (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
410 1.12 christos (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
411 1.12 christos if ((result)->tv_usec < 0) \
412 1.12 christos { \
413 1.12 christos --(result)->tv_sec; \
414 1.12 christos (result)->tv_usec += 1000000; \
415 1.12 christos } \
416 1.12 christos } \
417 1.12 christos while (0)
418 1.12 christos #endif
419 1.12 christos
420 1.12 christos timersub (& usage.ru_utime, & pd->begin.ru_utime, & t);
421 1.12 christos timeradd (& pd->use.ru_utime, &t, & pd->use.ru_utime);
422 1.12 christos
423 1.12 christos timersub (& usage.ru_stime, & pd->begin.ru_stime, & t);
424 1.12 christos timeradd (& pd->use.ru_stime, &t, & pd->use.ru_stime);
425 1.12 christos
426 1.12 christos if (pd->begin.ru_maxrss < usage.ru_maxrss)
427 1.12 christos pd->use.ru_maxrss += usage.ru_maxrss - pd->begin.ru_maxrss;
428 1.12 christos }
429 1.12 christos #endif
430 1.12 christos }
431 1.12 christos
432 1.12 christos static void
433 1.12 christos report_phases (FILE * file, time_t * start, char ** argv)
434 1.12 christos {
435 1.12 christos unsigned long i;
436 1.12 christos
437 1.12 christos if (file == NULL)
438 1.12 christos return;
439 1.12 christos
440 1.12 christos /* We might be writing to stdout, so make sure
441 1.12 christos that we do not have any pending error output. */
442 1.12 christos fflush (stderr);
443 1.12 christos
444 1.12 christos /* We do not translate "Stats" as we provide this as a key
445 1.12 christos word that can be searched for by grep and the like. */
446 1.12 christos #define STATS_PREFIX "Stats: "
447 1.12 christos
448 1.12 christos fprintf (file, STATS_PREFIX "linker version: %s\n", BFD_VERSION_STRING);
449 1.12 christos
450 1.12 christos /* No \n at the end of the string as ctime() provides its own. */
451 1.12 christos fprintf (file, STATS_PREFIX "linker started: %s", ctime (start));
452 1.12 christos
453 1.12 christos /* We include the linker command line arguments since
454 1.12 christos they can be hard to track down by other means. */
455 1.12 christos if (argv != NULL)
456 1.12 christos {
457 1.12 christos fprintf (file, STATS_PREFIX "args: ");
458 1.12 christos for (i = 0; argv[i] != NULL; i++)
459 1.12 christos fprintf (file, "%s ", argv[i]);
460 1.12 christos fprintf (file, "\n\n"); /* Blank line to separate the args from the stats. */
461 1.12 christos }
462 1.12 christos
463 1.12 christos /* All of this song and dance with the column_info struct and printf
464 1.12 christos formatting is so that we can have a nicely formated table with regular
465 1.12 christos column spacing, whilst allowing for the column headers to be translated,
466 1.12 christos and coping nicely with extra long strings or numbers. */
467 1.12 christos struct column_info
468 1.12 christos {
469 1.12 christos const char * header;
470 1.12 christos const char * sub_header;
471 1.12 christos int width;
472 1.12 christos int pad;
473 1.12 christos } columns[] =
474 1.12 christos #define COLUMNS_FIELD(HEADER,SUBHEADER) \
475 1.12 christos { .header = N_( HEADER ), .sub_header = N_( SUBHEADER ) },
476 1.12 christos {
477 1.12 christos COLUMNS_FIELD ("phase", "name")
478 1.12 christos COLUMNS_FIELD ("cpu time", "(microsec)")
479 1.12 christos #if defined (HAVE_GETRUSAGE)
480 1.12 christos /* Note: keep these columns in sync with the
481 1.12 christos information recorded in ld_stop_phase(). */
482 1.12 christos COLUMNS_FIELD ("memory", "(KiB)")
483 1.12 christos COLUMNS_FIELD ("user time", "(seconds)")
484 1.12 christos COLUMNS_FIELD ("system time", "(seconds)")
485 1.12 christos #endif
486 1.12 christos };
487 1.12 christos
488 1.12 christos #ifndef max
489 1.12 christos #define max(A,B) ((A) < (B) ? (B) : (A))
490 1.12 christos #endif
491 1.12 christos
492 1.12 christos size_t maxwidth = 1;
493 1.12 christos for (i = 0; i < NUM_PHASES; i++)
494 1.12 christos maxwidth = max (maxwidth, strlen (phase_data[i].name));
495 1.12 christos
496 1.12 christos fprintf (file, "%s", STATS_PREFIX);
497 1.12 christos
498 1.12 christos for (i = 0; i < ARRAY_SIZE (columns); i++)
499 1.12 christos {
500 1.12 christos int padding;
501 1.12 christos
502 1.12 christos if (i == 0)
503 1.12 christos columns[i].width = fprintf (file, "%-*s", (int) maxwidth, columns[i].header);
504 1.12 christos else
505 1.12 christos columns[i].width = fprintf (file, "%s", columns[i].header);
506 1.12 christos padding = columns[i].width % 8;
507 1.12 christos if (padding < 4)
508 1.12 christos padding = 4;
509 1.12 christos columns[i].pad = fprintf (file, "%*c", padding, ' ');
510 1.12 christos }
511 1.12 christos
512 1.12 christos fprintf (file, "\n");
513 1.12 christos
514 1.12 christos int bias = 0;
515 1.12 christos #define COLUMN_ENTRY(VAL, FORMAT, N) \
516 1.12 christos do \
517 1.12 christos { \
518 1.12 christos int l; \
519 1.12 christos \
520 1.12 christos if (N == 0) \
521 1.12 christos l = fprintf (file, "%-*" FORMAT, columns[N].width, VAL); \
522 1.12 christos else \
523 1.12 christos l = fprintf (file, "%*" FORMAT, columns[N].width - bias, VAL); \
524 1.12 christos bias = 0; \
525 1.12 christos if (l < columns[N].width) \
526 1.12 christos l = columns[N].pad; \
527 1.12 christos else if (l < columns[N].width + columns[N].pad) \
528 1.12 christos l = columns[N].pad - (l - columns[N].width); \
529 1.12 christos else \
530 1.12 christos { \
531 1.12 christos bias = l - (columns[N].width + columns[N].pad); \
532 1.12 christos l = 0; \
533 1.12 christos } \
534 1.12 christos if (l) \
535 1.12 christos fprintf (file, "%*c", l, ' '); \
536 1.12 christos } \
537 1.12 christos while (0)
538 1.12 christos
539 1.12 christos fprintf (file, "%s", STATS_PREFIX);
540 1.12 christos
541 1.12 christos for (i = 0; i < ARRAY_SIZE (columns); i++)
542 1.12 christos COLUMN_ENTRY (columns[i].sub_header, "s", i);
543 1.12 christos
544 1.12 christos fprintf (file, "\n");
545 1.12 christos
546 1.12 christos for (i = 0; i < NUM_PHASES; i++)
547 1.12 christos {
548 1.12 christos struct ld_phase_data * pd = phase_data + i;
549 1.12 christos /* This should not be needed... */
550 1.12 christos const char * name = pd->name ? pd->name : "<unnamed>";
551 1.12 christos
552 1.12 christos if (pd->broken)
553 1.12 christos {
554 1.12 christos fprintf (file, "%s %s: %s",
555 1.12 christos STATS_PREFIX, name, _("WARNING: Data is unreliable!\n"));
556 1.12 christos continue;
557 1.12 christos }
558 1.12 christos
559 1.12 christos fprintf (file, "%s", STATS_PREFIX);
560 1.12 christos
561 1.12 christos /* Care must be taken to keep the lines below in sync with
562 1.12 christos entries in the columns_info array.
563 1.12 christos FIXME: There ought to be a better way to do this... */
564 1.12 christos COLUMN_ENTRY (name, "s", 0);
565 1.12 christos COLUMN_ENTRY (pd->duration, "ld", 1);
566 1.12 christos #if defined (HAVE_GETRUSAGE)
567 1.12 christos COLUMN_ENTRY (pd->use.ru_maxrss, "ld", 2);
568 1.12 christos COLUMN_ENTRY ((int64_t) pd->use.ru_utime.tv_sec, PRId64, 3);
569 1.12 christos COLUMN_ENTRY ((int64_t) pd->use.ru_stime.tv_sec, PRId64, 4);
570 1.12 christos #endif
571 1.12 christos fprintf (file, "\n");
572 1.12 christos }
573 1.12 christos
574 1.12 christos fflush (file);
575 1.1 skrll }
576 1.1 skrll
577 1.1 skrll int
578 1.1 skrll main (int argc, char **argv)
579 1.1 skrll {
580 1.12 christos char *emulation;
581 1.1 skrll long start_time = get_run_time ();
582 1.10 christos time_t start_seconds = time (NULL);
583 1.1 skrll
584 1.1 skrll #ifdef HAVE_LC_MESSAGES
585 1.1 skrll setlocale (LC_MESSAGES, "");
586 1.1 skrll #endif
587 1.1 skrll setlocale (LC_CTYPE, "");
588 1.1 skrll bindtextdomain (PACKAGE, LOCALEDIR);
589 1.1 skrll textdomain (PACKAGE);
590 1.1 skrll
591 1.1 skrll program_name = argv[0];
592 1.12 christos xmalloc_set_program_name (program_name);
593 1.12 christos
594 1.12 christos /* Check the LD_STATS environment variable before parsing the command line
595 1.12 christos so that the --stats option, if used, can override the environment variable. */
596 1.12 christos char * stats_filename;
597 1.12 christos if ((stats_filename = getenv ("LD_STATS")) != NULL)
598 1.12 christos {
599 1.12 christos if (ISPRINT (stats_filename[0]))
600 1.12 christos config.stats_filename = stats_filename;
601 1.12 christos else
602 1.12 christos config.stats_filename = "-";
603 1.12 christos config.stats = true;
604 1.12 christos }
605 1.12 christos
606 1.12 christos ld_start_phase (PHASE_ALL);
607 1.1 skrll ld_start_phase (PHASE_PARSE);
608 1.12 christos
609 1.1 skrll expandargv (&argc, &argv);
610 1.9 christos char ** saved_argv = dupargv (argv);
611 1.12 christos
612 1.1 skrll if (bfd_init () != BFD_INIT_MAGIC)
613 1.1 skrll fatal (_("%P: fatal error: libbfd ABI mismatch\n"));
614 1.1 skrll
615 1.4 christos bfd_set_error_program_name (program_name);
616 1.4 christos
617 1.4 christos /* We want to notice and fail on those nasty BFD assertions which are
618 1.4 christos likely to signal incorrect output being generated but otherwise may
619 1.4 christos leave no trace. */
620 1.7 christos default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler);
621 1.7 christos
622 1.7 christos /* Also hook the bfd error/warning handler for --fatal-warnings. */
623 1.3 christos default_bfd_error_handler = bfd_set_error_handler (ld_bfd_error_handler);
624 1.1 skrll
625 1.12 christos xatexit (ld_cleanup);
626 1.12 christos
627 1.12 christos /* Remove temporary object-only files. */
628 1.1 skrll xatexit (cmdline_remove_object_only_files);
629 1.1 skrll
630 1.1 skrll /* Set up the sysroot directory. */
631 1.5 christos ld_sysroot = get_sysroot (argc, argv);
632 1.1 skrll if (*ld_sysroot)
633 1.8 christos ld_canon_sysroot = lrealpath (ld_sysroot);
634 1.8 christos if (ld_canon_sysroot)
635 1.8 christos {
636 1.8 christos ld_canon_sysroot_len = strlen (ld_canon_sysroot);
637 1.8 christos
638 1.8 christos /* is_sysrooted_pathname() relies on no trailing dirsep. */
639 1.10 christos if (ld_canon_sysroot_len > 0
640 1.8 christos && IS_DIR_SEPARATOR (ld_canon_sysroot [ld_canon_sysroot_len - 1]))
641 1.1 skrll ld_canon_sysroot [--ld_canon_sysroot_len] = '\0';
642 1.1 skrll }
643 1.1 skrll else
644 1.1 skrll ld_canon_sysroot_len = -1;
645 1.1 skrll
646 1.1 skrll /* Set the default BFD target based on the configured target. Doing
647 1.1 skrll this permits the linker to be configured for a particular target,
648 1.6 christos and linked against a shared BFD library which was configured for
649 1.1 skrll a different target. The macro TARGET is defined by Makefile. */
650 1.1 skrll if (!bfd_set_default_target (TARGET))
651 1.1 skrll {
652 1.1 skrll einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
653 1.1 skrll xexit (1);
654 1.1 skrll }
655 1.1 skrll
656 1.1 skrll #if YYDEBUG
657 1.1 skrll {
658 1.1 skrll extern int yydebug;
659 1.1 skrll yydebug = 1;
660 1.1 skrll }
661 1.10 christos #endif
662 1.1 skrll
663 1.1 skrll config.build_constructors = true;
664 1.1 skrll config.rpath_separator = ':';
665 1.10 christos config.split_by_reloc = (unsigned) -1;
666 1.10 christos config.split_by_file = (bfd_size_type) -1;
667 1.10 christos config.make_executable = true;
668 1.10 christos config.magic_demand_paged = true;
669 1.5 christos config.text_read_only = true;
670 1.1 skrll config.print_map_discarded = true;
671 1.10 christos link_info.disable_target_specific_optimizations = -1;
672 1.10 christos
673 1.3 christos command_line.warn_mismatch = true;
674 1.1 skrll command_line.warn_search_mismatch = true;
675 1.1 skrll command_line.check_section_addresses = -1;
676 1.1 skrll
677 1.1 skrll /* We initialize DEMANGLING based on the environment variable
678 1.1 skrll COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
679 1.1 skrll output of the linker, unless COLLECT_NO_DEMANGLE is set in the
680 1.1 skrll environment. Acting the same way here lets us provide the same
681 1.1 skrll interface by default. */
682 1.10 christos demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
683 1.10 christos
684 1.10 christos link_info.allow_undefined_version = true;
685 1.10 christos link_info.keep_memory = true;
686 1.10 christos link_info.max_cache_size = (bfd_size_type) -1;
687 1.10 christos link_info.combreloc = true;
688 1.10 christos link_info.strip_discarded = true;
689 1.7 christos link_info.prohibit_multiple_definition_absolute = false;
690 1.7 christos link_info.textrel_check = DEFAULT_LD_TEXTREL_CHECK;
691 1.1 skrll link_info.emit_hash = DEFAULT_EMIT_SYSV_HASH;
692 1.1 skrll link_info.emit_gnu_hash = DEFAULT_EMIT_GNU_HASH;
693 1.1 skrll link_info.callbacks = &link_callbacks;
694 1.1 skrll link_info.input_bfds_tail = &link_info.input_bfds;
695 1.1 skrll /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
696 1.1 skrll and _fini symbols. We are compatible. */
697 1.1 skrll link_info.init_function = "_init";
698 1.5 christos link_info.fini_function = "_fini";
699 1.6 christos link_info.relax_pass = 1;
700 1.10 christos link_info.extern_protected_data = -1;
701 1.1 skrll link_info.dynamic_undefined_weak = -1;
702 1.1 skrll link_info.indirect_extern_access = -1;
703 1.1 skrll link_info.pei386_auto_import = -1;
704 1.5 christos link_info.spare_dynamic_tags = 5;
705 1.11 christos link_info.path_separator = ':';
706 1.5 christos #ifdef DEFAULT_FLAG_COMPRESS_DEBUG
707 1.7 christos config.compress_debug = DEFAULT_COMPRESSED_DEBUG_ALGORITHM;
708 1.7 christos #endif
709 1.7 christos #ifdef DEFAULT_NEW_DTAGS
710 1.10 christos link_info.new_dtags = DEFAULT_NEW_DTAGS;
711 1.10 christos #endif
712 1.1 skrll link_info.start_stop_gc = false;
713 1.1 skrll link_info.start_stop_visibility = STV_PROTECTED;
714 1.1 skrll
715 1.1 skrll ldfile_add_arch ("");
716 1.1 skrll emulation = get_emulation (argc, argv);
717 1.12 christos ldemul_choose_mode (emulation);
718 1.12 christos default_target = ldemul_choose_target (argc, argv);
719 1.1 skrll lang_init (false);
720 1.10 christos ldexp_init (false);
721 1.1 skrll ldemul_before_parse ();
722 1.1 skrll lang_has_input_file = false;
723 1.1 skrll parse_args (argc, argv);
724 1.1 skrll
725 1.1 skrll if (config.hash_table_size != 0)
726 1.12 christos bfd_hash_set_default_size (config.hash_table_size);
727 1.12 christos
728 1.10 christos ld_stop_phase (PHASE_PARSE);
729 1.12 christos
730 1.4 christos #if BFD_SUPPORTS_PLUGINS
731 1.4 christos ld_start_phase (PHASE_PLUGINS);
732 1.12 christos /* Now all the plugin arguments have been gathered, we can load them. */
733 1.10 christos plugin_load_plugins ();
734 1.4 christos ld_stop_phase (PHASE_PLUGINS);
735 1.12 christos #endif /* BFD_SUPPORTS_PLUGINS */
736 1.12 christos
737 1.1 skrll ld_start_phase (PHASE_PARSE);
738 1.1 skrll
739 1.1 skrll ldemul_set_symbols ();
740 1.1 skrll
741 1.1 skrll /* If we have not already opened and parsed a linker script,
742 1.1 skrll try the default script from command line first. */
743 1.1 skrll if (saved_script_handle == NULL
744 1.9 christos && command_line.default_script != NULL)
745 1.1 skrll {
746 1.1 skrll ldfile_open_script_file (command_line.default_script);
747 1.1 skrll parser_input = input_script;
748 1.1 skrll yyparse ();
749 1.1 skrll }
750 1.1 skrll
751 1.1 skrll /* If we have not already opened and parsed a linker script
752 1.1 skrll read the emulation's appropriate default script. */
753 1.1 skrll if (saved_script_handle == NULL)
754 1.1 skrll {
755 1.1 skrll int isfile;
756 1.1 skrll char *s = ldemul_get_script (&isfile);
757 1.3 christos
758 1.1 skrll if (isfile)
759 1.1 skrll ldfile_open_default_command_file (s);
760 1.1 skrll else
761 1.4 christos {
762 1.1 skrll lex_string = s;
763 1.1 skrll lex_redirect (s, _("built in linker script"), 1);
764 1.1 skrll }
765 1.1 skrll parser_input = input_script;
766 1.1 skrll yyparse ();
767 1.1 skrll lex_string = NULL;
768 1.4 christos }
769 1.1 skrll
770 1.1 skrll if (verbose)
771 1.12 christos {
772 1.1 skrll if (saved_script_handle)
773 1.1 skrll info_msg (_("using external linker script: %s"), processed_scripts->name);
774 1.1 skrll else
775 1.1 skrll info_msg (_("using internal linker script:"));
776 1.1 skrll info_msg ("\n==================================================\n");
777 1.12 christos
778 1.1 skrll if (saved_script_handle)
779 1.1 skrll display_external_script ();
780 1.1 skrll else
781 1.1 skrll {
782 1.1 skrll int isfile;
783 1.1 skrll
784 1.1 skrll info_msg (ldemul_get_script (&isfile));
785 1.1 skrll }
786 1.1 skrll
787 1.1 skrll info_msg ("\n==================================================\n");
788 1.12 christos }
789 1.12 christos
790 1.12 christos if (command_line.section_ordering_file)
791 1.12 christos {
792 1.12 christos FILE *hold_script_handle;
793 1.12 christos
794 1.12 christos hold_script_handle = saved_script_handle;
795 1.12 christos ldfile_open_command_file (command_line.section_ordering_file);
796 1.12 christos if (verbose)
797 1.12 christos display_external_script ();
798 1.12 christos saved_script_handle = hold_script_handle;
799 1.12 christos in_section_ordering = true;
800 1.12 christos parser_input = input_section_ordering_script;
801 1.12 christos yyparse ();
802 1.12 christos in_section_ordering = false;
803 1.12 christos
804 1.7 christos }
805 1.7 christos
806 1.10 christos if (command_line.force_group_allocation
807 1.7 christos || !bfd_link_relocatable (&link_info))
808 1.10 christos link_info.resolve_section_groups = true;
809 1.7 christos else
810 1.4 christos link_info.resolve_section_groups = false;
811 1.4 christos
812 1.4 christos if (command_line.print_output_format)
813 1.1 skrll info_msg ("%s\n", lang_get_output_target ());
814 1.1 skrll
815 1.5 christos lang_final ();
816 1.5 christos
817 1.5 christos /* If the only command line argument has been -v or --version or --verbose
818 1.5 christos then ignore any input files provided by linker scripts and exit now.
819 1.5 christos We do not want to create an output file when the linker is just invoked
820 1.5 christos to provide version information. */
821 1.5 christos if (argc == 2 && version_printed)
822 1.7 christos xexit (0);
823 1.12 christos
824 1.7 christos if (link_info.inhibit_common_definition && !bfd_link_dll (&link_info))
825 1.1 skrll fatal (_("%P: --no-define-common may not be used without -shared\n"));
826 1.1 skrll
827 1.4 christos if (!lang_has_input_file)
828 1.1 skrll {
829 1.12 christos if (version_printed || command_line.print_output_format)
830 1.12 christos xexit (0);
831 1.1 skrll output_unknown_cmdline_warnings ();
832 1.1 skrll fatal (_("%P: no input files\n"));
833 1.9 christos }
834 1.1 skrll
835 1.1 skrll if (verbose)
836 1.1 skrll info_msg (_("%P: mode %s\n"), emulation);
837 1.1 skrll
838 1.12 christos ldemul_after_parse ();
839 1.12 christos
840 1.1 skrll output_unknown_cmdline_warnings ();
841 1.1 skrll
842 1.1 skrll if (config.map_filename)
843 1.1 skrll {
844 1.1 skrll if (strcmp (config.map_filename, "-") == 0)
845 1.1 skrll {
846 1.1 skrll config.map_file = stdout;
847 1.1 skrll }
848 1.1 skrll else
849 1.1 skrll {
850 1.1 skrll config.map_file = fopen (config.map_filename, FOPEN_WT);
851 1.1 skrll if (config.map_file == (FILE *) NULL)
852 1.12 christos {
853 1.1 skrll bfd_set_error (bfd_error_system_call);
854 1.1 skrll einfo (_("%P: cannot open map file %s: %E\n"),
855 1.1 skrll config.map_filename);
856 1.10 christos }
857 1.1 skrll }
858 1.1 skrll link_info.has_map_file = true;
859 1.12 christos }
860 1.12 christos
861 1.12 christos if (config.stats_filename != NULL)
862 1.12 christos {
863 1.12 christos if (config.map_filename != NULL
864 1.12 christos && strcmp (config.stats_filename, config.map_filename) == 0)
865 1.12 christos config.stats_file = NULL;
866 1.12 christos else if (strcmp (config.stats_filename, "-") == 0)
867 1.12 christos config.stats_file = stdout;
868 1.12 christos else
869 1.12 christos {
870 1.12 christos if (config.stats_filename[0] == '+')
871 1.12 christos config.stats_file = fopen (config.stats_filename + 1, "a");
872 1.12 christos else
873 1.12 christos config.stats_file = fopen (config.stats_filename, "w");
874 1.12 christos
875 1.12 christos if (config.stats_file == NULL)
876 1.12 christos einfo ("%P: Warning: failed to open resource record file: %s\n",
877 1.12 christos config.stats_filename);
878 1.12 christos }
879 1.12 christos }
880 1.12 christos
881 1.12 christos ld_stop_phase (PHASE_PARSE);
882 1.1 skrll
883 1.12 christos ld_start_phase (PHASE_PROCESS);
884 1.1 skrll lang_process ();
885 1.1 skrll ld_stop_phase (PHASE_PROCESS);
886 1.1 skrll
887 1.5 christos /* Print error messages for any missing symbols, for any warning
888 1.1 skrll symbols, and possibly multiple definitions. */
889 1.1 skrll if (bfd_link_relocatable (&link_info))
890 1.1 skrll link_info.output_bfd->flags &= ~EXEC_P;
891 1.1 skrll else
892 1.11 christos link_info.output_bfd->flags |= EXEC_P;
893 1.11 christos
894 1.5 christos flagword flags = 0;
895 1.11 christos switch (config.compress_debug)
896 1.11 christos {
897 1.11 christos case COMPRESS_DEBUG_GNU_ZLIB:
898 1.11 christos flags = BFD_COMPRESS;
899 1.11 christos break;
900 1.11 christos case COMPRESS_DEBUG_GABI_ZLIB:
901 1.11 christos flags = BFD_COMPRESS | BFD_COMPRESS_GABI;
902 1.11 christos break;
903 1.11 christos case COMPRESS_DEBUG_ZSTD:
904 1.11 christos flags = BFD_COMPRESS | BFD_COMPRESS_GABI | BFD_COMPRESS_ZSTD;
905 1.11 christos break;
906 1.5 christos default:
907 1.11 christos break;
908 1.11 christos }
909 1.5 christos link_info.output_bfd->flags
910 1.12 christos |= flags & bfd_applicable_file_flags (link_info.output_bfd);
911 1.12 christos
912 1.1 skrll
913 1.12 christos ld_start_phase (PHASE_WRITE);
914 1.12 christos ldwrite ();
915 1.1 skrll ld_stop_phase (PHASE_WRITE);
916 1.1 skrll
917 1.1 skrll
918 1.1 skrll if (config.map_file != NULL)
919 1.1 skrll lang_map ();
920 1.1 skrll if (command_line.cref)
921 1.1 skrll output_cref (config.map_file != NULL ? config.map_file : stdout);
922 1.5 christos if (nocrossref_list != NULL)
923 1.5 christos check_nocrossrefs ();
924 1.5 christos if (command_line.print_memory_usage)
925 1.5 christos lang_print_memory_usage ();
926 1.6 christos #if 0
927 1.1 skrll {
928 1.5 christos struct bfd_link_hash_entry *h;
929 1.5 christos
930 1.5 christos h = bfd_link_hash_lookup (link_info.hash, "__image_base__", 0,0,1);
931 1.5 christos fprintf (stderr, "lookup = %p val %lx\n", h, h ? h->u.def.value : 1);
932 1.12 christos }
933 1.1 skrll #endif
934 1.1 skrll ldexp_finish (false);
935 1.10 christos lang_finish ();
936 1.10 christos
937 1.10 christos if (config.dependency_file != NULL)
938 1.1 skrll write_dependency_file ();
939 1.1 skrll
940 1.1 skrll /* Even if we're producing relocatable output, some non-fatal errors should
941 1.1 skrll be reported in the exit status. (What non-fatal errors, if any, do we
942 1.1 skrll want to ignore for relocatable output?) */
943 1.9 christos if (!config.make_executable && !force_make_executable)
944 1.1 skrll {
945 1.1 skrll if (verbose)
946 1.1 skrll einfo (_("%P: link errors found, deleting executable `%s'\n"),
947 1.4 christos output_filename);
948 1.1 skrll
949 1.1 skrll /* The file will be removed by ld_cleanup. */
950 1.1 skrll xexit (1);
951 1.1 skrll }
952 1.11 christos else
953 1.11 christos {
954 1.11 christos bfd *obfd = link_info.output_bfd;
955 1.12 christos link_info.output_bfd = NULL;
956 1.12 christos if (!bfd_close (obfd))
957 1.12 christos fatal (_("%P: %s: final close failed: %E\n"), output_filename);
958 1.1 skrll
959 1.1 skrll link_info.output_bfd = NULL;
960 1.1 skrll
961 1.1 skrll /* If the --force-exe-suffix is enabled, and we're making an
962 1.5 christos executable file and it doesn't end in .exe, copy it to one
963 1.5 christos which does. */
964 1.1 skrll if (!bfd_link_relocatable (&link_info)
965 1.1 skrll && command_line.force_exe_suffix)
966 1.1 skrll {
967 1.1 skrll int len = strlen (output_filename);
968 1.1 skrll
969 1.1 skrll if (len < 4
970 1.1 skrll || (strcasecmp (output_filename + len - 4, ".exe") != 0
971 1.1 skrll && strcasecmp (output_filename + len - 4, ".dll") != 0))
972 1.1 skrll {
973 1.1 skrll FILE *src;
974 1.3 christos FILE *dst;
975 1.1 skrll const int bsize = 4096;
976 1.3 christos char *buf = (char *) xmalloc (bsize);
977 1.1 skrll int l;
978 1.1 skrll char *dst_name = (char *) xmalloc (len + 5);
979 1.1 skrll
980 1.1 skrll strcpy (dst_name, output_filename);
981 1.1 skrll strcat (dst_name, ".exe");
982 1.1 skrll src = fopen (output_filename, FOPEN_RB);
983 1.1 skrll dst = fopen (dst_name, FOPEN_WB);
984 1.12 christos
985 1.1 skrll if (!src)
986 1.1 skrll fatal (_("%P: unable to open for source of copy `%s'\n"),
987 1.12 christos output_filename);
988 1.1 skrll if (!dst)
989 1.1 skrll fatal (_("%P: unable to open for destination of copy `%s'\n"),
990 1.1 skrll dst_name);
991 1.1 skrll while ((l = fread (buf, 1, bsize, src)) > 0)
992 1.1 skrll {
993 1.1 skrll int done = fwrite (buf, 1, l, dst);
994 1.8 christos
995 1.1 skrll if (done != l)
996 1.1 skrll einfo (_("%P: error writing file `%s'\n"), dst_name);
997 1.1 skrll }
998 1.1 skrll
999 1.8 christos fclose (src);
1000 1.1 skrll if (fclose (dst) == EOF)
1001 1.1 skrll einfo (_("%P: error closing file `%s'\n"), dst_name);
1002 1.1 skrll free (dst_name);
1003 1.1 skrll free (buf);
1004 1.1 skrll }
1005 1.1 skrll }
1006 1.12 christos }
1007 1.12 christos
1008 1.12 christos if (config.emit_gnu_object_only)
1009 1.12 christos cmdline_emit_object_only_section ();
1010 1.12 christos
1011 1.1 skrll ld_stop_phase (PHASE_ALL);
1012 1.1 skrll
1013 1.12 christos if (config.stats)
1014 1.12 christos {
1015 1.12 christos report_phases (config.map_file, & start_seconds, saved_argv);
1016 1.12 christos
1017 1.12 christos if (config.stats_filename)
1018 1.12 christos {
1019 1.12 christos report_phases (config.stats_file, & start_seconds, saved_argv);
1020 1.12 christos
1021 1.12 christos if (config.stats_file != stdout && config.stats_file != stderr)
1022 1.12 christos {
1023 1.12 christos fclose (config.stats_file);
1024 1.12 christos config.stats_file = NULL;
1025 1.12 christos }
1026 1.12 christos }
1027 1.12 christos else /* This is for backwards compatibility. */
1028 1.1 skrll {
1029 1.12 christos long run_time = get_run_time () - start_time;
1030 1.12 christos
1031 1.12 christos fflush (stdout);
1032 1.12 christos fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
1033 1.12 christos program_name, run_time / 1000000, run_time % 1000000);
1034 1.1 skrll fflush (stderr);
1035 1.1 skrll }
1036 1.11 christos }
1037 1.1 skrll
1038 1.1 skrll /* Prevent ld_cleanup from deleting the output file. */
1039 1.12 christos output_filename = NULL;
1040 1.12 christos
1041 1.1 skrll freeargv (saved_argv);
1042 1.1 skrll
1043 1.1 skrll xexit (0);
1044 1.1 skrll return 0;
1045 1.1 skrll }
1046 1.1 skrll
1047 1.1 skrll /* If the configured sysroot is relocatable, try relocating it based on
1048 1.1 skrll default prefix FROM. Return the relocated directory if it exists,
1049 1.1 skrll otherwise return null. */
1050 1.1 skrll
1051 1.1 skrll static char *
1052 1.1 skrll get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
1053 1.1 skrll {
1054 1.1 skrll #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
1055 1.1 skrll char *path;
1056 1.1 skrll struct stat s;
1057 1.1 skrll
1058 1.1 skrll path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
1059 1.1 skrll if (path)
1060 1.1 skrll {
1061 1.1 skrll if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
1062 1.1 skrll return path;
1063 1.1 skrll free (path);
1064 1.1 skrll }
1065 1.1 skrll #endif
1066 1.1 skrll return 0;
1067 1.1 skrll }
1068 1.1 skrll
1069 1.1 skrll /* Return the sysroot directory. Return "" if no sysroot is being used. */
1070 1.1 skrll
1071 1.1 skrll static const char *
1072 1.1 skrll get_sysroot (int argc, char **argv)
1073 1.9 christos {
1074 1.1 skrll int i;
1075 1.1 skrll const char *path = NULL;
1076 1.10 christos
1077 1.9 christos for (i = 1; i < argc; i++)
1078 1.9 christos if (startswith (argv[i], "--sysroot="))
1079 1.9 christos path = argv[i] + strlen ("--sysroot=");
1080 1.9 christos
1081 1.9 christos if (!path)
1082 1.9 christos path = get_relative_sysroot (BINDIR);
1083 1.9 christos
1084 1.1 skrll if (!path)
1085 1.9 christos path = get_relative_sysroot (TOOLBINDIR);
1086 1.9 christos
1087 1.1 skrll if (!path)
1088 1.9 christos path = TARGET_SYSTEM_ROOT;
1089 1.9 christos
1090 1.1 skrll if (IS_DIR_SEPARATOR (*path) && path[1] == 0)
1091 1.9 christos path = "";
1092 1.1 skrll
1093 1.1 skrll return path;
1094 1.1 skrll }
1095 1.1 skrll
1096 1.1 skrll /* We need to find any explicitly given emulation in order to initialize the
1097 1.1 skrll state that's needed by the lex&yacc argument parser (parse_args). */
1098 1.1 skrll
1099 1.1 skrll static char *
1100 1.1 skrll get_emulation (int argc, char **argv)
1101 1.1 skrll {
1102 1.1 skrll char *emulation;
1103 1.1 skrll int i;
1104 1.1 skrll
1105 1.1 skrll emulation = getenv (EMULATION_ENVIRON);
1106 1.1 skrll if (emulation == NULL)
1107 1.1 skrll emulation = DEFAULT_EMULATION;
1108 1.1 skrll
1109 1.10 christos for (i = 1; i < argc; i++)
1110 1.1 skrll {
1111 1.1 skrll if (startswith (argv[i], "-m"))
1112 1.1 skrll {
1113 1.1 skrll if (argv[i][2] == '\0')
1114 1.1 skrll {
1115 1.1 skrll /* -m EMUL */
1116 1.1 skrll if (i < argc - 1)
1117 1.1 skrll {
1118 1.1 skrll emulation = argv[i + 1];
1119 1.1 skrll i++;
1120 1.12 christos }
1121 1.1 skrll else
1122 1.1 skrll fatal (_("%P: missing argument to -m\n"));
1123 1.1 skrll }
1124 1.1 skrll else if (strcmp (argv[i], "-mips1") == 0
1125 1.1 skrll || strcmp (argv[i], "-mips2") == 0
1126 1.1 skrll || strcmp (argv[i], "-mips3") == 0
1127 1.1 skrll || strcmp (argv[i], "-mips4") == 0
1128 1.1 skrll || strcmp (argv[i], "-mips5") == 0
1129 1.10 christos || strcmp (argv[i], "-mips32") == 0
1130 1.10 christos || strcmp (argv[i], "-mips32r2") == 0
1131 1.5 christos || strcmp (argv[i], "-mips32r3") == 0
1132 1.1 skrll || strcmp (argv[i], "-mips32r5") == 0
1133 1.5 christos || strcmp (argv[i], "-mips32r6") == 0
1134 1.10 christos || strcmp (argv[i], "-mips64") == 0
1135 1.10 christos || strcmp (argv[i], "-mips64r2") == 0
1136 1.5 christos || strcmp (argv[i], "-mips64r3") == 0
1137 1.1 skrll || strcmp (argv[i], "-mips64r5") == 0
1138 1.1 skrll || strcmp (argv[i], "-mips64r6") == 0)
1139 1.1 skrll {
1140 1.1 skrll /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
1141 1.1 skrll passed to the linker by some MIPS compilers. They
1142 1.1 skrll generally tell the linker to use a slightly different
1143 1.1 skrll library path. Perhaps someday these should be
1144 1.1 skrll implemented as emulations; until then, we just ignore
1145 1.1 skrll the arguments and hope that nobody ever creates
1146 1.1 skrll emulations named ips1, ips2 or ips3. */
1147 1.1 skrll }
1148 1.1 skrll else if (strcmp (argv[i], "-m486") == 0)
1149 1.1 skrll {
1150 1.1 skrll /* FIXME: The argument -m486 is passed to the linker on
1151 1.1 skrll some Linux systems. Hope that nobody creates an
1152 1.1 skrll emulation named 486. */
1153 1.1 skrll }
1154 1.1 skrll else
1155 1.1 skrll {
1156 1.1 skrll /* -mEMUL */
1157 1.1 skrll emulation = &argv[i][2];
1158 1.1 skrll }
1159 1.1 skrll }
1160 1.1 skrll }
1161 1.1 skrll
1162 1.1 skrll return emulation;
1163 1.1 skrll }
1164 1.1 skrll
1165 1.1 skrll void
1166 1.1 skrll add_ysym (const char *name)
1167 1.1 skrll {
1168 1.6 christos if (link_info.notice_hash == NULL)
1169 1.6 christos {
1170 1.1 skrll link_info.notice_hash
1171 1.1 skrll = (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
1172 1.1 skrll if (!bfd_hash_table_init_n (link_info.notice_hash,
1173 1.1 skrll bfd_hash_newfunc,
1174 1.12 christos sizeof (struct bfd_hash_entry),
1175 1.1 skrll 61))
1176 1.1 skrll fatal (_("%P: bfd_hash_table_init failed: %E\n"));
1177 1.10 christos }
1178 1.12 christos
1179 1.1 skrll if (bfd_hash_lookup (link_info.notice_hash, name, true, true) == NULL)
1180 1.1 skrll fatal (_("%P: bfd_hash_lookup failed: %E\n"));
1181 1.2 skrll }
1182 1.5 christos
1183 1.2 skrll void
1184 1.5 christos add_ignoresym (struct bfd_link_info *info, const char *name)
1185 1.2 skrll {
1186 1.5 christos if (info->ignore_hash == NULL)
1187 1.6 christos {
1188 1.6 christos info->ignore_hash = xmalloc (sizeof (struct bfd_hash_table));
1189 1.6 christos if (!bfd_hash_table_init_n (info->ignore_hash,
1190 1.6 christos bfd_hash_newfunc,
1191 1.12 christos sizeof (struct bfd_hash_entry),
1192 1.2 skrll 61))
1193 1.2 skrll fatal (_("%P: bfd_hash_table_init failed: %E\n"));
1194 1.10 christos }
1195 1.12 christos
1196 1.2 skrll if (bfd_hash_lookup (info->ignore_hash, name, true, true) == NULL)
1197 1.2 skrll fatal (_("%P: bfd_hash_lookup failed: %E\n"));
1198 1.1 skrll }
1199 1.1 skrll
1200 1.1 skrll /* Record a symbol to be wrapped, from the --wrap option. */
1201 1.1 skrll
1202 1.1 skrll void
1203 1.1 skrll add_wrap (const char *name)
1204 1.1 skrll {
1205 1.6 christos if (link_info.wrap_hash == NULL)
1206 1.6 christos {
1207 1.1 skrll link_info.wrap_hash
1208 1.1 skrll = (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
1209 1.1 skrll if (!bfd_hash_table_init_n (link_info.wrap_hash,
1210 1.1 skrll bfd_hash_newfunc,
1211 1.12 christos sizeof (struct bfd_hash_entry),
1212 1.1 skrll 61))
1213 1.1 skrll fatal (_("%P: bfd_hash_table_init failed: %E\n"));
1214 1.10 christos }
1215 1.12 christos
1216 1.1 skrll if (bfd_hash_lookup (link_info.wrap_hash, name, true, true) == NULL)
1217 1.1 skrll fatal (_("%P: bfd_hash_lookup failed: %E\n"));
1218 1.1 skrll }
1219 1.1 skrll
1220 1.1 skrll /* Handle the -retain-symbols-file option. */
1221 1.1 skrll
1222 1.1 skrll void
1223 1.1 skrll add_keepsyms_file (const char *filename)
1224 1.1 skrll {
1225 1.1 skrll FILE *file;
1226 1.1 skrll char *buf;
1227 1.1 skrll size_t bufsize;
1228 1.1 skrll int c;
1229 1.1 skrll
1230 1.1 skrll if (link_info.strip == strip_some)
1231 1.1 skrll einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
1232 1.1 skrll
1233 1.1 skrll file = fopen (filename, "r");
1234 1.1 skrll if (file == NULL)
1235 1.1 skrll {
1236 1.1 skrll bfd_set_error (bfd_error_system_call);
1237 1.1 skrll einfo ("%X%P: %s: %E\n", filename);
1238 1.1 skrll return;
1239 1.3 christos }
1240 1.3 christos
1241 1.1 skrll link_info.keep_hash = (struct bfd_hash_table *)
1242 1.1 skrll xmalloc (sizeof (struct bfd_hash_table));
1243 1.12 christos if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
1244 1.1 skrll sizeof (struct bfd_hash_entry)))
1245 1.1 skrll fatal (_("%P: bfd_hash_table_init failed: %E\n"));
1246 1.3 christos
1247 1.1 skrll bufsize = 100;
1248 1.1 skrll buf = (char *) xmalloc (bufsize);
1249 1.1 skrll
1250 1.1 skrll c = getc (file);
1251 1.1 skrll while (c != EOF)
1252 1.1 skrll {
1253 1.1 skrll while (ISSPACE (c))
1254 1.1 skrll c = getc (file);
1255 1.1 skrll
1256 1.1 skrll if (c != EOF)
1257 1.1 skrll {
1258 1.6 christos size_t len = 0;
1259 1.1 skrll
1260 1.1 skrll while (!ISSPACE (c) && c != EOF)
1261 1.1 skrll {
1262 1.1 skrll buf[len] = c;
1263 1.1 skrll ++len;
1264 1.1 skrll if (len >= bufsize)
1265 1.3 christos {
1266 1.1 skrll bufsize *= 2;
1267 1.1 skrll buf = (char *) xrealloc (buf, bufsize);
1268 1.1 skrll }
1269 1.1 skrll c = getc (file);
1270 1.1 skrll }
1271 1.1 skrll
1272 1.10 christos buf[len] = '\0';
1273 1.12 christos
1274 1.1 skrll if (bfd_hash_lookup (link_info.keep_hash, buf, true, true) == NULL)
1275 1.1 skrll fatal (_("%P: bfd_hash_lookup for insertion failed: %E\n"));
1276 1.1 skrll }
1277 1.1 skrll }
1278 1.1 skrll
1279 1.1 skrll if (link_info.strip != strip_none)
1280 1.1 skrll einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
1281 1.1 skrll
1282 1.5 christos free (buf);
1283 1.1 skrll link_info.strip = strip_some;
1284 1.1 skrll fclose (file);
1285 1.1 skrll }
1286 1.1 skrll
1287 1.1 skrll /* Callbacks from the BFD linker routines. */
1289 1.1 skrll
1290 1.10 christos /* This is called when BFD has decided to include an archive member in
1291 1.1 skrll a link. */
1292 1.1 skrll
1293 1.3 christos static bool
1294 1.3 christos add_archive_element (struct bfd_link_info *info,
1295 1.1 skrll bfd *abfd,
1296 1.1 skrll const char *name,
1297 1.8 christos bfd **subsbfd ATTRIBUTE_UNUSED)
1298 1.3 christos {
1299 1.1 skrll lang_input_statement_type *input;
1300 1.3 christos lang_input_statement_type *parent;
1301 1.3 christos lang_input_statement_type orig_input;
1302 1.7 christos
1303 1.10 christos input = (lang_input_statement_type *)
1304 1.10 christos xcalloc (1, sizeof (lang_input_statement_type));
1305 1.1 skrll input->header.type = lang_input_statement_enum;
1306 1.1 skrll input->filename = bfd_get_filename (abfd);
1307 1.3 christos input->local_sym_name = bfd_get_filename (abfd);
1308 1.3 christos input->the_bfd = abfd;
1309 1.3 christos
1310 1.3 christos /* Save the original data for trace files/tries below, as plugins
1311 1.10 christos (if enabled) may possibly alter it to point to a replacement
1312 1.12 christos BFD, but we still want to output the original BFD filename. */
1313 1.12 christos orig_input = *input;
1314 1.12 christos #if BFD_SUPPORTS_PLUGINS
1315 1.12 christos /* Don't claim a fat IR object if no IR object should be claimed. */
1316 1.3 christos if (link_info.lto_plugin_active
1317 1.12 christos && (!no_more_claiming
1318 1.3 christos || bfd_get_lto_type (abfd) != lto_fat_ir_object))
1319 1.5 christos {
1320 1.12 christos ld_start_phase (PHASE_PLUGINS);
1321 1.12 christos /* We must offer this archive member to the plugins to claim. */
1322 1.5 christos plugin_maybe_claim (input);
1323 1.5 christos ld_stop_phase (PHASE_PLUGINS);
1324 1.6 christos
1325 1.6 christos if (input->flags.claimed)
1326 1.6 christos {
1327 1.6 christos if (no_more_claiming)
1328 1.9 christos {
1329 1.10 christos /* Don't claim new IR symbols after all IR symbols have
1330 1.6 christos been claimed. */
1331 1.6 christos if (verbose)
1332 1.10 christos info_msg ("%pI: no new IR symbols to claim\n",
1333 1.6 christos &orig_input);
1334 1.10 christos input->flags.claimed = 0;
1335 1.5 christos return false;
1336 1.3 christos }
1337 1.3 christos input->flags.claim_archive = true;
1338 1.12 christos *subsbfd = input->the_bfd;
1339 1.12 christos }
1340 1.10 christos }
1341 1.10 christos else
1342 1.10 christos cmdline_check_object_only_section (input->the_bfd, false);
1343 1.10 christos #endif /* BFD_SUPPORTS_PLUGINS */
1344 1.10 christos
1345 1.10 christos if (link_info.input_bfds_tail == &input->the_bfd->link.next
1346 1.10 christos || input->the_bfd->link.next != NULL)
1347 1.10 christos {
1348 1.10 christos /* We have already loaded this element, and are attempting to
1349 1.10 christos load it again. This can happen when the archive map doesn't
1350 1.10 christos match actual symbols defined by the element. */
1351 1.10 christos free (input);
1352 1.10 christos bfd_set_error (bfd_error_malformed_archive);
1353 1.10 christos return false;
1354 1.10 christos }
1355 1.10 christos
1356 1.10 christos /* Set the file_chain pointer of archives to the last element loaded
1357 1.10 christos from the archive. See ldlang.c:find_rescan_insertion. */
1358 1.3 christos parent = bfd_usrdata (abfd->my_archive);
1359 1.1 skrll if (parent != NULL && !parent->flags.reload)
1360 1.1 skrll parent->next = input;
1361 1.1 skrll
1362 1.1 skrll ldlang_add_file (input);
1363 1.10 christos
1364 1.1 skrll if (config.map_file != NULL)
1365 1.1 skrll {
1366 1.1 skrll static bool header_printed;
1367 1.1 skrll struct bfd_link_hash_entry *h;
1368 1.10 christos bfd *from;
1369 1.9 christos int len;
1370 1.9 christos
1371 1.10 christos h = bfd_link_hash_lookup (info->hash, name, false, false, true);
1372 1.10 christos if (h == NULL
1373 1.1 skrll && info->pei386_auto_import
1374 1.1 skrll && startswith (name, "__imp_"))
1375 1.1 skrll h = bfd_link_hash_lookup (info->hash, name + 6, false, false, true);
1376 1.1 skrll
1377 1.1 skrll if (h == NULL)
1378 1.1 skrll from = NULL;
1379 1.1 skrll else
1380 1.1 skrll {
1381 1.1 skrll switch (h->type)
1382 1.1 skrll {
1383 1.1 skrll default:
1384 1.1 skrll from = NULL;
1385 1.1 skrll break;
1386 1.1 skrll
1387 1.1 skrll case bfd_link_hash_defined:
1388 1.1 skrll case bfd_link_hash_defweak:
1389 1.1 skrll from = h->u.def.section->owner;
1390 1.1 skrll break;
1391 1.1 skrll
1392 1.1 skrll case bfd_link_hash_undefined:
1393 1.1 skrll case bfd_link_hash_undefweak:
1394 1.1 skrll from = h->u.undef.abfd;
1395 1.1 skrll break;
1396 1.1 skrll
1397 1.1 skrll case bfd_link_hash_common:
1398 1.1 skrll from = h->u.c.p->section->owner;
1399 1.1 skrll break;
1400 1.6 christos }
1401 1.1 skrll }
1402 1.7 christos
1403 1.10 christos if (!header_printed)
1404 1.1 skrll {
1405 1.1 skrll minfo (_("Archive member included to satisfy reference by file (symbol)\n\n"));
1406 1.6 christos header_printed = true;
1407 1.6 christos }
1408 1.1 skrll
1409 1.1 skrll if (abfd->my_archive == NULL
1410 1.1 skrll || bfd_is_thin_archive (abfd->my_archive))
1411 1.1 skrll {
1412 1.1 skrll minfo ("%s", bfd_get_filename (abfd));
1413 1.1 skrll len = strlen (bfd_get_filename (abfd));
1414 1.6 christos }
1415 1.1 skrll else
1416 1.6 christos {
1417 1.1 skrll minfo ("%s(%s)", bfd_get_filename (abfd->my_archive),
1418 1.1 skrll bfd_get_filename (abfd));
1419 1.1 skrll len = (strlen (bfd_get_filename (abfd->my_archive))
1420 1.1 skrll + strlen (bfd_get_filename (abfd))
1421 1.1 skrll + 2);
1422 1.1 skrll }
1423 1.1 skrll
1424 1.1 skrll if (len >= 29)
1425 1.1 skrll {
1426 1.11 christos print_nl ();
1427 1.1 skrll len = 0;
1428 1.1 skrll }
1429 1.8 christos print_spaces (30 - len);
1430 1.1 skrll
1431 1.8 christos if (from != NULL)
1432 1.1 skrll minfo ("%pB ", from);
1433 1.1 skrll if (h != NULL)
1434 1.1 skrll minfo ("(%pT)\n", h->root.string);
1435 1.1 skrll else
1436 1.9 christos minfo ("(%s)\n", name);
1437 1.9 christos }
1438 1.9 christos
1439 1.8 christos if (verbose
1440 1.10 christos || trace_files > 1
1441 1.1 skrll || (trace_files && bfd_is_thin_archive (orig_input.the_bfd->my_archive)))
1442 1.1 skrll info_msg ("%pI\n", &orig_input);
1443 1.1 skrll return true;
1444 1.1 skrll }
1445 1.1 skrll
1446 1.6 christos /* This is called when BFD has discovered a symbol which is defined
1447 1.3 christos multiple times. */
1448 1.3 christos
1449 1.1 skrll static void
1450 1.1 skrll multiple_definition (struct bfd_link_info *info,
1451 1.1 skrll struct bfd_link_hash_entry *h,
1452 1.1 skrll bfd *nbfd,
1453 1.3 christos asection *nsec,
1454 1.3 christos bfd_vma nval)
1455 1.3 christos {
1456 1.3 christos const char *name;
1457 1.3 christos bfd *obfd;
1458 1.3 christos asection *osec;
1459 1.6 christos bfd_vma oval;
1460 1.3 christos
1461 1.3 christos if (info->allow_multiple_definition)
1462 1.3 christos return;
1463 1.3 christos
1464 1.3 christos switch (h->type)
1465 1.3 christos {
1466 1.3 christos case bfd_link_hash_defined:
1467 1.3 christos osec = h->u.def.section;
1468 1.3 christos oval = h->u.def.value;
1469 1.3 christos obfd = h->u.def.section->owner;
1470 1.3 christos break;
1471 1.3 christos case bfd_link_hash_indirect:
1472 1.3 christos osec = bfd_ind_section_ptr;
1473 1.3 christos oval = 0;
1474 1.3 christos obfd = NULL;
1475 1.3 christos break;
1476 1.3 christos default:
1477 1.3 christos abort ();
1478 1.3 christos }
1479 1.3 christos
1480 1.3 christos /* Ignore a redefinition of an absolute symbol to the
1481 1.3 christos same value; it's harmless. */
1482 1.3 christos if (h->type == bfd_link_hash_defined
1483 1.6 christos && bfd_is_abs_section (osec)
1484 1.3 christos && bfd_is_abs_section (nsec)
1485 1.1 skrll && nval == oval)
1486 1.1 skrll return;
1487 1.1 skrll
1488 1.1 skrll /* If either section has the output_section field set to
1489 1.1 skrll bfd_abs_section_ptr, it means that the section is being
1490 1.8 christos discarded, and this is not really a multiple definition at all.
1491 1.8 christos FIXME: It would be cleaner to somehow ignore symbols defined in
1492 1.8 christos sections which are being discarded. */
1493 1.8 christos if (!info->prohibit_multiple_definition_absolute
1494 1.8 christos && ((osec->output_section != NULL
1495 1.8 christos && ! bfd_is_abs_section (osec)
1496 1.8 christos && bfd_is_abs_section (osec->output_section))
1497 1.6 christos || (nsec->output_section != NULL
1498 1.1 skrll && !bfd_is_abs_section (nsec)
1499 1.3 christos && bfd_is_abs_section (nsec->output_section))))
1500 1.3 christos return;
1501 1.3 christos
1502 1.3 christos name = h->root.string;
1503 1.3 christos if (nbfd == NULL)
1504 1.3 christos {
1505 1.3 christos nbfd = obfd;
1506 1.3 christos nsec = osec;
1507 1.10 christos nval = oval;
1508 1.10 christos obfd = NULL;
1509 1.10 christos }
1510 1.10 christos if (info->warn_multiple_definition)
1511 1.10 christos einfo (_("%P: %C: warning: multiple definition of `%pT'"),
1512 1.10 christos nbfd, nsec, nval, name);
1513 1.1 skrll else
1514 1.8 christos einfo (_("%X%P: %C: multiple definition of `%pT'"),
1515 1.8 christos nbfd, nsec, nval, name);
1516 1.1 skrll if (obfd != NULL)
1517 1.5 christos einfo (_("; %D: first defined here"), obfd, osec, oval);
1518 1.1 skrll einfo ("\n");
1519 1.8 christos
1520 1.5 christos if (RELAXATION_ENABLED_BY_USER)
1521 1.1 skrll {
1522 1.1 skrll einfo (_("%P: disabling relaxation; it will not work with multiple definitions\n"));
1523 1.1 skrll DISABLE_RELAXATION;
1524 1.1 skrll }
1525 1.1 skrll }
1526 1.1 skrll
1527 1.1 skrll /* This is called when there is a definition of a common symbol, or
1528 1.1 skrll when a common symbol is found for a symbol that is already defined,
1529 1.6 christos or when two common symbols are found. We only do something if
1530 1.1 skrll -warn-common was used. */
1531 1.3 christos
1532 1.1 skrll static void
1533 1.1 skrll multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1534 1.1 skrll struct bfd_link_hash_entry *h,
1535 1.1 skrll bfd *nbfd,
1536 1.3 christos enum bfd_link_hash_type ntype,
1537 1.3 christos bfd_vma nsize)
1538 1.3 christos {
1539 1.3 christos const char *name;
1540 1.3 christos bfd *obfd;
1541 1.3 christos enum bfd_link_hash_type otype;
1542 1.6 christos bfd_vma osize;
1543 1.1 skrll
1544 1.3 christos if (!config.warn_common)
1545 1.3 christos return;
1546 1.3 christos
1547 1.3 christos name = h->root.string;
1548 1.3 christos otype = h->type;
1549 1.3 christos if (otype == bfd_link_hash_common)
1550 1.3 christos {
1551 1.3 christos obfd = h->u.c.p->section->owner;
1552 1.3 christos osize = h->u.c.size;
1553 1.3 christos }
1554 1.3 christos else if (otype == bfd_link_hash_defined
1555 1.3 christos || otype == bfd_link_hash_defweak)
1556 1.3 christos {
1557 1.3 christos obfd = h->u.def.section->owner;
1558 1.3 christos osize = 0;
1559 1.3 christos }
1560 1.3 christos else
1561 1.3 christos {
1562 1.3 christos /* FIXME: It would nice if we could report the BFD which defined
1563 1.3 christos an indirect symbol, but we don't have anywhere to store the
1564 1.3 christos information. */
1565 1.3 christos obfd = NULL;
1566 1.1 skrll osize = 0;
1567 1.1 skrll }
1568 1.1 skrll
1569 1.1 skrll if (ntype == bfd_link_hash_defined
1570 1.1 skrll || ntype == bfd_link_hash_defweak
1571 1.1 skrll || ntype == bfd_link_hash_indirect)
1572 1.8 christos {
1573 1.8 christos ASSERT (otype == bfd_link_hash_common);
1574 1.8 christos if (obfd != NULL)
1575 1.8 christos einfo (_("%P: %pB: warning: definition of `%pT' overriding common"
1576 1.8 christos " from %pB\n"),
1577 1.8 christos nbfd, name, obfd);
1578 1.1 skrll else
1579 1.1 skrll einfo (_("%P: %pB: warning: definition of `%pT' overriding common\n"),
1580 1.1 skrll nbfd, name);
1581 1.1 skrll }
1582 1.1 skrll else if (otype == bfd_link_hash_defined
1583 1.1 skrll || otype == bfd_link_hash_defweak
1584 1.1 skrll || otype == bfd_link_hash_indirect)
1585 1.8 christos {
1586 1.8 christos ASSERT (ntype == bfd_link_hash_common);
1587 1.8 christos if (obfd != NULL)
1588 1.8 christos einfo (_("%P: %pB: warning: common of `%pT' overridden by definition"
1589 1.8 christos " from %pB\n"),
1590 1.8 christos nbfd, name, obfd);
1591 1.1 skrll else
1592 1.1 skrll einfo (_("%P: %pB: warning: common of `%pT' overridden by definition\n"),
1593 1.1 skrll nbfd, name);
1594 1.1 skrll }
1595 1.1 skrll else
1596 1.1 skrll {
1597 1.1 skrll ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1598 1.8 christos if (osize > nsize)
1599 1.8 christos {
1600 1.8 christos if (obfd != NULL)
1601 1.8 christos einfo (_("%P: %pB: warning: common of `%pT' overridden"
1602 1.8 christos " by larger common from %pB\n"),
1603 1.8 christos nbfd, name, obfd);
1604 1.8 christos else
1605 1.1 skrll einfo (_("%P: %pB: warning: common of `%pT' overridden"
1606 1.1 skrll " by larger common\n"),
1607 1.1 skrll nbfd, name);
1608 1.1 skrll }
1609 1.8 christos else if (nsize > osize)
1610 1.8 christos {
1611 1.8 christos if (obfd != NULL)
1612 1.8 christos einfo (_("%P: %pB: warning: common of `%pT' overriding"
1613 1.8 christos " smaller common from %pB\n"),
1614 1.8 christos nbfd, name, obfd);
1615 1.8 christos else
1616 1.1 skrll einfo (_("%P: %pB: warning: common of `%pT' overriding"
1617 1.1 skrll " smaller common\n"),
1618 1.1 skrll nbfd, name);
1619 1.1 skrll }
1620 1.8 christos else
1621 1.8 christos {
1622 1.8 christos if (obfd != NULL)
1623 1.8 christos einfo (_("%P: %pB and %pB: warning: multiple common of `%pT'\n"),
1624 1.8 christos nbfd, obfd, name);
1625 1.1 skrll else
1626 1.1 skrll einfo (_("%P: %pB: warning: multiple common of `%pT'\n"),
1627 1.1 skrll nbfd, name);
1628 1.1 skrll }
1629 1.1 skrll }
1630 1.1 skrll }
1631 1.1 skrll
1632 1.1 skrll /* This is called when BFD has discovered a set element. H is the
1633 1.6 christos entry in the linker hash table for the set. SECTION and VALUE
1634 1.1 skrll represent a value which should be added to the set. */
1635 1.1 skrll
1636 1.1 skrll static void
1637 1.1 skrll add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1638 1.1 skrll struct bfd_link_hash_entry *h,
1639 1.1 skrll bfd_reloc_code_real_type reloc,
1640 1.1 skrll bfd *abfd,
1641 1.1 skrll asection *section,
1642 1.1 skrll bfd_vma value)
1643 1.1 skrll {
1644 1.1 skrll if (config.warn_constructors)
1645 1.6 christos einfo (_("%P: warning: global constructor %s used\n"),
1646 1.6 christos h->root.string);
1647 1.1 skrll
1648 1.1 skrll if (!config.build_constructors)
1649 1.1 skrll return;
1650 1.1 skrll
1651 1.1 skrll ldctor_add_set_entry (h, reloc, NULL, section, value);
1652 1.1 skrll
1653 1.1 skrll if (h->type == bfd_link_hash_new)
1654 1.1 skrll {
1655 1.1 skrll h->type = bfd_link_hash_undefined;
1656 1.1 skrll h->u.undef.abfd = abfd;
1657 1.1 skrll /* We don't call bfd_link_add_undef to add this to the list of
1658 1.1 skrll undefined symbols because we are going to define it
1659 1.1 skrll ourselves. */
1660 1.1 skrll }
1661 1.1 skrll }
1662 1.1 skrll
1663 1.1 skrll /* This is called when BFD has discovered a constructor. This is only
1664 1.1 skrll called for some object file formats--those which do not handle
1665 1.6 christos constructors in some more clever fashion. This is similar to
1666 1.1 skrll adding an element to a set, but less general. */
1667 1.10 christos
1668 1.1 skrll static void
1669 1.1 skrll constructor_callback (struct bfd_link_info *info,
1670 1.1 skrll bool constructor,
1671 1.1 skrll const char *name,
1672 1.1 skrll bfd *abfd,
1673 1.1 skrll asection *section,
1674 1.1 skrll bfd_vma value)
1675 1.1 skrll {
1676 1.1 skrll char *s;
1677 1.1 skrll struct bfd_link_hash_entry *h;
1678 1.1 skrll char set_name[1 + sizeof "__CTOR_LIST__"];
1679 1.1 skrll
1680 1.6 christos if (config.warn_constructors)
1681 1.6 christos einfo (_("%P: warning: global constructor %s used\n"), name);
1682 1.1 skrll
1683 1.1 skrll if (!config.build_constructors)
1684 1.1 skrll return;
1685 1.5 christos
1686 1.5 christos /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1687 1.1 skrll useful error message. */
1688 1.12 christos if (bfd_reloc_type_lookup (info->output_bfd, BFD_RELOC_CTOR) == NULL
1689 1.1 skrll && (bfd_link_relocatable (info)
1690 1.1 skrll || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1691 1.1 skrll fatal (_("%P: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1692 1.1 skrll
1693 1.1 skrll s = set_name;
1694 1.1 skrll if (bfd_get_symbol_leading_char (abfd) != '\0')
1695 1.1 skrll *s++ = bfd_get_symbol_leading_char (abfd);
1696 1.1 skrll if (constructor)
1697 1.1 skrll strcpy (s, "__CTOR_LIST__");
1698 1.10 christos else
1699 1.1 skrll strcpy (s, "__DTOR_LIST__");
1700 1.12 christos
1701 1.1 skrll h = bfd_link_hash_lookup (info->hash, set_name, true, true, true);
1702 1.1 skrll if (h == (struct bfd_link_hash_entry *) NULL)
1703 1.1 skrll fatal (_("%P: bfd_link_hash_lookup failed: %E\n"));
1704 1.1 skrll if (h->type == bfd_link_hash_new)
1705 1.1 skrll {
1706 1.1 skrll h->type = bfd_link_hash_undefined;
1707 1.1 skrll h->u.undef.abfd = abfd;
1708 1.1 skrll /* We don't call bfd_link_add_undef to add this to the list of
1709 1.1 skrll undefined symbols because we are going to define it
1710 1.1 skrll ourselves. */
1711 1.1 skrll }
1712 1.1 skrll
1713 1.1 skrll ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
1714 1.1 skrll }
1715 1.1 skrll
1716 1.1 skrll /* A structure used by warning_callback to pass information through
1717 1.1 skrll bfd_map_over_sections. */
1718 1.10 christos
1719 1.1 skrll struct warning_callback_info
1720 1.1 skrll {
1721 1.1 skrll bool found;
1722 1.1 skrll const char *warning;
1723 1.1 skrll const char *symbol;
1724 1.5 christos asymbol **asymbols;
1725 1.5 christos };
1726 1.5 christos
1727 1.10 christos /* Look through the relocs to see if we can find a plausible address
1728 1.5 christos for SYMBOL in ABFD. Return TRUE if found. Otherwise return FALSE. */
1729 1.5 christos
1730 1.5 christos static bool
1731 1.5 christos symbol_warning (const char *warning, const char *symbol, bfd *abfd)
1732 1.5 christos {
1733 1.12 christos struct warning_callback_info cinfo;
1734 1.5 christos
1735 1.10 christos if (!bfd_generic_link_read_symbols (abfd))
1736 1.5 christos fatal (_("%P: %pB: could not read symbols: %E\n"), abfd);
1737 1.5 christos
1738 1.5 christos cinfo.found = false;
1739 1.5 christos cinfo.warning = warning;
1740 1.5 christos cinfo.symbol = symbol;
1741 1.5 christos cinfo.asymbols = bfd_get_outsymbols (abfd);
1742 1.5 christos bfd_map_over_sections (abfd, warning_find_reloc, &cinfo);
1743 1.1 skrll return cinfo.found;
1744 1.1 skrll }
1745 1.6 christos
1746 1.1 skrll /* This is called when there is a reference to a warning symbol. */
1747 1.1 skrll
1748 1.1 skrll static void
1749 1.1 skrll warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1750 1.1 skrll const char *warning,
1751 1.1 skrll const char *symbol,
1752 1.1 skrll bfd *abfd,
1753 1.1 skrll asection *section,
1754 1.1 skrll bfd_vma address)
1755 1.6 christos {
1756 1.1 skrll /* This is a hack to support warn_multiple_gp. FIXME: This should
1757 1.6 christos have a cleaner interface, but what? */
1758 1.1 skrll if (!config.warn_multiple_gp
1759 1.1 skrll && strcmp (warning, "using multiple gp values") == 0)
1760 1.8 christos return;
1761 1.1 skrll
1762 1.1 skrll if (section != NULL)
1763 1.1 skrll einfo ("%P: %C: %s%s\n", abfd, section, address, _("warning: "), warning);
1764 1.8 christos else if (abfd == NULL)
1765 1.6 christos einfo ("%P: %s%s\n", _("warning: "), warning);
1766 1.1 skrll else if (symbol == NULL)
1767 1.5 christos einfo ("%P: %pB: %s%s\n", abfd, _("warning: "), warning);
1768 1.5 christos else if (!symbol_warning (warning, symbol, abfd))
1769 1.5 christos {
1770 1.5 christos bfd *b;
1771 1.6 christos /* Search all input files for a reference to SYMBOL. */
1772 1.8 christos for (b = info->input_bfds; b; b = b->link.next)
1773 1.1 skrll if (b != abfd && symbol_warning (warning, symbol, b))
1774 1.1 skrll return;
1775 1.1 skrll einfo ("%P: %pB: %s%s\n", abfd, _("warning: "), warning);
1776 1.1 skrll }
1777 1.1 skrll }
1778 1.1 skrll
1779 1.1 skrll /* This is called by warning_callback for each section. It checks the
1780 1.1 skrll relocs of the section to see if it can find a reference to the
1781 1.1 skrll symbol which triggered the warning. If it can, it uses the reloc
1782 1.1 skrll to give an error message with a file and line number. */
1783 1.1 skrll
1784 1.3 christos static void
1785 1.1 skrll warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
1786 1.1 skrll {
1787 1.1 skrll struct warning_callback_info *info = (struct warning_callback_info *) iarg;
1788 1.1 skrll long relsize;
1789 1.1 skrll arelent **relpp;
1790 1.1 skrll long relcount;
1791 1.1 skrll arelent **p, **pend;
1792 1.1 skrll
1793 1.1 skrll if (info->found)
1794 1.1 skrll return;
1795 1.12 christos
1796 1.1 skrll relsize = bfd_get_reloc_upper_bound (abfd, sec);
1797 1.1 skrll if (relsize < 0)
1798 1.1 skrll fatal (_("%P: %pB: could not read relocs: %E\n"), abfd);
1799 1.3 christos if (relsize == 0)
1800 1.1 skrll return;
1801 1.1 skrll
1802 1.12 christos relpp = (arelent **) xmalloc (relsize);
1803 1.1 skrll relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1804 1.1 skrll if (relcount < 0)
1805 1.1 skrll fatal (_("%P: %pB: could not read relocs: %E\n"), abfd);
1806 1.1 skrll
1807 1.1 skrll p = relpp;
1808 1.1 skrll pend = p + relcount;
1809 1.1 skrll for (; p < pend && *p != NULL; p++)
1810 1.1 skrll {
1811 1.1 skrll arelent *q = *p;
1812 1.1 skrll
1813 1.1 skrll if (q->sym_ptr_ptr != NULL
1814 1.1 skrll && *q->sym_ptr_ptr != NULL
1815 1.11 christos && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1816 1.1 skrll {
1817 1.10 christos /* We found a reloc for the symbol we are looking for. */
1818 1.1 skrll einfo ("%P: %H: %s%s\n", abfd, sec, q->address, _("warning: "),
1819 1.1 skrll info->warning);
1820 1.1 skrll info->found = true;
1821 1.1 skrll break;
1822 1.1 skrll }
1823 1.1 skrll }
1824 1.1 skrll
1825 1.10 christos free (relpp);
1826 1.10 christos }
1827 1.10 christos
1828 1.10 christos #if SUPPORT_ERROR_HANDLING_SCRIPT
1829 1.1 skrll char * error_handling_script = NULL;
1830 1.1 skrll #endif
1831 1.6 christos
1832 1.5 christos /* This is called when an undefined symbol is found. */
1833 1.1 skrll
1834 1.1 skrll static void
1835 1.1 skrll undefined_symbol (struct bfd_link_info *info,
1836 1.1 skrll const char *name,
1837 1.10 christos bfd *abfd,
1838 1.1 skrll asection *section,
1839 1.1 skrll bfd_vma address,
1840 1.1 skrll bool error)
1841 1.1 skrll {
1842 1.1 skrll static char *error_name;
1843 1.1 skrll static unsigned int error_count;
1844 1.2 skrll
1845 1.10 christos #define MAX_ERRORS_IN_A_ROW 5
1846 1.6 christos
1847 1.2 skrll if (info->ignore_hash != NULL
1848 1.1 skrll && bfd_hash_lookup (info->ignore_hash, name, false, false) != NULL)
1849 1.1 skrll return;
1850 1.1 skrll
1851 1.5 christos if (config.warn_once)
1852 1.1 skrll {
1853 1.1 skrll /* Only warn once about a particular undefined symbol. */
1854 1.1 skrll add_ignoresym (info, name);
1855 1.1 skrll }
1856 1.1 skrll
1857 1.1 skrll /* We never print more than a reasonable number of errors in a row
1858 1.1 skrll for a single symbol. */
1859 1.1 skrll if (error_name != NULL
1860 1.1 skrll && strcmp (name, error_name) == 0)
1861 1.1 skrll ++error_count;
1862 1.10 christos else
1863 1.1 skrll {
1864 1.1 skrll error_count = 0;
1865 1.1 skrll free (error_name);
1866 1.10 christos error_name = xstrdup (name);
1867 1.10 christos }
1868 1.10 christos
1869 1.10 christos #if SUPPORT_ERROR_HANDLING_SCRIPT
1870 1.10 christos if (error_handling_script != NULL
1871 1.10 christos && error_count < MAX_ERRORS_IN_A_ROW)
1872 1.10 christos {
1873 1.10 christos char * argv[4];
1874 1.10 christos const char * res;
1875 1.10 christos int status, err;
1876 1.10 christos
1877 1.10 christos argv[0] = error_handling_script;
1878 1.10 christos argv[1] = "undefined-symbol";
1879 1.10 christos argv[2] = (char *) name;
1880 1.10 christos argv[3] = NULL;
1881 1.10 christos
1882 1.10 christos if (verbose)
1883 1.10 christos einfo (_("%P: About to run error handling script '%s' with arguments: '%s' '%s'\n"),
1884 1.10 christos argv[0], argv[1], argv[2]);
1885 1.10 christos
1886 1.10 christos res = pex_one (PEX_SEARCH, error_handling_script, argv,
1887 1.10 christos N_("error handling script"),
1888 1.10 christos NULL /* Send stdout to random, temp file. */,
1889 1.10 christos NULL /* Write to stderr. */,
1890 1.10 christos &status, &err);
1891 1.10 christos if (res != NULL)
1892 1.10 christos {
1893 1.10 christos einfo (_("%P: Failed to run error handling script '%s', reason: "),
1894 1.10 christos error_handling_script);
1895 1.10 christos /* FIXME: We assume here that errrno == err. */
1896 1.10 christos perror (res);
1897 1.10 christos }
1898 1.10 christos /* We ignore the return status of the script and
1899 1.10 christos carry on to issue the normal error message. */
1900 1.1 skrll }
1901 1.1 skrll #endif /* SUPPORT_ERROR_HANDLING_SCRIPT */
1902 1.1 skrll
1903 1.1 skrll if (section != NULL)
1904 1.1 skrll {
1905 1.11 christos if (error_count < MAX_ERRORS_IN_A_ROW)
1906 1.1 skrll {
1907 1.1 skrll if (error)
1908 1.11 christos einfo (_("%X%P: %H: undefined reference to `%pT'\n"),
1909 1.1 skrll abfd, section, address, name);
1910 1.1 skrll else
1911 1.1 skrll einfo (_("%P: %H: warning: undefined reference to `%pT'\n"),
1912 1.1 skrll abfd, section, address, name);
1913 1.1 skrll }
1914 1.8 christos else if (error_count == MAX_ERRORS_IN_A_ROW)
1915 1.1 skrll {
1916 1.1 skrll if (error)
1917 1.8 christos einfo (_("%X%P: %D: more undefined references to `%pT' follow\n"),
1918 1.1 skrll abfd, section, address, name);
1919 1.1 skrll else
1920 1.1 skrll einfo (_("%P: %D: warning: more undefined references to `%pT' follow\n"),
1921 1.1 skrll abfd, section, address, name);
1922 1.1 skrll }
1923 1.1 skrll else if (error)
1924 1.1 skrll einfo ("%X");
1925 1.1 skrll }
1926 1.1 skrll else
1927 1.1 skrll {
1928 1.8 christos if (error_count < MAX_ERRORS_IN_A_ROW)
1929 1.1 skrll {
1930 1.1 skrll if (error)
1931 1.8 christos einfo (_("%X%P: %pB: undefined reference to `%pT'\n"),
1932 1.1 skrll abfd, name);
1933 1.1 skrll else
1934 1.1 skrll einfo (_("%P: %pB: warning: undefined reference to `%pT'\n"),
1935 1.1 skrll abfd, name);
1936 1.1 skrll }
1937 1.8 christos else if (error_count == MAX_ERRORS_IN_A_ROW)
1938 1.1 skrll {
1939 1.1 skrll if (error)
1940 1.8 christos einfo (_("%X%P: %pB: more undefined references to `%pT' follow\n"),
1941 1.1 skrll abfd, name);
1942 1.1 skrll else
1943 1.1 skrll einfo (_("%P: %pB: warning: more undefined references to `%pT' follow\n"),
1944 1.1 skrll abfd, name);
1945 1.1 skrll }
1946 1.1 skrll else if (error)
1947 1.1 skrll einfo ("%X");
1948 1.1 skrll }
1949 1.1 skrll }
1950 1.1 skrll
1951 1.1 skrll /* Counter to limit the number of relocation overflow error messages
1952 1.1 skrll to print. Errors are printed as it is decremented. When it's
1953 1.1 skrll called and the counter is zero, a final message is printed
1954 1.1 skrll indicating more relocations were omitted. When it gets to -1, no
1955 1.1 skrll such errors are printed. If it's initially set to a value less
1956 1.1 skrll than -1, all such errors will be printed (--verbose does this). */
1957 1.1 skrll
1958 1.1 skrll int overflow_cutoff_limit = 10;
1959 1.6 christos
1960 1.5 christos /* This is called when a reloc overflows. */
1961 1.1 skrll
1962 1.1 skrll static void
1963 1.1 skrll reloc_overflow (struct bfd_link_info *info,
1964 1.1 skrll struct bfd_link_hash_entry *entry,
1965 1.1 skrll const char *name,
1966 1.1 skrll const char *reloc_name,
1967 1.1 skrll bfd_vma addend,
1968 1.1 skrll bfd *abfd,
1969 1.1 skrll asection *section,
1970 1.6 christos bfd_vma address)
1971 1.1 skrll {
1972 1.9 christos if (overflow_cutoff_limit == -1)
1973 1.1 skrll return;
1974 1.1 skrll
1975 1.1 skrll einfo ("%X%H:", abfd, section, address);
1976 1.1 skrll
1977 1.1 skrll if (overflow_cutoff_limit >= 0
1978 1.6 christos && overflow_cutoff_limit-- == 0)
1979 1.1 skrll {
1980 1.1 skrll einfo (_(" additional relocation overflows omitted from the output\n"));
1981 1.1 skrll return;
1982 1.1 skrll }
1983 1.1 skrll
1984 1.1 skrll if (entry)
1985 1.1 skrll {
1986 1.1 skrll while (entry->type == bfd_link_hash_indirect
1987 1.1 skrll || entry->type == bfd_link_hash_warning)
1988 1.1 skrll entry = entry->u.i.link;
1989 1.1 skrll switch (entry->type)
1990 1.6 christos {
1991 1.8 christos case bfd_link_hash_undefined:
1992 1.1 skrll case bfd_link_hash_undefweak:
1993 1.1 skrll einfo (_(" relocation truncated to fit: "
1994 1.1 skrll "%s against undefined symbol `%pT'"),
1995 1.1 skrll reloc_name, entry->root.string);
1996 1.6 christos break;
1997 1.8 christos case bfd_link_hash_defined:
1998 1.1 skrll case bfd_link_hash_defweak:
1999 1.1 skrll einfo (_(" relocation truncated to fit: "
2000 1.1 skrll "%s against symbol `%pT' defined in %pA section in %pB"),
2001 1.5 christos reloc_name, entry->root.string,
2002 1.1 skrll entry->u.def.section,
2003 1.1 skrll entry->u.def.section == bfd_abs_section_ptr
2004 1.1 skrll ? info->output_bfd : entry->u.def.section->owner);
2005 1.1 skrll break;
2006 1.1 skrll default:
2007 1.1 skrll abort ();
2008 1.1 skrll break;
2009 1.8 christos }
2010 1.1 skrll }
2011 1.1 skrll else
2012 1.1 skrll einfo (_(" relocation truncated to fit: %s against `%pT'"),
2013 1.1 skrll reloc_name, name);
2014 1.1 skrll if (addend != 0)
2015 1.1 skrll einfo ("+%v", addend);
2016 1.1 skrll einfo ("\n");
2017 1.1 skrll }
2018 1.6 christos
2019 1.1 skrll /* This is called when a dangerous relocation is made. */
2020 1.1 skrll
2021 1.1 skrll static void
2022 1.1 skrll reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
2023 1.1 skrll const char *message,
2024 1.1 skrll bfd *abfd,
2025 1.9 christos asection *section,
2026 1.1 skrll bfd_vma address)
2027 1.1 skrll {
2028 1.1 skrll einfo (_("%X%H: dangerous relocation: %s\n"),
2029 1.1 skrll abfd, section, address, message);
2030 1.1 skrll }
2031 1.1 skrll
2032 1.6 christos /* This is called when a reloc is being generated attached to a symbol
2033 1.1 skrll that is not being output. */
2034 1.1 skrll
2035 1.1 skrll static void
2036 1.1 skrll unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
2037 1.1 skrll const char *name,
2038 1.1 skrll bfd *abfd,
2039 1.9 christos asection *section,
2040 1.1 skrll bfd_vma address)
2041 1.1 skrll {
2042 1.1 skrll einfo (_("%X%H: reloc refers to symbol `%pT' which is not being output\n"),
2043 1.1 skrll abfd, section, address, name);
2044 1.1 skrll }
2045 1.3 christos
2046 1.3 christos /* This is called if link_info.notice_all is set, or when a symbol in
2047 1.3 christos link_info.notice_hash is found. Symbols are put in notice_hash
2048 1.3 christos using the -y option, while notice_all is set if the --cref option
2049 1.1 skrll has been supplied, or if there are any NOCROSSREFS sections in the
2050 1.10 christos linker script; and if plugins are active, since they need to monitor
2051 1.1 skrll all references from non-IR files. */
2052 1.3 christos
2053 1.5 christos static bool
2054 1.1 skrll notice (struct bfd_link_info *info,
2055 1.1 skrll struct bfd_link_hash_entry *h,
2056 1.3 christos struct bfd_link_hash_entry *inh ATTRIBUTE_UNUSED,
2057 1.5 christos bfd *abfd,
2058 1.1 skrll asection *section,
2059 1.3 christos bfd_vma value,
2060 1.3 christos flagword flags ATTRIBUTE_UNUSED)
2061 1.3 christos {
2062 1.1 skrll const char *name;
2063 1.1 skrll
2064 1.3 christos if (h == NULL)
2065 1.10 christos {
2066 1.1 skrll if (command_line.cref || nocrossref_list != NULL)
2067 1.1 skrll return handle_asneeded_cref (abfd, (enum notice_asneeded_action) value);
2068 1.3 christos return true;
2069 1.3 christos }
2070 1.10 christos
2071 1.1 skrll name = h->root.string;
2072 1.1 skrll if (info->notice_hash != NULL
2073 1.8 christos && bfd_hash_lookup (info->notice_hash, name, false, false) != NULL)
2074 1.1 skrll {
2075 1.8 christos if (bfd_is_und_section (section))
2076 1.1 skrll einfo (_("%P: %pB: reference to %s\n"), abfd, name);
2077 1.1 skrll else
2078 1.1 skrll einfo (_("%P: %pB: definition of %s\n"), abfd, name);
2079 1.1 skrll }
2080 1.1 skrll
2081 1.10 christos if (command_line.cref || nocrossref_list != NULL)
2082 1.1 skrll add_cref (name, abfd, section, value);
2083
2084 return true;
2085 }
2086