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