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