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