• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.  */
44 enum 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.  */
56 enum 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 
67 struct 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.  */
256 static inline int
ld_file_rel_p(struct usedfiles * file)257 ld_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 
263 static inline int
ld_file_dso_p(struct usedfiles * file)264 ld_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 
270 static inline int
ld_file_ar_p(struct usedfiles * file)271 ld_file_ar_p (struct usedfiles *file)
272 {
273   return elf_kind (file->elf) == ELF_K_AR;
274 }
275 
276 
277 struct 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.  */
290 struct ld_state;
291 
292 
293 /* Callback functions.  */
294 struct 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.  */
428 struct 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.  */
489 struct 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.  */
501 struct 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.  */
534 struct input_section_name
535 {
536   const char *name;
537   bool sort_flag;
538 };
539 
540 /* File name mask with section name.  */
541 struct 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.  */
550 struct 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.  */
560 struct 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.  */
579 struct 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.  */
589 struct 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.  */
608 struct 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.  */
621 struct 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.  */
643 struct 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.  */
654 struct 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.  */
741 struct 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.  */
1078 extern int ldparse (void);
1079 
1080 /* The input file.  */
1081 extern FILE *ldin;
1082 
1083 /* Name of the input file.  */
1084 extern const char *ldin_fname;
1085 
1086 /* Current line number.  Must be reset for a new file.  */
1087 extern int ldlineno;
1088 
1089 /* If nonzero we are currently parsing a version script.  */
1090 extern int ld_scan_version_script;
1091 
1092 /* Flags defined in ld.c.  */
1093 extern int verbose;
1094 extern int conserve_memory;
1095 
1096 
1097 /* Linker state.  This contains all global information.  */
1098 extern struct ld_state ld_state;
1099 
1100 
1101 /* Generic ld helper functions.  */
1102 
1103 /* Append a new directory to search libraries in.  */
1104 extern void ld_new_searchdir (const char *dir);
1105 
1106 /* Append a new file to the list of input files.  */
1107 extern 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.  */
1115 extern int ld_prepare_state (const char *emulation);
1116 
1117 
1118 /* Function to determine whether an object will be dynamically linked.  */
1119 extern 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.  */
1124 extern bool linked_from_dso_p (struct scninfo *scninfo, size_t symidx);
1125 #ifdef __GNUC_STDC_INLINE__
1126 __attribute__ ((__gnu_inline__))
1127 #endif
1128 extern inline bool
linked_from_dso_p(struct scninfo * scninfo,size_t symidx)1129 linked_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