1/* Copyright (C) 2001, 2002, 2003 Red Hat, Inc.
2   Written by Ulrich Drepper <drepper@redhat.com>, 2001.
3
4   This program is Open Source software; you can redistribute it and/or
5   modify it under the terms of the Open Software License version 1.0 as
6   published by the Open Source Initiative.
7
8   You should have received a copy of the Open Software License along
9   with this program; if not, you may obtain a copy of the Open Software
10   License version 1.0 from http://www.opensource.org/licenses/osl.php or
11   by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
12   3001 King Ranch Road, Ukiah, CA 95482.   */
13
14#ifndef LD_H
15#define LD_H	1
16
17#include <dlfcn.h>
18#include <obstack.h>
19#include <stdbool.h>
20#include <stdio.h>
21#include "xelf.h"
22
23
24/* Recommended size of the buffer passed to ld_strerror.  */
25#define ERRBUFSIZE	(512)
26
27/* Character used to introduce version name after symbol.  */
28#define VER_CHR	'@'
29
30
31/* Methods for handling archives.  */
32enum extract_rule
33  {
34    defaultextract,	/* Weak references don't cause archive member to
35			   be used.  */
36    weakextract,	/* Weak references cause archive member to be
37			   extracted.  */
38    allextract		/* Extract all archive members regardless of
39			   references (aka whole-archive).  */
40  };
41
42
43/* Type of output file.  */
44enum file_type
45  {
46    no_file_type = 0,		/* None selected so far.  */
47    executable_file_type,	/* Executable.  */
48    dso_file_type,		/* DSO.  */
49    dso_needed_file_type,	/* DSO introduced by DT_NEEDED.  */
50    relocatable_file_type,	/* Relocatable object file.  */
51    archive_file_type		/* Archive (input only).  */
52  };
53
54
55struct usedfiles
56{
57  /* The next file given at the command line.  */
58  struct usedfiles *next;
59  /* Nonzero if this file is the beginning of a group.  */
60  bool group_start;
61  /* Nonzero if this file is the end of a group.  */
62  bool group_end;
63  /* Pointer to the beginning of the group.  It is necessary to
64     explain why we cannot simply use the 'next' pointer and have a
65     circular single-linked list like in many cases.  The problem is
66     that the last archive of the group, if it is the last file of the
67     group, contains the only existing pointer to the next file we
68     have to look at.  All files are initially connected via the
69     'next' pointer in a single-linked list.  Therefore we cannot
70     overwrite this value.  It instead will be used once the group is
71     handled and we go on processing the rest of the files.  */
72  struct usedfiles *group_backref;
73
74  /* Name/path of the file.  */
75  const char *fname;
76  /* Resolved file name.  */
77  const char *rfname;
78  /* Name used as reference in DT_NEEDED entries.  This is normally
79     the SONAME.  If it is missing it's normally the fname above.  */
80  const char *soname;
81  /* Handle for the SONAME in the string table.  */
82  struct Ebl_Strent *sonameent;
83
84  /* Help to identify duplicates.  */
85  dev_t dev;
86  ino_t ino;
87
88  enum
89    {
90      not_opened,
91      opened,
92      in_archive,
93      closed
94    } status;
95
96  /* How to extract elements from archives.  */
97  enum extract_rule extract_rule;
98
99  /* Lazy-loading rule.  */
100  bool lazyload;
101
102  /* If this is a DSO the flag indicates whether the file is directly
103     used in a reference.  */
104  bool used;
105
106  /* If nonzero this is the archive sequence number which can be used to
107     determine whether back refernces from -( -) or GROUP statements
108     have to be followed.  */
109  int archive_seq;
110
111  /* Pointer to the record for the archive containing this file.  */
112  struct usedfiles *archive_file;
113
114  /* Type of file.  We have to distinguish these types since they
115     are searched for differently.  */
116  enum file_type file_type;
117  /* This is the ELF library handle for this file.  */
118  Elf *elf;
119
120  /* The ELF header.  */
121#if NATIVE_ELF != 0
122  XElf_Ehdr *ehdr;
123# define FILEINFO_EHDR(fi) (*(fi))
124#else
125  XElf_Ehdr ehdr;
126# define FILEINFO_EHDR(fi) (fi)
127#endif
128
129  /* Index of the section header string table section.  We use a
130     separate field and not the e_shstrndx field in the ELF header
131     since in case of a file with more than 64000 sections the index
132     might be stored in the section header of section zero.  The
133     elf_getshstrndx() function can find the value but it is too
134     costly to repeat this call over and over.  */
135  size_t shstrndx;
136
137  /* Info about the sections of the file.  */
138  struct scninfo
139  {
140    /* Handle for the section.  Note that we can store a section
141       handle here because the file is not changing.  This together
142       with the knowledge about the libelf library is enough for us to
143       assume the section reference remains valid at all times.  */
144    Elf_Scn *scn;
145    /* Section header.  */
146#if NATIVE_ELF != 0
147    XElf_Shdr *shdr;
148# define SCNINFO_SHDR(si) (*(si))
149#else
150    XElf_Shdr shdr;
151# define SCNINFO_SHDR(si) (si)
152#endif
153    /* Offset of this files section in the combined section.  */
154    XElf_Off offset;
155    /* Index of the section in the output file.  */
156    Elf32_Word outscnndx;
157    /* Index of the output section in the 'allsection' array.  */
158    Elf32_Word allsectionsidx;
159    /* True if the section is used.  */
160    bool used;
161    /* Section group number.  This is the index of the SHT_GROUP section.  */
162    Elf32_Word grpid;
163    /* Pointer back to the containing file information structure.  */
164    struct usedfiles *fileinfo;
165    /* List of symbols in this section (set only for merge-able sections).  */
166    struct symbol *symbols;
167    /* Size of relocations in this section.  Only used for relocation
168       sections.  */
169    size_t relsize;
170    /* Pointer to next section which is put in the given output
171       section.  */
172    struct scninfo *next;
173  } *scninfo;
174
175  /* List of section group sections.  */
176  struct scninfo *groups;
177
178  /* The symbol table section.
179
180     XXX Maybe support for more than one symbol table is needed.  */
181  Elf_Data *symtabdata;
182  /* Extra section index table section.  */
183  Elf_Data *xndxdata;
184  /* Dynamic symbol table section.  */
185  Elf_Data *dynsymtabdata;
186  /* The version number section.  */
187  Elf_Data *versymdata;
188  /* The defined versions.  */
189  Elf_Data *verdefdata;
190  /* Number of versions defined.  */
191  size_t nverdef;
192  /* True if the version with the given index number is used in the
193     output.  */
194  XElf_Versym *verdefused;
195  /* How many versions are used.  */
196  size_t nverdefused;
197  /* Handle for name of the version.  */
198  struct Ebl_Strent **verdefent;
199  /* The needed versions.  */
200  Elf_Data *verneeddata;
201  /* String table section associated with the symbol table.  */
202  Elf32_Word symstridx;
203  /* String table section associated with the dynamic symbol table.  */
204  Elf32_Word dynsymstridx;
205  /* Number of entries in the symbol table.  */
206  size_t nsymtab;
207  size_t nlocalsymbols;
208  size_t ndynsymtab;
209  /* Dynamic section.  */
210  Elf_Scn *dynscn;
211
212  /* Indirection table for the symbols defined here.  */
213  Elf32_Word *symindirect;
214  Elf32_Word *dynsymindirect;
215  /* For undefined or common symbols we need a reference to the symbol
216     record.  */
217  struct symbol **symref;
218  struct symbol **dynsymref;
219
220  /* This is the file descriptor.  The value is -1 if the descriptor
221     was already closed.  This can happen if we needed file descriptors
222     to open new files.  */
223  int fd;
224  /* This flag is true if the descriptor was passed to the generic
225     functions from somewhere else.  This is an implementation detail;
226     no machine-specific code must use this flag.  */
227  bool fd_passed;
228
229  /* True if any of the sections is merge-able.  */
230  bool has_merge_sections;
231};
232
233
234/* Functions to test for the various types of files we handle.  */
235static inline int
236ld_file_rel_p (struct usedfiles *file)
237{
238  return (elf_kind (file->elf) == ELF_K_ELF
239	  && FILEINFO_EHDR (file->ehdr).e_type == ET_REL);
240}
241
242static inline int
243ld_file_dso_p (struct usedfiles *file)
244{
245  return (elf_kind (file->elf) == ELF_K_ELF
246	  && FILEINFO_EHDR (file->ehdr).e_type == ET_DYN);
247}
248
249static inline int
250ld_file_ar_p (struct usedfiles *file)
251{
252  return elf_kind (file->elf) == ELF_K_AR;
253}
254
255
256struct pathelement
257{
258  /* The next path to search.  */
259  struct pathelement *next;
260  /* The path name.  */
261  const char *pname;
262  /* Larger than zero if the directory exists, smaller than zero if not,
263     zero if it is not yet known.  */
264  int exist;
265};
266
267
268/* Forward declaration.  */
269struct ld_state;
270
271
272/* Callback functions.  */
273struct callbacks
274{
275  /* Library names passed to the linker as -lXXX represent files named
276     libXXX.YY.  The YY part can have different forms, depending on the
277     architecture.  The generic set is .so and .a (in this order).  */
278  const char **(*lib_extensions) (struct ld_state *)
279       __attribute__ ((__const__));
280#define LIB_EXTENSION(state) \
281  DL_CALL_FCT ((state)->callbacks.lib_extensions, (state))
282
283  /* Process the given file.  If the file is not yet open, open it.
284     The first parameter is a file descriptor for the file which can
285     be -1 to indicate the file has not yet been found.  The second
286     parameter describes the file to be opened, the last one is the
287     state of the linker which among other information contain the
288     paths we look at.*/
289  int (*file_process) (int fd, struct usedfiles *, struct ld_state *,
290		       struct usedfiles **);
291#define FILE_PROCESS(fd, file, state, nextp) \
292  DL_CALL_FCT ((state)->callbacks.file_process, (fd, file, state, nextp))
293
294  /* Close the given file.  */
295  int (*file_close) (struct usedfiles *, struct ld_state *);
296#define FILE_CLOSE(file, state) \
297  DL_CALL_FCT ((state)->callbacks.file_close, (file, state))
298
299  /* Create the output sections now.  This requires knowledge about
300     all the sections we will need.  It may be necessary to sort the
301     sections in the order they are supposed to appear in the
302     executable.  The sorting use many different kinds of information
303     to optimize the resulting binary.  Important is to respect
304     segment boundaries and the needed alignment.  The mode of the
305     segments will be determined afterwards automatically by the
306     output routines.  */
307  void (*create_sections) (struct ld_state *);
308#define CREATE_SECTIONS(state) \
309  DL_CALL_FCT ((state)->callbacks.create_sections, (state))
310
311  /* Determine whether we have any non-weak unresolved references left.  */
312  int (*flag_unresolved) (struct ld_state *);
313#define FLAG_UNRESOLVED(state) \
314  DL_CALL_FCT ((state)->callbacks.flag_unresolved, (state))
315
316  /* Create the sections which are generated by the linker and are not
317     present in the input file.  */
318  void (*generate_sections) (struct ld_state *);
319#define GENERATE_SECTIONS(state) \
320  DL_CALL_FCT ((state)->callbacks.generate_sections, (state))
321
322  /* Open the output file.  The file name is given or "a.out".  We
323     create as much of the ELF structure as possible.  */
324  int (*open_outfile) (struct ld_state *, int, int, int);
325#define OPEN_OUTFILE(state, machine, class, data) \
326  DL_CALL_FCT ((state)->callbacks.open_outfile, (state, machine, class, data))
327
328  /* Create the data for the output file.  */
329  int (*create_outfile) (struct ld_state *);
330#define CREATE_OUTFILE(state) \
331  DL_CALL_FCT ((state)->callbacks.create_outfile, (state))
332
333  /* Process a relocation section.  */
334  void (*relocate_section) (struct ld_state *, Elf_Scn *, struct scninfo *,
335			    const Elf32_Word *);
336#define RELOCATE_SECTION(state, outscn, first, dblindirect) \
337  DL_CALL_FCT ((state)->callbacks.relocate_section, (state, outscn, first,    \
338						     dblindirect))
339
340  /* Allocate a data buffer for the relocations of the given output
341     section.  */
342  void (*count_relocations) (struct ld_state *, struct scninfo *);
343#define COUNT_RELOCATIONS(state, scninfo) \
344  DL_CALL_FCT ((state)->callbacks.count_relocations, (state, scninfo))
345
346  /* Create relocations for executable or DSO.  */
347  void (*create_relocations) (struct ld_state *, const Elf32_Word *);
348#define CREATE_RELOCATIONS(state, dlbindirect) \
349  DL_CALL_FCT ((state)->callbacks.create_relocations, (state, dblindirect))
350
351  /* Finalize the output file.  */
352  int (*finalize) (struct ld_state *);
353#define FINALIZE(state) \
354  DL_CALL_FCT ((state)->callbacks.finalize, (state))
355
356  /* Check whether special section number is known.  */
357  bool (*special_section_number_p) (struct ld_state *, size_t);
358#define SPECIAL_SECTION_NUMBER_P(state, number) \
359  DL_CALL_FCT ((state)->callbacks.special_section_number_p, (state, number))
360
361  /* Check whether section type is known.  */
362  bool (*section_type_p) (struct ld_state *, XElf_Word);
363#define SECTION_TYPE_P(state, type) \
364  DL_CALL_FCT ((state)->callbacks.section_type_p, (state, type))
365
366  /* Return section flags for .dynamic section.  */
367  XElf_Xword (*dynamic_section_flags) (struct ld_state *);
368#define DYNAMIC_SECTION_FLAGS(state) \
369  DL_CALL_FCT ((state)->callbacks.dynamic_section_flags, (state))
370
371  /* Create the data structures for the .plt section and initialize it.  */
372  void (*initialize_plt) (struct ld_state *, Elf_Scn *scn);
373#define INITIALIZE_PLT(state, scn) \
374  DL_CALL_FCT ((state)->callbacks.initialize_plt, (state, scn))
375
376  /* Create the data structures for the .rel.plt section and initialize it.  */
377  void (*initialize_pltrel) (struct ld_state *, Elf_Scn *scn);
378#define INITIALIZE_PLTREL(state, scn) \
379  DL_CALL_FCT ((state)->callbacks.initialize_pltrel, (state, scn))
380
381  /* Finalize the .plt section the what belongs to them.  */
382  void (*finalize_plt) (struct ld_state *, size_t, size_t);
383#define FINALIZE_PLT(state, nsym, nsym_dyn) \
384  DL_CALL_FCT ((state)->callbacks.finalize_plt, (state, nsym, nsym_dyn))
385
386  /* Create the data structures for the .got section and initialize it.  */
387  void (*initialize_got) (struct ld_state *, Elf_Scn *scn);
388#define INITIALIZE_GOT(state, scn) \
389  DL_CALL_FCT ((state)->callbacks.initialize_got, (state, scn))
390
391  /* Return the tag corresponding to the native relocation type for
392     the platform.  */
393  int (*rel_type) (struct ld_state *);
394#define REL_TYPE(state) \
395  DL_CALL_FCT ((state)->callbacks.rel_type, (state))
396};
397
398
399/* Structure for symbol representation.  This data structure is used a
400   lot, so size is important.  */
401struct symbol
402{
403  /* Symbol name.  */
404  const char *name;
405  /* Size of the object.  */
406  XElf_Xword size;
407  /* Index of the symbol in the symbol table of the object.  */
408  size_t symidx;
409  /* Index of the symbol in the symbol table of the output file.  */
410  size_t outsymidx;
411
412  /* Description where the symbol is found/needed.  */
413  size_t scndx;
414  struct usedfiles *file;
415  /* Index of the symbol table.  */
416  Elf32_Word symscndx;
417
418  /* Index of the symbol in the dynamic symbol table of the output
419     file.  Note that the value only needs to be 16 bit wide since
420     there cannot be more sections in an executable or DSO.  */
421  unsigned int outdynsymidx:16;
422
423  /* Type of the symbol.  */
424  unsigned int type:4;
425  /* Various flags.  */
426  unsigned int defined:1;
427  unsigned int common:1;
428  unsigned int weak:1;
429  unsigned int added:1;
430  unsigned int merged:1;
431  /* Nonzero if the symbol is on the from_dso list.  */
432  unsigned int on_dsolist:1;
433  /* Nonzero if symbol needs copy relocation, reset when the
434     relocation has been created.  */
435  unsigned int need_copy:1;
436  unsigned int in_dso:1;
437
438  union
439  {
440    /* Pointer to the handle created by the functions which create
441       merged section contents.  We use 'void *' because there are
442       different implementations used.  */
443    void *handle;
444    XElf_Addr value;
445  } merge;
446
447  /* Pointer to next/previous symbol on whatever list the symbol is.  */
448  struct symbol *next;
449  struct symbol *previous;
450  /* Pointer to next symbol of the same section (only set for merge-able
451     sections).  */
452  struct symbol *next_in_scn;
453};
454
455
456/* Get the definition for the symbol table.  */
457#include <symbolhash.h>
458
459/* Simple single linked list of file names.  */
460struct filename_list
461{
462  const char *name;
463  struct usedfiles *real;
464  struct filename_list *next;
465  bool group_start;
466  bool group_end;
467};
468
469
470/* Data structure to describe expression in linker script.  */
471struct expression
472{
473  enum expression_tag
474    {
475      exp_num,
476      exp_sizeof_headers,
477      exp_pagesize,
478      exp_id,
479      exp_mult,
480      exp_div,
481      exp_mod,
482      exp_plus,
483      exp_minus,
484      exp_and,
485      exp_or,
486      exp_align
487    } tag;
488
489  union
490  {
491    uintmax_t num;
492    struct expression *child;
493    struct
494    {
495      struct expression *left;
496      struct expression *right;
497    } binary;
498    const char *str;
499  } val;
500};
501
502
503/* Data structure for section name with flags.  */
504struct input_section_name
505{
506  const char *name;
507  bool sort_flag;
508};
509
510/* File name mask with section name.  */
511struct filemask_section_name
512{
513  const char *filemask;
514  const char *excludemask;
515  struct input_section_name *section_name;
516  bool keep_flag;
517};
518
519/* Data structure for assignments.  */
520struct assignment
521{
522  const char *variable;
523  struct expression *expression;
524  struct symbol *sym;
525  bool provide_flag;
526};
527
528
529/* Data structure describing input for an output section.  */
530struct input_rule
531{
532  enum
533    {
534      input_section,
535      input_assignment
536    } tag;
537
538  union
539  {
540    struct assignment *assignment;
541    struct filemask_section_name *section;
542  } val;
543
544  struct input_rule *next;
545};
546
547
548/* Data structure to describe output section.  */
549struct output_section
550{
551  const char *name;
552  struct input_rule *input;
553  XElf_Addr max_alignment;
554  bool ignored;
555};
556
557
558/* Data structure to describe output file format.  */
559struct output_rule
560{
561  enum
562    {
563      output_section,
564      output_assignment
565    } tag;
566
567  union
568  {
569    struct assignment *assignment;
570    struct output_section section;
571  } val;
572
573  struct output_rule *next;
574};
575
576
577/* List of all the segments the linker script describes.  */
578struct output_segment
579{
580  int mode;
581  struct output_rule *output_rules;
582  struct output_segment *next;
583
584  XElf_Off offset;
585  XElf_Addr addr;
586  XElf_Xword align;
587};
588
589
590/* List of identifiers.  */
591struct id_list
592{
593  union
594  {
595    enum id_type
596      {
597	id_str,		/* Normal string.  */
598	id_all,		/* "*", matches all.  */
599	id_wild		/* Globbing wildcard string.  */
600      } id_type;
601    struct
602    {
603      bool local;
604      const char *versionname;
605    } s;
606  } u;
607  const char *id;
608  struct id_list *next;
609};
610
611
612/* Version information.  */
613struct version
614{
615  struct version *next;
616  struct id_list *local_names;
617  struct id_list *global_names;
618  const char *versionname;
619  const char *parentname;
620};
621
622
623/* Head for list of sections.  */
624struct scnhead
625{
626  /* Name of the sections.  */
627  const char *name;
628
629  /* Accumulated flags for the sections.  */
630  XElf_Xword flags;
631
632  /* Type of the sections.  */
633  XElf_Word type;
634
635  /* Entry size.  If there are differencs between the sections with
636     the same name this field contains 1.  */
637  XElf_Word entsize;
638
639  /* If non-NULL pointer to group signature.  */
640  const char *grp_signature;
641
642  /* Maximum alignment for all sections.  */
643  XElf_Word align;
644
645  /* Distinguish between normal sections coming from the input file
646     and sections generated by the linker.  */
647  enum scn_kind
648    {
649      scn_normal,		/* Section from the input file(s).  */
650      scn_dot_interp,		/* Generated .interp section.  */
651      scn_dot_got,		/* Generated .got section.  */
652      scn_dot_dynrel,		/* Generated .rel.dyn section.  */
653      scn_dot_dynamic,		/* Generated .dynamic section.  */
654      scn_dot_dynsym,		/* Generated .dynsym section.  */
655      scn_dot_dynstr,		/* Generated .dynstr section.  */
656      scn_dot_hash,		/* Generated .hash section.  */
657      scn_dot_plt,		/* Generated .plt section.  */
658      scn_dot_pltrel,		/* Generated .rel.plt section.  */
659      scn_dot_version,		/* Generated .gnu.version section.  */
660      scn_dot_version_r		/* Generated .gnu.version_r section.  */
661    } kind;
662
663  /* True is the section is used in the output.  */
664  bool used;
665
666  /* Total size (only determined this way for relocation sections).  */
667  size_t relsize;
668
669  /* Filled in by the section sorting to indicate which segment the
670     section goes in.  */
671  int segment_nr;
672
673  /* Index of the output section.  We cannot store the section handle
674     directly here since the handle is a pointer in a dynamically
675     allocated table which might move if it becomes too small for all
676     the sections.  Using the index the correct value can be found at
677     all times.  */
678  XElf_Word scnidx;
679
680  /* Index of the STT_SECTION entry for this section in the symbol
681     table.  */
682  XElf_Word scnsymidx;
683
684  /* Address of the section in the output file.  */
685  XElf_Addr addr;
686
687  /* Handle for the section name in the output file's section header
688     string table.  */
689  struct Ebl_Strent *nameent;
690
691  /* Tail of list of symbols for this section.  Only set if the
692     section is merge-able.  */
693  struct symbol *symbols;
694
695  /* Pointer to last section.  */
696  struct scninfo *last;
697};
698
699
700/* Define hash table for sections.  */
701#include <sectionhash.h>
702
703/* Define hash table for version symbols.  */
704#include <versionhash.h>
705
706
707/* State of the linker.  */
708struct ld_state
709{
710  /* ELF backend library handle.  */
711  Ebl *ebl;
712
713  /* List of all archives participating, in this order.  */
714  struct usedfiles *archives;
715  /* End of the list.  */
716  struct usedfiles *tailarchives;
717  /* If nonzero we are looking for the beginning of a group.  */
718  bool group_start_requested;
719  /* Pointer to the archive starting the group.  */
720  struct usedfiles *group_start_archive;
721
722  /* List of the DSOs we found.  */
723  struct usedfiles *dsofiles;
724  /* Number of DSO files.  */
725  size_t ndsofiles;
726  /* Ultimate list of object files which are linked in.  */
727  struct usedfiles *relfiles;
728
729  /* List the DT_NEEDED DSOs.  */
730  struct usedfiles *needed;
731
732  /* Temporary storage for the parser.  */
733  struct filename_list *srcfiles;
734
735  /* List of all the paths to look at.  */
736  struct pathelement *paths;
737  /* Tail of the list.  */
738  struct pathelement *tailpaths;
739
740  /* User provided paths for lookup of DSOs.  */
741  struct pathelement *rpath;
742  struct pathelement *rpath_link;
743  struct pathelement *runpath;
744  struct pathelement *runpath_link;
745  struct Ebl_Strent *rxxpath_strent;
746  int rxxpath_tag;
747
748  /* From the environment variable LD_LIBRARY_PATH.  */
749  struct pathelement *ld_library_path1;
750  struct pathelement *ld_library_path2;
751
752  /* Name of the output file.  */
753  const char *outfname;
754  /* Name of the temporary file we initially create.  */
755  const char *tempfname;
756  /* File descriptor opened for the output file.  */
757  int outfd;
758  /* The ELF descriptor for the output file.  */
759  Elf *outelf;
760
761  /* Type of output file.  */
762  enum file_type file_type;
763
764  /* Is this a system library or not.  */
765  bool is_system_library;
766
767  /* Page size to be assumed for the binary.  */
768  size_t pagesize;
769
770  /* Name of the interpreter for dynamically linked objects.  */
771  const char *interp;
772  /* Index of the .interp section.  */
773  Elf32_Word interpscnidx;
774
775  /* Optimization level.  */
776  unsigned long int optlevel;
777
778  /* If true static linking is requested.  */
779  bool statically;
780
781  /* How to extract elements from archives.  */
782  enum extract_rule extract_rule;
783
784  /* Sequence number of the last archive we used.  */
785  int last_archive_used;
786
787  /* If true print to stdout information about the files we are
788     trying to open.  */
789  bool trace_files;
790
791  /* If true multiple definitions are not considered an error; the
792     first is used.  */
793  bool muldefs;
794
795  /* If true undefined symbols when building DSOs are not fatal.  */
796  bool nodefs;
797
798  /* If true add line indentifying link-editor to .comment section.  */
799  bool add_ld_comment;
800
801  /* Stripping while linking.  */
802  enum
803    {
804      strip_none,
805      strip_debug,
806      strip_all,
807      strip_everything
808    } strip;
809
810  /* The callback function vector.  */
811  struct callbacks callbacks;
812
813  /* Name of the entry symbol.  Can also be a numeric value.  */
814  const char *entry;
815
816  /* The description of the segments in the output file.  */
817  struct output_segment *output_segments;
818
819  /* List of the symbols we created from linker script definitions.  */
820  struct symbol *lscript_syms;
821  size_t nlscript_syms;
822
823  /* Table with known symbols.  */
824  ld_symbol_tab symbol_tab;
825
826  /* Table with used sections.  */
827  ld_section_tab section_tab;
828
829  /* The list of sections once we collected them.   */
830  struct scnhead **allsections;
831  size_t nallsections;
832  size_t nusedsections;
833  size_t nnotesections;
834
835  /* Beginning of the list of symbols which are still unresolved.  */
836  struct symbol *unresolved;
837  /* Number of truely unresolved entries in the list.  */
838  size_t nunresolved;
839  /* Number of truely unresolved, non-weak entries in the list.  */
840  size_t nunresolved_nonweak;
841
842  /* List of common symbols.  */
843  struct symbol *common_syms;
844  /* Section for the common symbols.  */
845  struct scninfo *common_section;
846
847  /* List of symbols defined in DSOs and used in a relocatable file.
848     DSO symbols not referenced in the relocatable files are not on
849     the list.  If a symbol is on the list the on_dsolist field in the
850     'struct symbol' is nonzero.  */
851  struct symbol *from_dso;
852  /* Number of entries in from_dso.  */
853  size_t nfrom_dso;
854  /* Number of entries in the dynamic symbol table.  */
855  size_t ndynsym;
856  /* Number of PLT entries from DSO references.  */
857  size_t nplt;
858  /* Number of PLT entries from DSO references.  */
859  size_t ngot;
860  /* Number of copy relocations.  */
861  size_t ncopy;
862  /* Section for copy relocations.  */
863  struct scninfo *copy_section;
864
865  /* Keeping track of the number of symbols in the output file.  */
866  size_t nsymtab;
867  size_t nlocalsymbols;
868
869  /* Special symbols.  */
870  struct symbol *init_symbol;
871  struct symbol *fini_symbol;
872
873  /* The description of the segments in the output file as described
874     in the default linker script.  This information will be used in
875     addition to the user-provided information.  */
876  struct output_segment *default_output_segments;
877  /* Search paths added by the default linker script.  */
878  struct pathelement *default_paths;
879
880#ifndef BASE_ELF_NAME
881  /* The handle of the ld backend library.  */
882  void *ldlib;
883#endif
884
885  /* String table for the section headers.  */
886  struct Ebl_Strtab *shstrtab;
887
888  /* True if output file should contain symbol table.  */
889  bool need_symtab;
890  /* Symbol table section.  */
891  Elf32_Word symscnidx;
892  /* Extended section table section.  */
893  Elf32_Word xndxscnidx;
894  /* Symbol string table section.  */
895  Elf32_Word strscnidx;
896
897  /* True if output file should contain dynamic symbol table.  */
898  bool need_dynsym;
899  /* Dynamic symbol table section.  */
900  Elf32_Word dynsymscnidx;
901  /* Dynamic symbol string table section.  */
902  Elf32_Word dynstrscnidx;
903  /* Dynamic symbol hash table.  */
904  size_t hashscnidx;
905
906  /* Procedure linkage table section.  */
907  Elf32_Word pltscnidx;
908  /* Number of entries already in the PLT section.  */
909  size_t nplt_used;
910  /* Relocation for procedure linkage table section.  */
911  Elf32_Word pltrelscnidx;
912
913  /* Global offset table section.  */
914  Elf32_Word gotscnidx;
915
916  /* This section will hole all non-PLT relocations.  */
917  Elf32_Word reldynscnidx;
918
919  /* Index of the sections to handle versioning.  */
920  Elf32_Word versymscnidx;
921  Elf32_Word verneedscnidx;
922  /* XXX Should the following names be verneed...?  */
923  /* Number of version definitions in input DSOs used.  */
924  int nverdefused;
925  /* Number of input DSOs using versioning.  */
926  int nverdeffile;
927  /* Index of next version.  */
928  int nextveridx;
929
930  /* Hash table for version symbol strings.  Only strings without
931     special characters are hashed here.  */
932  ld_version_str_tab version_str_tab;
933  /* At most one of the following two variables is set to true if either
934     global or local symbol binding is selected as the default.  */
935  bool default_bind_local;
936  bool default_bind_global;
937
938  /* True if only used sections are used.  */
939  bool gc_sections;
940
941  /* Array to determine final index of symbol.  */
942  Elf32_Word *dblindirect;
943
944  /* Section group handling.  */
945  struct scngroup
946  {
947    Elf32_Word outscnidx;
948    int nscns;
949    struct member
950    {
951      struct scnhead *scn;
952      struct member *next;
953    } *member;
954    struct Ebl_Strent *nameent;
955    struct symbol *symbol;
956    struct scngroup *next;
957  } *groups;
958
959  /* True if the output file needs a .got section.  */
960  bool need_got;
961  /* Number of relocations for GOT section caused.  */
962  size_t nrel_got;
963
964  /* Number of entries needed in the .dynamic section.  */
965  int ndynamic;
966  /* To keep track of added entries.  */
967  int ndynamic_filled;
968  /* Index for the dynamic section.  */
969  Elf32_Word dynamicscnidx;
970
971  /* Flags set in the DT_FLAGS word.  */
972  Elf32_Word dt_flags;
973  /* Flags set in the DT_FLAGS_1 word.  */
974  Elf32_Word dt_flags_1;
975  /* Flags set in the DT_FEATURE_1 word.  */
976  Elf32_Word dt_feature_1;
977
978  /* Lazy-loading state for dependencies.  */
979  bool lazyload;
980
981  /* True is DSOs which are not used in the linking process are not
982     recorded.  */
983  bool ignore_unused_dsos;
984
985
986  /* True if in executables all global symbols should be exported in
987     the dynamic symbol table.  */
988  bool export_all_dynamic;
989
990  /* If DSO is generated, this is the SONAME.  */
991  const char *soname;
992
993  /* List of all relocation sections.  */
994  struct scninfo *rellist;
995  /* Total size of non-PLT relocations.  */
996  size_t relsize_total;
997
998  /* Record for the GOT symbol, if known.  */
999  struct symbol *got_symbol;
1000  /* Record for the dynamic section symbol, if known.  */
1001  struct symbol *dyn_symbol;
1002
1003  /* Obstack used for small objects which will not be deleted.  */
1004  struct obstack smem;
1005};
1006
1007
1008/* The interface to the scanner.  */
1009
1010/* Parser entry point.  */
1011extern int ldparse (void);
1012
1013/* The input file.  */
1014extern FILE *ldin;
1015
1016/* Name of the input file.  */
1017extern const char *ldin_fname;
1018
1019/* Current line number.  Must be reset for a new file.  */
1020extern int ldlineno;
1021
1022/* If nonzero we are currently parsing a version script.  */
1023extern int ld_scan_version_script;
1024
1025/* Flags defined in ld.c.  */
1026extern int verbose;
1027extern int conserve_memory;
1028
1029
1030/* Linker state.  This contains all global information.  */
1031extern struct ld_state ld_state;
1032
1033
1034/* Generic ld helper functions.  */
1035
1036/* Append a new directory to search libraries in.  */
1037extern void ld_new_searchdir (const char *dir);
1038
1039/* Append a new file to the list of input files.  */
1040extern struct usedfiles *ld_new_inputfile (const char *fname,
1041					   enum file_type type);
1042
1043
1044/* These are the generic implementations for the callbacks used by ld.  */
1045
1046/* Initialize state object.  This callback function is called after the
1047   parameters are parsed but before any file is searched for.  */
1048extern int ld_prepare_state (const char *emulation);
1049
1050
1051/* Function to determine whether an object will be dynamically linked.  */
1052extern bool dynamically_linked_p (void);
1053
1054/* Helper functions for the architecture specific code.  */
1055
1056/* Checked whether the symbol is undefined and referenced from a DSO.  */
1057extern bool linked_from_dso_p (struct scninfo *scninfo, int symidx);
1058extern inline bool
1059linked_from_dso_p (struct scninfo *scninfo, int symidx)
1060{
1061  struct usedfiles *file = scninfo->fileinfo;
1062
1063  /* If this symbol is not undefined in this file it cannot come from
1064     a DSO.  */
1065  if (symidx < file->nlocalsymbols)
1066    return false;
1067
1068  struct symbol *sym = file->symref[symidx];
1069
1070  return sym->defined && sym->in_dso;
1071}
1072
1073#endif	/* ld.h */
1074