1 /* Copyright (C) 2001-2010, 2012 Red Hat, Inc. 2 This file is part of elfutils. 3 Written by Ulrich Drepper <drepper (at) 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" 1612