73e4f04fda90a359b5e1da281f4d046c5bafc61c
[platform/upstream/elfutils.git] / src / ld.c
1 /* Copyright (C) 2001-2010, 2012 Red Hat, Inc.
2    This file is part of elfutils.
3    Written by Ulrich Drepper <drepper@redhat.com>, 2001.
4
5    This file is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    elfutils is distributed in the hope that it will be useful, but
11    WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #ifdef HAVE_CONFIG_H
19 # include <config.h>
20 #endif
21
22 #include <argp.h>
23 #include <assert.h>
24 #include <error.h>
25 #include <fcntl.h>
26 #include <libelf.h>
27 #include <libintl.h>
28 #include <locale.h>
29 #include <mcheck.h>
30 #include <stdio.h>
31 #include <stdio_ext.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <unistd.h>
35
36 #include <system.h>
37 #include "ld.h"
38 #include "list.h"
39
40
41 /* Name and version of program.  */
42 static void print_version (FILE *stream, struct argp_state *state);
43 ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
44
45 /* Bug report address.  */
46 ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
47
48
49 /* Values for the various options.  */
50 enum
51   {
52     ARGP_whole_archive = 300,
53     ARGP_no_whole_archive,
54     ARGP_static,
55     ARGP_dynamic,
56     ARGP_pagesize,
57     ARGP_rpath_link,
58     ARGP_runpath,
59     ARGP_runpath_link,
60     ARGP_version_script,
61     ARGP_gc_sections,
62     ARGP_no_gc_sections,
63     ARGP_no_undefined,
64     ARGP_conserve,
65     ARGP_as_needed,
66     ARGP_no_as_needed,
67     ARGP_eh_frame_hdr,
68     ARGP_hash_style,
69     ARGP_build_id,
70 #if YYDEBUG
71     ARGP_yydebug,
72 #endif
73   };
74
75
76 /* Definitions of arguments for argp functions.  */
77 static const struct argp_option options[] =
78 {
79   { NULL, 0, NULL, 0, N_("Input File Control:"), 0 },
80   { "whole-archive", ARGP_whole_archive, NULL, 0,
81     N_("Include whole archives in the output from now on."), 0 },
82   { "no-whole-archive", ARGP_no_whole_archive, NULL, 0,
83     N_("Stop including the whole archives in the output."), 0 },
84   { NULL, 'l', N_("FILE"), OPTION_HIDDEN, NULL, 0 },
85   { "start-group", '(', NULL, 0, N_("Start a group."), 0 },
86   { "end-group", ')', NULL, 0, N_("End a group."), 0 },
87   { NULL, 'L', N_("PATH"), 0,
88     N_("Add PATH to list of directories files are searched in."), 0 },
89   { "as-needed", ARGP_as_needed, NULL, 0,
90     N_("Only set DT_NEEDED for following dynamic libs if actually used"), 0 },
91   { "no-as-needed", ARGP_no_as_needed, NULL, 0,
92     N_("Always set DT_NEEDED for following dynamic libs"), 0 },
93   { "rpath-link", ARGP_rpath_link, "PATH", OPTION_HIDDEN, NULL, 0 },
94   { NULL, 'i', NULL, 0, N_("Ignore LD_LIBRARY_PATH environment variable."),
95     0 },
96
97   { NULL, 0, NULL, 0, N_("Output File Control:"), 0 },
98   { "output", 'o', N_("FILE"), 0, N_("Place output in FILE."), 0 },
99   { NULL, 'z', "KEYWORD", OPTION_HIDDEN, NULL, 0 },
100   { "-z nodefaultlib", '\0', NULL, OPTION_DOC,
101     N_("Object is marked to not use default search path at runtime."), 0 },
102   { "-z allextract", '\0', NULL, OPTION_DOC,
103     N_("Same as --whole-archive."), 0 },
104   { "-z defaultextract", '\0', NULL, OPTION_DOC, N_("\
105 Default rules of extracting from archive; weak references are not enough."),
106     0 },
107   { "-z weakextract", '\0', NULL, OPTION_DOC,
108     N_("Weak references cause extraction from archive."), 0 },
109   { "-z muldefs", '\0', NULL, OPTION_DOC,
110     N_("Allow multiple definitions; first is used."), 0 },
111   { "-z defs | nodefs", '\0', NULL, OPTION_DOC,
112     N_("Disallow/allow undefined symbols in DSOs."), 0 },
113     { "no-undefined", ARGP_no_undefined, NULL, OPTION_HIDDEN, NULL, 0 },
114   { "-z origin", '\0', NULL, OPTION_DOC,
115     N_("Object requires immediate handling of $ORIGIN."), 0 },
116   { "-z now", '\0', NULL, OPTION_DOC,
117     N_("Relocation will not be processed lazily."), 0 },
118   { "-z nodelete", '\0', NULL, OPTION_DOC,
119     N_("Object cannot be unloaded at runtime."), 0 },
120   { "-z initfirst", '\0', NULL, OPTION_DOC,
121     N_("Mark object to be initialized first."), 0 },
122   { "-z lazyload | nolazyload", '\0', NULL, OPTION_DOC,
123     N_("Enable/disable lazy-loading flag for following dependencies."), 0 },
124   { "-z nodlopen", '\0', NULL, OPTION_DOC,
125     N_("Mark object as not loadable with 'dlopen'."), 0 },
126   { "-z ignore | record", '\0', NULL, OPTION_DOC,
127     N_("Ignore/record dependencies on unused DSOs."), 0 },
128   { "-z systemlibrary", '\0', NULL, OPTION_DOC,
129     N_("Generated DSO will be a system library."), 0 },
130   { "entry", 'e', N_("ADDRESS"), 0, N_("Set entry point address."), 0 },
131   { "static", ARGP_static, NULL, OPTION_HIDDEN, NULL, 0 },
132   { "-B static", ARGP_static, NULL, OPTION_DOC,
133     N_("Do not link against shared libraries."), 0 },
134   { "dynamic", ARGP_dynamic, NULL, OPTION_HIDDEN, NULL, 0 },
135   { "-B dynamic", ARGP_dynamic, NULL, OPTION_DOC,
136     N_("Prefer linking against shared libraries."), 0 },
137   { "export-dynamic", 'E', NULL, 0, N_("Export all dynamic symbols."), 0 },
138   { "strip-all", 's', NULL, 0, N_("Strip all symbols."), 0 },
139   { "strip-debug", 'S', NULL, 0, N_("Strip debugging symbols."), 0 },
140   { "pagesize", ARGP_pagesize, "SIZE", 0,
141     N_("Assume pagesize for the target system to be SIZE."), 0 },
142   { "rpath", 'R', "PATH", OPTION_HIDDEN, NULL, 0 },
143   { "runpath", ARGP_runpath, "PATH", 0, N_("Set runtime DSO search path."),
144     0 },
145   { "runpath-link", ARGP_runpath_link, "PATH", 0,
146     N_("Set link time DSO search path."), 0 },
147   { "shared", 'G', NULL, 0, N_("Generate dynamic shared object."), 0 },
148   { NULL, 'r', NULL, 0L, N_("Generate relocatable object."), 0 },
149   { NULL, 'B', "KEYWORD", OPTION_HIDDEN, "", 0 },
150   { "-B local", 'B', NULL, OPTION_DOC,
151     N_("Causes symbol not assigned to a version be reduced to local."), 0 },
152   { "gc-sections", ARGP_gc_sections, NULL, 0, N_("Remove unused sections."),
153     0 },
154   { "no-gc-sections", ARGP_no_gc_sections, NULL, 0,
155     N_("Don't remove unused sections."), 0 },
156   { "soname", 'h', "NAME", 0, N_("Set soname of shared object."), 0 },
157   { "dynamic-linker", 'I', "NAME", 0, N_("Set the dynamic linker name."), 0 },
158   { NULL, 'Q', "YN", OPTION_HIDDEN, NULL, 0 },
159   { "-Q y | n", 'Q', NULL, OPTION_DOC,
160     N_("Add/suppress addition indentifying link-editor to .comment section."),
161     0 },
162   { "eh-frame-hdr", ARGP_eh_frame_hdr, NULL, 0,
163     N_("Create .eh_frame_hdr section"), 0 },
164   { "hash-style", ARGP_hash_style, "STYLE", 0,
165     N_("Set hash style to sysv, gnu or both."), 0 },
166   { "build-id", ARGP_build_id, "STYLE", OPTION_ARG_OPTIONAL,
167     N_("Generate build ID note (md5, sha1 (default), uuid)."), 0 },
168
169   { NULL, 0, NULL, 0, N_("Linker Operation Control:"), 0 },
170   { "verbose", 'v', NULL, 0, N_("Verbose messages."), 0 },
171   { "trace", 't', NULL, 0, N_("Trace file opens."), 0 },
172   { "conserve-memory", ARGP_conserve, NULL, 0,
173     N_("Trade speed for less memory usage"), 0 },
174   { NULL, 'O', N_("LEVEL"), OPTION_ARG_OPTIONAL,
175     N_("Set optimization level to LEVEL."), 0 },
176   { NULL, 'c', N_("FILE"), 0, N_("Use linker script in FILE."), 0 },
177 #if YYDEBUG
178   { "yydebug", ARGP_yydebug, NULL, 0,
179     N_("Select to get parser debug information"), 0 },
180 #endif
181   { "version-script", ARGP_version_script, "FILE", 0,
182     N_("Read version information from FILE."), 0 },
183   { "emulation", 'm', "NAME", 0, N_("Set emulation to NAME."), 0 },
184
185   { NULL, 0, NULL, 0, NULL, 0 }
186 };
187
188 /* Short description of program.  */
189 static const char doc[] = N_("Combine object and archive files.");
190
191 /* Strings for arguments in help texts.  */
192 static const char args_doc[] = N_("[FILE]...");
193
194 /* Prototype for option handler.  */
195 static void replace_args (int argc, char *argv[]);
196 static error_t parse_opt_1st (int key, char *arg, struct argp_state *state);
197 static error_t parse_opt_2nd (int key, char *arg, struct argp_state *state);
198
199 /* Data structure to communicate with argp functions.  */
200 static struct argp argp_1st =
201 {
202   options, parse_opt_1st, args_doc, doc, NULL, NULL, NULL
203 };
204 static struct argp argp_2nd =
205 {
206   options, parse_opt_2nd, args_doc, doc, NULL, NULL, NULL
207 };
208
209
210 /* Linker state.  This contains all global information.  */
211 struct ld_state ld_state;
212
213 /* List of the input files.  */
214 static struct file_list
215 {
216   const char *name;
217   struct file_list *next;
218 } *input_file_list;
219
220 /* If nonzero be verbose.  */
221 int verbose;
222
223 /* If nonzero, trade speed for less memory/address space usage.  */
224 int conserve_memory;
225
226 /* The emulation name to use.  */
227 static const char *emulation;
228
229 /* Keep track of the nesting level.  Even though we don't handle nested
230    groups we still keep track to improve the error messages.  */
231 static int group_level;
232
233 /* The last file we processed.  */
234 static struct usedfiles *last_file;
235
236 /* The default linker script.  */
237 /* XXX We'll do this a bit different in the real solution.  */
238 static const char *linker_script = SRCDIR "/elf32-i386.script";
239
240 /* Nonzero if an error occurred while loading the input files.  */
241 static int error_loading;
242
243
244 /* Intermediate storage for the LD_LIBRARY_PATH information from the
245    environment.  */
246 static char *ld_library_path1;
247
248 /* Flag used to communicate with the scanner.  */
249 int ld_scan_version_script;
250
251 /* Name of the input file.  */
252 const char *ldin_fname;
253
254 /* Define by parser if required.  */
255 extern int lddebug;
256
257
258 /* Prototypes for local functions.  */
259 static void parse_z_option (const char *arg);
260 static void parse_z_option_2 (const char *arg);
261 static void parse_B_option (const char *arg);
262 static void parse_B_option_2 (const char *arg);
263 static void determine_output_format (void);
264 static void load_needed (void);
265 static void collect_sections (void);
266 static void add_rxxpath (struct pathelement **pathp, const char *str);
267 static void gen_rxxpath_data (void);
268 static void read_version_script (const char *fname);
269 static void create_lscript_symbols (void);
270 static void create_special_section_symbol (struct symbol **symp,
271                                            const char *name);
272
273
274 int
275 main (int argc, char *argv[])
276 {
277   int remaining;
278   int err;
279
280 #ifndef NDEBUG
281   /* Enable memory debugging.  */
282   mtrace ();
283 #endif
284
285   /* Sanity check.  We always want to use the LFS functionality.  */
286   if (sizeof (off_t) != sizeof (off64_t))
287     abort ();
288
289   /* We use no threads here which can interfere with handling a stream.  */
290   __fsetlocking (stdin, FSETLOCKING_BYCALLER);
291   __fsetlocking (stdout, FSETLOCKING_BYCALLER);
292   __fsetlocking (stderr, FSETLOCKING_BYCALLER);
293
294   /* Set locale.  */
295   setlocale (LC_ALL, "");
296
297   /* Make sure the message catalog can be found.  */
298   bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
299
300   /* Initialize the message catalog.  */
301   textdomain (PACKAGE_TARNAME);
302
303   /* Before we start tell the ELF library which version we are using.  */
304   elf_version (EV_CURRENT);
305
306   /* The user can use the LD_LIBRARY_PATH environment variable to add
307      additional lookup directories.  */
308   ld_library_path1 = getenv ("LD_LIBRARY_PATH");
309
310   /* Initialize the memory handling.  */
311 #define obstack_chunk_alloc xmalloc
312 #define obstack_chunk_free free
313   obstack_init (&ld_state.smem);
314
315   /* Recognize old-style parameters for compatibility.  */
316   replace_args (argc, argv);
317
318   /* One quick pass over the parameters which allows us to scan for options
319      with global effect which influence the rest of the processing.  */
320   argp_parse (&argp_1st, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
321
322   /* We need at least one input file.  */
323   if (input_file_list == NULL)
324     {
325       error (0, 0, gettext ("At least one input file needed"));
326       argp_help (&argp_1st, stderr, ARGP_HELP_SEE, "ld");
327       exit (EXIT_FAILURE);
328     }
329
330   /* Determine which ELF backend to use.  */
331   determine_output_format ();
332
333   /* If no hash style was specific default to the oldand slow SysV
334      method.  */
335   if (unlikely (ld_state.hash_style == hash_style_none))
336     ld_state.hash_style = hash_style_sysv;
337
338   /* Prepare state.  */
339   err = ld_prepare_state (emulation);
340   if (err != 0)
341     error (EXIT_FAILURE, 0, gettext ("error while preparing linking"));
342
343   /* XXX Read the linker script now.  Since we later will have the linker
344      script built in we don't go into trouble to make sure we handle GROUP
345      statements in the script.  This simply must not happen.  */
346   ldin = fopen (linker_script, "r");
347   if (ldin == NULL)
348     error (EXIT_FAILURE, errno, gettext ("cannot open linker script '%s'"),
349            linker_script);
350   /* No need for locking.  */
351   __fsetlocking (ldin, FSETLOCKING_BYCALLER);
352
353   ld_state.srcfiles = NULL;
354   ldlineno = 1;
355   ld_scan_version_script = 0;
356   ldin_fname = linker_script;
357   if (ldparse () != 0)
358     /* Something went wrong during parsing.  */
359     exit (EXIT_FAILURE);
360   fclose (ldin);
361
362   /* We now might have a list of directories to look for libraries in
363      named by the linker script.  Put them in a different list so that
364      they are searched after all paths given by the user on the
365      command line.  */
366   ld_state.default_paths = ld_state.paths;
367   ld_state.paths = ld_state.tailpaths = NULL;
368
369   /* Get runpath/rpath information in usable form.  */
370   gen_rxxpath_data ();
371
372   /* Parse and process arguments for real.  */
373   argp_parse (&argp_2nd, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
374   /* All options should have been processed by the argp parser.  */
375   assert (remaining == argc);
376
377   /* Process the last file.  */
378   while (last_file != NULL)
379     /* Try to open the file.  */
380     error_loading |= FILE_PROCESS (-1, last_file, &ld_state, &last_file);
381
382   /* Stop if there has been a problem while reading the input files.  */
383   if (error_loading)
384     exit (error_loading);
385
386   /* See whether all opened -( were closed.  */
387   if (group_level > 0)
388     {
389       error (0, 0, gettext ("-( without matching -)"));
390       argp_help (&argp_1st, stderr, ARGP_HELP_SEE, "ld");
391       exit (EXIT_FAILURE);
392     }
393
394   /* When we create a relocatable file we don't have to look for the
395      DT_NEEDED DSOs and we also don't test for undefined symbols.  */
396   if (ld_state.file_type != relocatable_file_type)
397     {
398       /* At this point we have loaded all the direct dependencies.  What
399          remains to be done is find the indirect dependencies.  These are
400          DSOs which are referenced by the DT_NEEDED entries in the DSOs
401          which are direct dependencies.  We have to transitively find and
402          load all these dependencies.  */
403       load_needed ();
404
405       /* At this point all object files and DSOs are read.  If there
406          are still undefined symbols left they might have to be
407          synthesized from the linker script.  */
408       create_lscript_symbols ();
409
410       /* Now that we have loaded all the object files we can determine
411          whether we have any non-weak unresolved references left.  If
412          there are any we stop.  If the user used the '-z nodefs' option
413          and we are creating a DSO don't perform the tests.  */
414       if (FLAG_UNRESOLVED (&ld_state) != 0)
415         exit (1);
416     }
417
418   /* Collect information about the relocations which will be carried
419      forward into the output.  We have to do this here and now since
420      we need to know which sections have to be created.  */
421   if (ld_state.file_type != relocatable_file_type)
422     {
423       void *p ;
424       struct scnhead *h;
425
426       p = NULL;
427       while ((h = ld_section_tab_iterate (&ld_state.section_tab, &p)) != NULL)
428         if (h->type == SHT_REL || h->type == SHT_RELA)
429           {
430             struct scninfo *runp = h->last;
431             do
432               {
433                 /* If we are processing the relocations determine how
434                    many will be in the output file.  Also determine
435                    how many GOT entries are needed.  */
436                 COUNT_RELOCATIONS (&ld_state, runp);
437
438                 ld_state.relsize_total += runp->relsize;
439               }
440             while ((runp = runp->next) != h->last);
441           }
442     }
443
444   /* Not part of the gABI, but part of every psABI: the symbols for the
445      GOT section.  Add the symbol if necessary.  */
446   if (ld_state.need_got)
447     create_special_section_symbol (&ld_state.got_symbol,
448                                    "_GLOBAL_OFFSET_TABLE_");
449   /* Similarly for the _DYNAMIC symbol which points to the dynamic
450      section.  */
451   if (dynamically_linked_p ())
452     create_special_section_symbol (&ld_state.dyn_symbol, "_DYNAMIC");
453
454   /* We are ready to start working on the output file.  Not all
455      information has been gather or created yet.  This will be done as
456      we go.  Open the file now.  */
457   if (OPEN_OUTFILE (&ld_state, EM_NONE, ELFCLASSNONE, ELFDATANONE) != 0)
458     exit (1);
459
460   /* Create the sections which are generated by the linker and are not
461      present in the input file.  The output file must already have
462      been opened since we need the ELF descriptor to deduce type
463      sizes.  */
464   GENERATE_SECTIONS (&ld_state);
465
466   /* At this point we have read all the files and know all the
467      sections which have to be linked into the application.  We do now
468      create an array listing all the sections.  We will than pass this
469      array to a system specific function which can reorder it at will.
470      The functions can also merge sections if this is what is
471      wanted.  */
472   collect_sections ();
473
474   /* Create the output sections now.  This may requires sorting them
475      first.  */
476   CREATE_SECTIONS (&ld_state);
477
478   /* Create the output file data.  Appropriate code for the selected
479      output file type is called.  */
480   if (CREATE_OUTFILE (&ld_state) != 0)
481     exit (1);
482
483   /* Finalize the output file, write the data out.  */
484   err |= FINALIZE (&ld_state);
485
486   /* Return with an non-zero exit status also if any error message has
487      been printed.  */
488   return err | (error_message_count != 0);
489 }
490
491
492 static void
493 replace_args (int argc, char *argv[])
494 {
495   static const struct
496   {
497     const char *from;
498     const char *to;
499   } args[] =
500       {
501         { "-export-dynamic", "--export-dynamic" },
502         { "-dynamic-linker", "--dynamic-linker" },
503         { "-static", "--static" },
504       };
505   const size_t nargs = sizeof (args) / sizeof (args[0]);
506
507   for (int i = 1; i < argc; ++i)
508     if (argv[i][0] == '-' && islower (argv[i][1]) && argv[i][2] != '\0')
509       for (size_t j = 0; j < nargs; ++j)
510         if (strcmp (argv[i], args[j].from) == 0)
511           {
512             argv[i] = (char *) args[j].to;
513             break;
514           }
515 }
516
517
518 static int
519 valid_hexarg (const char *arg)
520 {
521   if (strncasecmp (arg, "0x", 2) != 0)
522     return 0;
523
524   arg += 2;
525   do
526     {
527       if (isxdigit (arg[0]) && isxdigit (arg[1]))
528         {
529           arg += 2;
530           if (arg[0] == '-' || arg[0] == ':')
531             ++arg;
532         }
533       else
534         return 0;
535     }
536   while (*arg != '\0');
537
538   return 1;
539 }
540
541
542 /* Quick scan of the parameter list for options with global effect.  */
543 static error_t
544 parse_opt_1st (int key, char *arg,
545                struct argp_state *state __attribute__ ((unused)))
546 {
547   switch (key)
548     {
549     case 'B':
550       parse_B_option (arg);
551       break;
552
553     case 'c':
554       linker_script = arg;
555       break;
556
557     case 'E':
558       ld_state.export_all_dynamic = true;
559       break;
560
561     case 'G':
562       if (ld_state.file_type != no_file_type)
563         error (EXIT_FAILURE, 0,
564                gettext ("only one option of -G and -r is allowed"));
565       ld_state.file_type = dso_file_type;
566
567       /* If we generate a DSO we have to export all symbols.  */
568       ld_state.export_all_dynamic = true;
569       break;
570
571     case 'h':
572       ld_state.soname = arg;
573       break;
574
575     case 'i':
576       /* Discard the LD_LIBRARY_PATH value we found.  */
577       ld_library_path1 = NULL;
578       break;
579
580     case 'I':
581       ld_state.interp = arg;
582       break;
583
584     case 'm':
585       if (emulation != NULL)
586         error (EXIT_FAILURE, 0, gettext ("more than one '-m' parameter"));
587       emulation = arg;
588       break;
589
590     case 'Q':
591       if (arg[1] == '\0' && (arg[0] == 'y' || arg[0] == 'Y'))
592         ld_state.add_ld_comment = true;
593       else if (arg[1] == '\0' && (arg[0] == 'n' || arg[0] == 'N'))
594         ld_state.add_ld_comment = true;
595       else
596         error (EXIT_FAILURE, 0, gettext ("unknown option `-%c %s'"), 'Q', arg);
597       break;
598
599     case 'r':
600       if (ld_state.file_type != no_file_type)
601         error (EXIT_FAILURE, 0,
602                gettext ("only one option of -G and -r is allowed"));
603       ld_state.file_type = relocatable_file_type;
604       break;
605
606     case 'S':
607       ld_state.strip = strip_debug;
608       break;
609
610     case 't':
611       ld_state.trace_files = true;
612       break;
613
614     case 'v':
615       verbose = 1;
616       break;
617
618     case 'z':
619       /* The SysV linker used 'z' to pass various flags to the linker.
620          We follow this.  See 'parse_z_option' for the options we
621          recognize.  */
622       parse_z_option (arg);
623       break;
624
625     case ARGP_pagesize:
626       {
627         char *endp;
628         ld_state.pagesize = strtoul (arg, &endp, 0);
629         if (*endp != '\0')
630           {
631             if (endp[1] == '\0' && tolower (*endp) == 'k')
632               ld_state.pagesize *= 1024;
633             else if (endp[1] == '\0' && tolower (*endp) == 'm')
634               ld_state.pagesize *= 1024 * 1024;
635             else
636               {
637                 error (0, 0,
638                        gettext ("invalid page size value '%s': ignored"),
639                        arg);
640                 ld_state.pagesize = 0;
641               }
642           }
643       }
644       break;
645
646     case 'R':
647       add_rxxpath (&ld_state.rpath, arg);
648       break;
649
650     case ARGP_rpath_link:
651       add_rxxpath (&ld_state.rpath_link, arg);
652       break;
653
654     case ARGP_runpath:
655       add_rxxpath (&ld_state.runpath, arg);
656       break;
657
658     case ARGP_runpath_link:
659       add_rxxpath (&ld_state.runpath_link, arg);
660       break;
661
662     case ARGP_gc_sections:
663     case ARGP_no_gc_sections:
664       ld_state.gc_sections = key == ARGP_gc_sections;
665       break;
666
667     case ARGP_eh_frame_hdr:
668       ld_state.eh_frame_hdr = true;
669       break;
670
671     case ARGP_hash_style:
672       if (strcmp (arg, "gnu") == 0)
673         ld_state.hash_style = hash_style_gnu;
674       else if (strcmp (arg, "both") == 0)
675         ld_state.hash_style = hash_style_gnu | hash_style_sysv;
676       else if (strcmp (arg, "sysv") == 0)
677         ld_state.hash_style = hash_style_sysv;
678       else
679         error (EXIT_FAILURE, 0, gettext ("invalid hash style '%s'"), arg);
680       break;
681
682     case ARGP_build_id:
683       if (arg == NULL)
684         ld_state.build_id = "sha1";
685       else if (strcmp (arg, "uuid") != 0
686                && strcmp (arg, "md5") != 0
687                && strcmp (arg, "sha1") != 0
688                && !valid_hexarg (arg))
689         error (EXIT_FAILURE, 0, gettext ("invalid build-ID style '%s'"), arg);
690       else
691         ld_state.build_id = arg;
692       break;
693
694     case 's':
695       if (arg == NULL)
696         {
697           if (ld_state.strip == strip_all)
698             ld_state.strip = strip_everything;
699           else
700             ld_state.strip = strip_all;
701           break;
702         }
703       /* FALLTHROUGH */
704
705     case 'e':
706     case 'o':
707     case 'O':
708     case ARGP_whole_archive:
709     case ARGP_no_whole_archive:
710     case ARGP_as_needed:
711     case ARGP_no_as_needed:
712     case 'L':
713     case '(':
714     case ')':
715     case 'l':
716     case ARGP_static:
717     case ARGP_dynamic:
718     case ARGP_version_script:
719       /* We'll handle these in the second pass.  */
720       break;
721
722     case ARGP_KEY_ARG:
723       {
724         struct file_list *newp;
725
726         newp = (struct file_list *) xmalloc (sizeof (struct file_list));
727         newp->name = arg;
728 #ifndef NDEBUG
729         newp->next = NULL;
730 #endif
731         CSNGL_LIST_ADD_REAR (input_file_list, newp);
732       }
733       break;
734
735 #if YYDEBUG
736     case ARGP_yydebug:
737       lddebug = 1;
738       break;
739 #endif
740
741     case ARGP_no_undefined:
742       ld_state.nodefs = false;
743       break;
744
745     case ARGP_conserve:
746       conserve_memory = 1;
747       break;
748
749     default:
750       return ARGP_ERR_UNKNOWN;
751     }
752   return 0;
753 }
754
755
756 /* Handle program arguments for real.  */
757 static error_t
758 parse_opt_2nd (int key, char *arg,
759                struct argp_state *state __attribute__ ((unused)))
760 {
761   static bool group_start_requested;
762   static bool group_end_requested;
763
764   switch (key)
765     {
766     case 'B':
767       parse_B_option_2 (arg);
768       break;
769
770     case 'e':
771       ld_state.entry = arg;
772       break;
773
774     case 'o':
775       if (ld_state.outfname != NULL)
776         {
777           error (0, 0, gettext ("More than one output file name given."));
778         see_help:
779           argp_help (&argp_2nd, stderr, ARGP_HELP_SEE, "ld");
780           exit (EXIT_FAILURE);
781         }
782       ld_state.outfname = arg;
783       break;
784
785     case 'O':
786       if (arg == NULL)
787         ld_state.optlevel = 1;
788       else
789         {
790           char *endp;
791           unsigned long int level = strtoul (arg, &endp, 10);
792           if (*endp != '\0')
793             {
794               error (0, 0, gettext ("Invalid optimization level `%s'"), arg);
795               goto see_help;
796             }
797           ld_state.optlevel = level;
798         }
799       break;
800
801     case ARGP_whole_archive:
802       ld_state.extract_rule = allextract;
803       break;
804     case ARGP_no_whole_archive:
805       ld_state.extract_rule = defaultextract;
806       break;
807
808     case ARGP_as_needed:
809       ld_state.as_needed = true;
810       break;
811     case ARGP_no_as_needed:
812       ld_state.as_needed = false;
813       break;
814
815     case ARGP_static:
816     case ARGP_dynamic:
817       /* Enable/disable use for DSOs.  */
818       ld_state.statically = key == ARGP_static;
819       break;
820
821     case 'z':
822       /* The SysV linker used 'z' to pass various flags to the linker.
823          We follow this.  See 'parse_z_option' for the options we
824          recognize.  */
825       parse_z_option_2 (arg);
826       break;
827
828     case ARGP_version_script:
829       read_version_script (arg);
830       break;
831
832     case 'L':
833       /* Add a new search directory.  */
834       ld_new_searchdir (arg);
835       break;
836
837     case '(':
838       /* Start a link group.  We have to be able to determine the object
839          file which is named next.  Do this by remembering a pointer to
840          the pointer which will point to the next object.  */
841       if (verbose && (group_start_requested || !group_end_requested))
842         error (0, 0, gettext ("nested -( -) groups are not allowed"));
843
844       /* Increment the nesting level.  */
845       ++group_level;
846
847       /* Record group start.  */
848       group_start_requested = true;
849       group_end_requested = false;
850       break;
851
852     case ')':
853       /* End a link group.  If there is no group open this is clearly
854          a bug.  If there is a group open insert a back reference
855          pointer in the record for the last object of the group.  If
856          there is no new object or just one don't do anything.  */
857       if (!group_end_requested)
858         {
859           if (group_level == 0)
860             {
861               error (0, 0, gettext ("-) without matching -("));
862               goto see_help;
863             }
864         }
865       else
866         last_file->group_end = true;
867
868       if (group_level > 0)
869         --group_level;
870       break;
871
872     case 'l':
873     case ARGP_KEY_ARG:
874       {
875         while (last_file != NULL)
876           /* Try to open the file.  */
877           error_loading |= FILE_PROCESS (-1, last_file, &ld_state, &last_file);
878
879         last_file = ld_new_inputfile (arg,
880                                       key == 'l'
881                                       ? archive_file_type
882                                       : relocatable_file_type);
883         if (group_start_requested)
884           {
885             last_file->group_start = true;
886
887             group_start_requested = false;
888             group_end_requested = true;
889           }
890       }
891       break;
892
893     default:
894       /* We can catch all other options here.  They either have
895          already been handled or, if the parameter was not correct,
896          the error has been reported.  */
897       break;
898     }
899   return 0;
900 }
901
902
903 /* Load all the DSOs named as dependencies in other DSOs we already
904    loaded.  */
905 static void
906 load_needed (void)
907 {
908   struct usedfiles *first;
909   struct usedfiles *runp;
910
911   /* XXX There is one problem here: do we allow references from
912      regular object files to be satisfied by these implicit
913      dependencies?  The old linker allows this and several libraries
914      depend on this.  Solaris' linker does not allow this; it provides
915      the user with a comprehensive error message explaining the
916      situation.
917
918      XXX IMO the old ld behavior is correct since this is also how the
919      dynamic linker will work.  It will look for unresolved references
920      in all loaded DSOs.
921
922      XXX Should we add an option to get Solaris compatibility?  */
923   if (ld_state.needed == NULL)
924     return;
925
926   runp = first = ld_state.needed->next;
927   do
928     {
929       struct usedfiles *ignore;
930       struct usedfiles *next = runp->next;
931       int err;
932
933       err = FILE_PROCESS (-1, runp, &ld_state, &ignore);
934       if (err != 0)
935         /* Something went wrong.  */
936         exit (err);
937
938       runp = next;
939     }
940   while (runp != first);
941 }
942
943
944 /* Print the version information.  */
945 static void
946 print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
947 {
948   fprintf (stream, "ld (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
949   fprintf (stream, gettext ("\
950 Copyright (C) %s Red Hat, Inc.\n\
951 This is free software; see the source for copying conditions.  There is NO\n\
952 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
953 "), "2012");
954   fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
955 }
956
957
958 /* There are a lot of -z options, parse them here.  Some of them have
959    to be parsed in the first pass, others must be handled in the
960    second pass.  */
961 static void
962 parse_z_option (const char *arg)
963 {
964   if (strcmp (arg, "nodefaultlib") == 0
965       /* This is only meaningful if we create a DSO.  */
966       && ld_state.file_type == dso_file_type)
967     ld_state.dt_flags_1 |= DF_1_NODEFLIB;
968   else if (strcmp (arg, "muldefs") == 0)
969     ld_state.muldefs = true;
970   else if (strcmp (arg, "nodefs") == 0)
971     ld_state.nodefs = true;
972   else if (strcmp (arg, "defs") == 0)
973     ld_state.nodefs = false;
974   else if (strcmp (arg, "now") == 0)
975     /* We could also set the DF_1_NOW flag in DT_FLAGS_1 but this isn't
976        necessary.  */
977     ld_state.dt_flags |= DF_BIND_NOW;
978   else if (strcmp (arg, "origin") == 0)
979     /* We could also set the DF_1_ORIGIN flag in DT_FLAGS_1 but this isn't
980        necessary.  */
981     ld_state.dt_flags |= DF_ORIGIN;
982   else if (strcmp (arg, "nodelete") == 0
983            /* This is only meaningful if we create a DSO.  */
984            && ld_state.file_type == dso_file_type)
985     ld_state.dt_flags_1 |= DF_1_NODELETE;
986   else if (strcmp (arg, "initfirst") == 0)
987     ld_state.dt_flags_1 |= DF_1_INITFIRST;
988   else if (strcmp (arg, "nodlopen") == 0
989            /* This is only meaningful if we create a DSO.  */
990            && ld_state.file_type == dso_file_type)
991     ld_state.dt_flags_1 |= DF_1_NOOPEN;
992   else if (strcmp (arg, "systemlibrary") == 0)
993     ld_state.is_system_library = true;
994   else if (strcmp (arg, "execstack") == 0)
995     ld_state.execstack = execstack_true;
996   else if (strcmp (arg, "noexecstack") == 0)
997     ld_state.execstack = execstack_false_force;
998   else if (strcmp (arg, "allextract") != 0
999            && strcmp (arg, "defaultextract") != 0
1000            && strcmp (arg, "weakextract") != 0
1001            && strcmp (arg, "lazyload") != 0
1002            && strcmp (arg, "nolazyload") != 0
1003            && strcmp (arg, "ignore") != 0
1004            && strcmp (arg, "record") != 0)
1005     error (0, 0, gettext ("unknown option `-%c %s'"), 'z', arg);
1006 }
1007
1008
1009 static void
1010 parse_z_option_2 (const char *arg)
1011 {
1012   if (strcmp (arg, "allextract") == 0)
1013     ld_state.extract_rule = allextract;
1014   else if (strcmp (arg, "defaultextract") == 0)
1015     ld_state.extract_rule = defaultextract;
1016   else if (strcmp (arg, "weakextract") == 0)
1017     ld_state.extract_rule = weakextract;
1018   else if (strcmp (arg, "lazyload") == 0)
1019     ld_state.lazyload = true;
1020   else if (strcmp (arg, "nolazyload") == 0)
1021     ld_state.lazyload = false;
1022   else if (strcmp (arg, "ignore") == 0)
1023     ld_state.as_needed = true;
1024   else if (strcmp (arg, "record") == 0)
1025     ld_state.as_needed = false;
1026 }
1027
1028
1029 /* There are a lot of -B options, parse them here.  */
1030 static void
1031 parse_B_option (const char *arg)
1032 {
1033   if (strcmp (arg, "local") == 0)
1034     ld_state.default_bind_local = true;
1035   else if (strcmp (arg, "symbolic") != 0
1036            && strcmp (arg, "static") != 0
1037            && strcmp (arg, "dynamic") != 0)
1038     error (0, 0, gettext ("unknown option '-%c %s'"), 'B', arg);
1039 }
1040
1041
1042 /* The same functionality, but called in the second pass over the
1043    parameters.  */
1044 static void
1045 parse_B_option_2 (const char *arg)
1046 {
1047   if (strcmp (arg, "static") == 0)
1048     ld_state.statically = true;
1049   else if (strcmp (arg, "dynamic") == 0)
1050     ld_state.statically = false;
1051   else if (strcmp (arg, "symbolic") == 0
1052            /* This is only meaningful if we create a DSO.  */
1053            && ld_state.file_type == dso_file_type)
1054     ld_state.dt_flags |= DF_SYMBOLIC;
1055 }
1056
1057
1058 static void
1059 determine_output_format (void)
1060 {
1061   /* First change the 'input_file_list' variable in a simple
1062      single-linked list.  */
1063   struct file_list *last = input_file_list;
1064   input_file_list = input_file_list->next;
1065   last->next = NULL;
1066
1067   /* Determine the target configuration which we are supposed to use.
1068      The user can use the '-m' option to select one.  If this is
1069      missing we are trying to load one file and determine the
1070      architecture from that.  */
1071   if (emulation != NULL)
1072     {
1073       ld_state.ebl = ebl_openbackend_emulation (emulation);
1074
1075       assert (ld_state.ebl != NULL);
1076     }
1077   else
1078     {
1079       /* Find an ELF input file and let it determine the ELf backend.  */
1080       struct file_list *runp = input_file_list;
1081
1082       while (runp != NULL)
1083         {
1084           int fd = open (runp->name, O_RDONLY);
1085           if (fd != -1)
1086             {
1087               int try (Elf *elf)
1088                 {
1089                   int result = 0;
1090
1091                   if (elf == NULL)
1092                     return 0;
1093
1094                   if (elf_kind (elf) == ELF_K_ELF)
1095                     {
1096                       /* We have an ELF file.  We now can find out
1097                          what the output format should be.  */
1098                       XElf_Ehdr_vardef(ehdr);
1099
1100                       /* Get the ELF header of the object.  */
1101                       xelf_getehdr (elf, ehdr);
1102                       if (ehdr != NULL)
1103                         ld_state.ebl =
1104                           ebl_openbackend_machine (ehdr->e_machine);
1105
1106                       result = 1;
1107                     }
1108                   else if (elf_kind (elf) == ELF_K_AR)
1109                     {
1110                       /* Try the archive members.  This could
1111                          potentially lead to wrong results if the
1112                          archive contains files for more than one
1113                          architecture.  But this is the user's
1114                          problem.  */
1115                       Elf *subelf;
1116                       Elf_Cmd cmd = ELF_C_READ_MMAP;
1117
1118                       while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
1119                         {
1120                           cmd = elf_next (subelf);
1121
1122                           if (try (subelf) != 0)
1123                             break;
1124                         }
1125                     }
1126
1127                   elf_end (elf);
1128
1129                   return result;
1130                 }
1131
1132               if (try (elf_begin (fd, ELF_C_READ_MMAP, NULL)) != 0)
1133                 /* Found a file.  */
1134                 break;
1135             }
1136
1137           runp = runp->next;
1138         }
1139
1140       if (ld_state.ebl == NULL)
1141         {
1142           error (0, 0, gettext ("\
1143 could not find input file to determine output file format"));
1144           error (EXIT_FAILURE, 0, gettext ("\
1145 try again with an appropriate '-m' parameter"));
1146         }
1147     }
1148
1149   /* We don't need the list of input files anymore.  The second run over
1150      the parameters will handle them.  */
1151   while (input_file_list != NULL)
1152     {
1153       struct file_list *oldp = input_file_list;
1154       input_file_list = input_file_list->next;
1155       free (oldp);
1156     }
1157
1158   /* We also know now what kind of file we are supposed to create.  If
1159      the user hasn't selected anythign we create and executable.  */
1160   if (ld_state.file_type == no_file_type)
1161     ld_state.file_type = executable_file_type;
1162 }
1163
1164 /* Add DIR to the list of directories searched for object files and
1165    libraries.  */
1166 void
1167 ld_new_searchdir (const char *dir)
1168 {
1169   struct pathelement *newpath;
1170
1171   newpath = (struct pathelement *)
1172     obstack_calloc (&ld_state.smem, sizeof (struct pathelement));
1173
1174   newpath->pname = dir;
1175
1176   /* Enqueue the file.  */
1177   if (ld_state.tailpaths == NULL)
1178     ld_state.paths = ld_state.tailpaths = newpath->next = newpath;
1179   else
1180     {
1181       ld_state.tailpaths->next = newpath;
1182       ld_state.tailpaths = newpath;
1183       newpath->next = ld_state.paths;
1184     }
1185 }
1186
1187
1188 struct usedfiles *
1189 ld_new_inputfile (const char *fname, enum file_type type)
1190 {
1191   struct usedfiles *newfile = (struct usedfiles *)
1192     obstack_calloc (&ld_state.smem, sizeof (struct usedfiles));
1193
1194   newfile->soname = newfile->fname = newfile->rfname = fname;
1195   newfile->file_type = type;
1196   newfile->extract_rule = ld_state.extract_rule;
1197   newfile->as_needed = ld_state.as_needed;
1198   newfile->lazyload = ld_state.lazyload;
1199   newfile->status = not_opened;
1200
1201   return newfile;
1202 }
1203
1204
1205 /* Create an array listing all the sections.  We will than pass this
1206    array to a system specific function which can reorder it at will.
1207    The functions can also merge sections if this is what is
1208    wanted.  */
1209 static void
1210 collect_sections (void)
1211 {
1212   void *p ;
1213   struct scnhead *h;
1214   size_t cnt;
1215
1216   /* We have that many sections.  At least for now.  */
1217   ld_state.nallsections = ld_state.section_tab.filled;
1218
1219   /* Allocate the array.  We allocate one more entry than computed so
1220      far since we might need a new section for the copy relocations.  */
1221   ld_state.allsections =
1222     (struct scnhead **) obstack_alloc (&ld_state.smem,
1223                                        (ld_state.nallsections + 1)
1224                                        * sizeof (struct scnhead *));
1225
1226   /* Fill the array.  We rely here on the hash table iterator to
1227      return the entries in the order they were added.  */
1228   cnt = 0;
1229   p = NULL;
1230   while ((h = ld_section_tab_iterate (&ld_state.section_tab, &p)) != NULL)
1231     {
1232       struct scninfo *runp;
1233       bool used = false;
1234
1235       if (h->kind == scn_normal)
1236         {
1237           runp = h->last;
1238           do
1239             {
1240               if (h->type == SHT_REL || h->type == SHT_RELA)
1241                 {
1242                   if (runp->used)
1243                     /* This is a relocation section.  If the section
1244                        it is relocating is used in the result so must
1245                        the relocation section.  */
1246                     runp->used
1247                       = runp->fileinfo->scninfo[SCNINFO_SHDR (runp->shdr).sh_info].used;
1248                 }
1249
1250               /* Accumulate the result.  */
1251               used |= runp->used;
1252
1253               /* Next input section.  */
1254               runp = runp->next;
1255             }
1256           while (runp != h->last);
1257
1258           h->used = used;
1259         }
1260
1261       ld_state.allsections[cnt++] = h;
1262     }
1263   ld_state.nusedsections = cnt;
1264
1265   assert (cnt == ld_state.nallsections);
1266 }
1267
1268
1269 /* Add given path to the end of list.  */
1270 static void
1271 add_rxxpath (struct pathelement **pathp, const char *str)
1272 {
1273   struct pathelement *newp;
1274
1275   /* The path elements can in theory be freed after we read all the
1276      files.  But the amount of memory we are talking about is small
1277      and the cost of free() calls is not neglectable.  */
1278   newp = (struct pathelement *) obstack_alloc (&ld_state.smem, sizeof (*newp));
1279   newp->pname = str;
1280   newp->exist = 0;
1281 #ifndef NDEBUG
1282   newp->next = NULL;
1283 #endif
1284
1285   CSNGL_LIST_ADD_REAR (*pathp, newp);
1286 }
1287
1288
1289 /* Convert lists of possibly colon-separated directory lists into lists
1290    where each entry is for a single directory.  */
1291 static void
1292 normalize_dirlist (struct pathelement **pathp)
1293 {
1294   struct pathelement *firstp = *pathp;
1295
1296   do
1297     {
1298       const char *pname = (*pathp)->pname;
1299       const char *colonp = strchrnul (pname, ':');
1300
1301       if (colonp != NULL)
1302         {
1303           struct pathelement *lastp = *pathp;
1304           struct pathelement *newp;
1305
1306           while (1)
1307             {
1308               if (colonp == pname)
1309                 lastp->pname = ".";
1310               else
1311                 lastp->pname = obstack_strndup (&ld_state.smem, pname,
1312                                                 colonp - pname);
1313
1314               if (*colonp == '\0')
1315                 break;
1316               pname = colonp + 1;
1317
1318               newp = (struct pathelement *) obstack_alloc (&ld_state.smem,
1319                                                            sizeof (*newp));
1320               newp->next = lastp->next;
1321               newp->exist = 0;
1322               lastp = lastp->next = newp;
1323
1324               colonp = strchrnul (pname, ':');
1325             }
1326
1327           pathp = &lastp->next;
1328         }
1329       else
1330         pathp = &(*pathp)->next;
1331     }
1332   while (*pathp != firstp);
1333 }
1334
1335
1336 /* Called after all parameters are parsed to bring the runpath/rpath
1337    information into a usable form.  */
1338 static void
1339 gen_rxxpath_data (void)
1340 {
1341   char *ld_library_path2;
1342
1343   /* Convert the information in true single-linked lists for easy use.
1344      At this point we also discard the rpath information if runpath
1345      information is provided.  rpath is deprecated and should not be
1346      used (or ever be invented for that matter).  */
1347   if (ld_state.rpath != NULL)
1348     {
1349       struct pathelement *endp = ld_state.rpath;
1350       ld_state.rpath = ld_state.rpath->next;
1351       endp->next = NULL;
1352     }
1353   if (ld_state.rpath_link != NULL)
1354     {
1355       struct pathelement *endp = ld_state.rpath_link;
1356       ld_state.rpath_link = ld_state.rpath_link->next;
1357       endp->next = NULL;
1358     }
1359
1360   if (ld_state.runpath != NULL)
1361     {
1362       struct pathelement *endp = ld_state.runpath;
1363       ld_state.runpath = ld_state.runpath->next;
1364       endp->next = NULL;
1365
1366       /* If rpath information is also available discard it.
1367          XXX Should there be a possibility to avoid this?  */
1368       while (ld_state.rpath != NULL)
1369         {
1370           struct pathelement *old = ld_state.rpath;
1371           ld_state.rpath = ld_state.rpath->next;
1372           free (old);
1373         }
1374     }
1375   if (ld_state.runpath_link != NULL)
1376     {
1377       struct pathelement *endp = ld_state.runpath_link;
1378       ld_state.runpath_link = ld_state.runpath_link->next;
1379       endp->next = NULL;
1380
1381       /* If rpath information is also available discard it.
1382          XXX Should there be a possibility to avoid this?  */
1383       while (ld_state.rpath_link != NULL)
1384         {
1385           struct pathelement *old = ld_state.rpath_link;
1386           ld_state.rpath_link = ld_state.rpath_link->next;
1387           free (old);
1388         }
1389
1390       /* The information in the strings in the list can actually be
1391          directory lists themselves, with entries separated by colons.
1392          Convert the list now to a list with one list entry for each
1393          directory.  */
1394       normalize_dirlist (&ld_state.runpath_link);
1395     }
1396   else if (ld_state.rpath_link != NULL)
1397     /* Same as for the runpath_link above.  */
1398     normalize_dirlist (&ld_state.rpath_link);
1399
1400
1401   /* As a related task, handle the LD_LIBRARY_PATH value here.  First
1402      we have to possibly split the value found (if it contains a
1403      semicolon).  Then we have to split the value in list of
1404      directories, i.e., split at the colons.  */
1405   if (ld_library_path1 != NULL)
1406     {
1407       ld_library_path2 = strchr (ld_library_path1, ';');
1408       if (ld_library_path2 == NULL)
1409         {
1410           /* If no semicolon is present the directories are looked at
1411              after the -L parameters (-> ld_library_path2).  */
1412           ld_library_path2 = ld_library_path1;
1413           ld_library_path1 = NULL;
1414         }
1415       else
1416         {
1417           /* NUL terminate the first part.  */
1418           *ld_library_path2++ = '\0';
1419
1420           /* Convert the string value in a list.  */
1421           add_rxxpath (&ld_state.ld_library_path1, ld_library_path1);
1422           normalize_dirlist (&ld_state.ld_library_path1);
1423         }
1424
1425       add_rxxpath (&ld_state.ld_library_path2, ld_library_path2);
1426       normalize_dirlist (&ld_state.ld_library_path2);
1427     }
1428 }
1429
1430
1431 static void
1432 read_version_script (const char *fname)
1433 {
1434   /* Open the file.  The name is supposed to be the complete (relative
1435      or absolute) path.  No search along a path will be performed.  */
1436   ldin = fopen (fname, "r");
1437   if (ldin == NULL)
1438     error (EXIT_FAILURE, errno, gettext ("cannot read version script '%s'"),
1439            fname);
1440   /* No need for locking.  */
1441   __fsetlocking (ldin, FSETLOCKING_BYCALLER);
1442
1443   /* Tell the parser that this is a version script.  */
1444   ld_scan_version_script = 1;
1445
1446   ldlineno = 1;
1447   ldin_fname = fname;
1448   if (ldparse () != 0)
1449     /* Something went wrong during parsing.  */
1450     exit (EXIT_FAILURE);
1451
1452   fclose (ldin);
1453 }
1454
1455
1456 static void
1457 create_lscript_symbols (void)
1458 {
1459   /* Walk through the data from the linker script and generate all the
1460      symbols which are required to be present and those marked
1461      with PROVIDE if there is a undefined reference.  */
1462   if (ld_state.output_segments == NULL)
1463     return;
1464
1465   struct output_segment *segment = ld_state.output_segments->next;
1466   do
1467     {
1468       struct output_rule *orule;
1469
1470       for (orule = segment->output_rules; orule != NULL; orule = orule->next)
1471         if (orule->tag == output_assignment
1472             /* The assignments to "." (i.e., the PC) have to be
1473                ignored here.  */
1474             && strcmp (orule->val.assignment->variable, ".") != 0)
1475           {
1476             struct symbol *s = ld_state.unresolved;
1477
1478             /* Check whether the symbol is needed.  */
1479             if (likely (s != NULL))
1480               {
1481                 struct symbol *first = s;
1482                 const char *providename = orule->val.assignment->variable;
1483
1484                 /* Determine whether the provided symbol is still
1485                    undefined.  */
1486                 // XXX TODO Loop inside a loop.  Gag!  Must rewrite.  */
1487                 do
1488                   if (strcmp (s->name, providename) == 0)
1489                     {
1490                       /* Not defined but referenced.  */
1491                       if (unlikely (!s->defined))
1492                         {
1493                           /* Put on the list of symbols.  First remove it from
1494                              whatever list it currently is on.  */
1495                           CDBL_LIST_DEL (ld_state.unresolved, s);
1496                           --ld_state.nunresolved;
1497                           goto use_it;
1498                         }
1499
1500                       if (unlikely (!orule->val.assignment->provide_flag))
1501                         {
1502                           /* The symbol is already defined and now again
1503                              in the linker script.  This is an error.  */
1504                           error (0, 0, gettext ("\
1505 duplicate definition of '%s' in linker script"),
1506                                  providename);
1507                           goto next_rule;
1508                         }
1509                     }
1510                 while ((s = s->next) != first);
1511               }
1512
1513             /* If the symbol only has to be provided if it is needed,
1514                ignore it here since it is not undefined.  */
1515             if (orule->val.assignment->provide_flag)
1516               continue;
1517
1518             /* Allocate memory for this new symbol.  */
1519             s = (struct symbol *)
1520               obstack_calloc (&ld_state.smem, sizeof (struct symbol));
1521
1522             /* Initialize it.  */
1523             s->name = orule->val.assignment->variable;
1524
1525             /* Insert it into the symbol hash table.  */
1526             unsigned long int hval = elf_hash (s->name);
1527             if (unlikely (ld_symbol_tab_insert (&ld_state.symbol_tab,
1528                                                 hval, s) != 0))
1529               {
1530                 /* This means the symbol is defined somewhere else.
1531                    Maybe it comes from a DSO or so.  Get the
1532                    definition.  */
1533                 free (s);
1534                 struct symbol *old = ld_symbol_tab_find (&ld_state.symbol_tab,
1535                                                          hval, s);
1536                 assert (old != NULL);
1537                 free (s);
1538
1539                 /* If this is a definition from the application itself
1540                    this means a duplicate definition.  */
1541                 if (! old->in_dso)
1542                   {
1543                     error (0, 0, gettext ("\
1544 duplicate definition of '%s' in linker script"),
1545                            s->name);
1546                     goto next_rule;
1547                   }
1548
1549                 /* We use the definition from the linker script.  */
1550                 s = old;
1551               }
1552
1553           use_it:
1554             /* The symbol is (now) defined.  */
1555             s->defined = 1;
1556             s->type = STT_NOTYPE;
1557
1558             /* Add a reference to the symbol record.  We will come
1559                across it when creating the output file.  */
1560             orule->val.assignment->sym = s;
1561
1562             SNGL_LIST_PUSH (ld_state.lscript_syms, s);
1563             ++ld_state.nlscript_syms;
1564
1565           next_rule:
1566             ;
1567           }
1568
1569       segment = segment->next;
1570     }
1571   while (segment != ld_state.output_segments->next);
1572 }
1573
1574
1575 /* Create creation of spection section symbols representing sections in the
1576    output file.  This is done for symbols like _GLOBAL_OFFSET_TABLE_ and
1577    _DYNAMIC.  */
1578 static void
1579 create_special_section_symbol (struct symbol **symp, const char *name)
1580 {
1581   if (*symp == NULL)
1582     {
1583       /* No symbol defined found yet.  Create one.  */
1584       struct symbol *newsym = (struct symbol *)
1585         obstack_calloc (&ld_state.smem, sizeof (*newsym));
1586
1587       newsym->name = name;
1588       // XXX Should we mark the symbol hidden?  They are hardly useful
1589       // used outside the current object.
1590
1591       /* Add to the symbol table.  */
1592       if (unlikely (ld_symbol_tab_insert (&ld_state.symbol_tab,
1593                                           elf_hash (name), newsym) != 0))
1594         abort ();
1595
1596       *symp = newsym;
1597     }
1598   else if ((*symp)->defined)
1599     /* Cannot happen.  We do use this symbol from any input file.  */
1600     abort ();
1601
1602   (*symp)->defined = 1;
1603   (*symp)->local = 1;
1604   (*symp)->hidden = 1;
1605   (*symp)->type = STT_OBJECT;
1606
1607   ++ld_state.nsymtab;
1608 }
1609
1610
1611 #include "debugpred.h"