/[gcl]/gcl/binutils/include/bfdlink.h
ViewVC logotype

Diff of /gcl/binutils/include/bfdlink.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by camm, Fri Aug 9 05:36:38 2002 UTC revision 1.1.1.1.20.1 by camm, Fri Sep 30 02:10:23 2005 UTC
# Line 1  Line 1 
1  /* bfdlink.h -- header file for BFD link routines  /* bfdlink.h -- header file for BFD link routines
2     Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002     Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3     Free Software Foundation, Inc.     2003, 2004, 2005 Free Software Foundation, Inc.
4     Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.     Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
5    
6     This file is part of BFD, the Binary File Descriptor library.     This file is part of BFD, the Binary File Descriptor library.
# Line 66  enum bfd_link_hash_type Line 66  enum bfd_link_hash_type
66    bfd_link_hash_warning         /* Like indirect, but warn if referenced.  */    bfd_link_hash_warning         /* Like indirect, but warn if referenced.  */
67  };  };
68    
69    enum bfd_link_common_skip_ar_aymbols
70    {
71      bfd_link_common_skip_none,
72      bfd_link_common_skip_text,
73      bfd_link_common_skip_data,
74      bfd_link_common_skip_all
75    };
76    
77  /* The linking routines use a hash table which uses this structure for  /* The linking routines use a hash table which uses this structure for
78     its elements.  */     its elements.  */
79    
# Line 73  struct bfd_link_hash_entry Line 81  struct bfd_link_hash_entry
81  {  {
82    /* Base hash table entry structure.  */    /* Base hash table entry structure.  */
83    struct bfd_hash_entry root;    struct bfd_hash_entry root;
84    
85    /* Type of this entry.  */    /* Type of this entry.  */
86    enum bfd_link_hash_type type;    enum bfd_link_hash_type type;
87    
   /* Undefined and common symbols are kept in a linked list through  
      this field.  This field is not in the union because that would  
      force us to remove entries from the list when we changed their  
      type, which would force the list to be doubly linked, which would  
      waste more memory.  When an undefined or common symbol is  
      created, it should be added to this list, the head of which is in  
      the link hash table itself.  As symbols are defined, they need  
      not be removed from the list; anything which reads the list must  
      doublecheck the symbol type.  
   
      Weak symbols are not kept on this list.  
   
      Defined and defweak symbols use this field as a reference marker.  
      If the field is not NULL, or this structure is the tail of the  
      undefined symbol list, the symbol has been referenced.  If the  
      symbol is undefined and becomes defined, this field will  
      automatically be non-NULL since the symbol will have been on the  
      undefined symbol list.  */  
   struct bfd_link_hash_entry *next;  
88    /* A union of information depending upon the type.  */    /* A union of information depending upon the type.  */
89    union    union
90      {      {
# Line 102  struct bfd_link_hash_entry Line 92  struct bfd_link_hash_entry
92        /* bfd_link_hash_undefined, bfd_link_hash_undefweak.  */        /* bfd_link_hash_undefined, bfd_link_hash_undefweak.  */
93        struct        struct
94          {          {
95              /* Undefined and common symbols are kept in a linked list through
96                 this field.  This field is present in all of the union element
97                 so that we don't need to remove entries from the list when we
98                 change their type.  Removing entries would either require the
99                 list to be doubly linked, which would waste more memory, or
100                 require a traversal.  When an undefined or common symbol is
101                 created, it should be added to this list, the head of which is in
102                 the link hash table itself.  As symbols are defined, they need
103                 not be removed from the list; anything which reads the list must
104                 doublecheck the symbol type.
105    
106                 Weak symbols are not kept on this list.
107    
108                 Defined and defweak symbols use this field as a reference marker.
109                 If the field is not NULL, or this structure is the tail of the
110                 undefined symbol list, the symbol has been referenced.  If the
111                 symbol is undefined and becomes defined, this field will
112                 automatically be non-NULL since the symbol will have been on the
113                 undefined symbol list.  */
114              struct bfd_link_hash_entry *next;
115            bfd *abfd;            /* BFD symbol was found in.  */            bfd *abfd;            /* BFD symbol was found in.  */
116              bfd *weak;            /* BFD weak symbol was found in.  */
117          } undef;          } undef;
118        /* bfd_link_hash_defined, bfd_link_hash_defweak.  */        /* bfd_link_hash_defined, bfd_link_hash_defweak.  */
119        struct        struct
120          {          {
121            bfd_vma value;        /* Symbol value.  */            struct bfd_link_hash_entry *next;
122            asection *section;    /* Symbol section.  */            asection *section;    /* Symbol section.  */
123              bfd_vma value;        /* Symbol value.  */
124          } def;          } def;
125        /* bfd_link_hash_indirect, bfd_link_hash_warning.  */        /* bfd_link_hash_indirect, bfd_link_hash_warning.  */
126        struct        struct
127          {          {
128              struct bfd_link_hash_entry *next;
129            struct bfd_link_hash_entry *link;     /* Real symbol.  */            struct bfd_link_hash_entry *link;     /* Real symbol.  */
130            const char *warning;  /* Warning (bfd_link_hash_warning only).  */            const char *warning;  /* Warning (bfd_link_hash_warning only).  */
131          } i;          } i;
132        /* bfd_link_hash_common.  */        /* bfd_link_hash_common.  */
133        struct        struct
134          {          {
135              struct bfd_link_hash_entry *next;
136            /* The linker needs to know three things about common            /* The linker needs to know three things about common
137               symbols: the size, the alignment, and the section in               symbols: the size, the alignment, and the section in
138               which the symbol should be placed.  We store the size               which the symbol should be placed.  We store the size
139               here, and we allocate a small structure to hold the               here, and we allocate a small structure to hold the
140               section and the alignment.  The alignment is stored as a               section and the alignment.  The alignment is stored as a
141               power of two.  We don't store all the information               power of two.  We don't store all the information
142               directly because we don't want to increase the size of               directly because we don't want to increase the size of
143               the union; this structure is a major space user in the               the union; this structure is a major space user in the
144               linker.  */               linker.  */
           bfd_size_type size;   /* Common symbol size.  */  
145            struct bfd_link_hash_common_entry            struct bfd_link_hash_common_entry
146              {              {
147                unsigned int alignment_power;     /* Alignment.  */                unsigned int alignment_power;     /* Alignment.  */
148                asection *section;                /* Symbol section.  */                asection *section;                /* Symbol section.  */
149              } *p;              } *p;
150              bfd_size_type size;   /* Common symbol size.  */
151          } c;          } c;
152      } u;      } u;
153  };  };
# Line 155  struct bfd_link_hash_table Line 169  struct bfd_link_hash_table
169    struct bfd_link_hash_entry *undefs;    struct bfd_link_hash_entry *undefs;
170    /* Entries are added to the tail of the undefs list.  */    /* Entries are added to the tail of the undefs list.  */
171    struct bfd_link_hash_entry *undefs_tail;    struct bfd_link_hash_entry *undefs_tail;
172    /* The type of the ink hash table.  */    /* The type of the link hash table.  */
173    enum bfd_link_hash_table_type type;    enum bfd_link_hash_table_type type;
174  };  };
175    
176  /* Look up an entry in a link hash table.  If FOLLOW is true, this  /* Look up an entry in a link hash table.  If FOLLOW is TRUE, this
177     follows bfd_link_hash_indirect and bfd_link_hash_warning links to     follows bfd_link_hash_indirect and bfd_link_hash_warning links to
178     the real symbol.  */     the real symbol.  */
179  extern struct bfd_link_hash_entry *bfd_link_hash_lookup  extern struct bfd_link_hash_entry *bfd_link_hash_lookup
180    PARAMS ((struct bfd_link_hash_table *, const char *, boolean create,    (struct bfd_link_hash_table *, const char *, bfd_boolean create,
181             boolean copy, boolean follow));     bfd_boolean copy, bfd_boolean follow);
182    
183  /* Look up an entry in the main linker hash table if the symbol might  /* Look up an entry in the main linker hash table if the symbol might
184     be wrapped.  This should only be used for references to an     be wrapped.  This should only be used for references to an
185     undefined symbol, not for definitions of a symbol.  */     undefined symbol, not for definitions of a symbol.  */
186    
187  extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup  extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
188    PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean, boolean,    (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
189             boolean));     bfd_boolean, bfd_boolean);
190    
191  /* Traverse a link hash table.  */  /* Traverse a link hash table.  */
192  extern void bfd_link_hash_traverse  extern void bfd_link_hash_traverse
193    PARAMS ((struct bfd_link_hash_table *,    (struct bfd_link_hash_table *,
194             boolean (*) (struct bfd_link_hash_entry *, PTR),      bfd_boolean (*) (struct bfd_link_hash_entry *, void *),
195             PTR));      void *);
196    
197  /* Add an entry to the undefs list.  */  /* Add an entry to the undefs list.  */
198  extern void bfd_link_add_undef  extern void bfd_link_add_undef
199    PARAMS ((struct bfd_link_hash_table *, struct bfd_link_hash_entry *));    (struct bfd_link_hash_table *, struct bfd_link_hash_entry *);
200    
201    /* Remove symbols from the undefs list that don't belong there.  */
202    extern void bfd_link_repair_undef_list
203      (struct bfd_link_hash_table *table);
204    
205  struct bfd_sym_chain  struct bfd_sym_chain
206  {  {
# Line 190  struct bfd_sym_chain Line 208  struct bfd_sym_chain
208    const char *name;    const char *name;
209  };  };
210    
211    /* How to handle unresolved symbols.
212       There are four possibilities which are enumerated below:  */
213    enum report_method
214    {
215      /* This is the initial value when then link_info structure is created.
216         It allows the various stages of the linker to determine whether they
217         allowed to set the value.  */
218      RM_NOT_YET_SET = 0,
219      RM_IGNORE,
220      RM_GENERATE_WARNING,
221      RM_GENERATE_ERROR
222    };
223    
224  /* This structure holds all the information needed to communicate  /* This structure holds all the information needed to communicate
225     between BFD and the linker when doing a link.  */     between BFD and the linker when doing a link.  */
226    
227  struct bfd_link_info  struct bfd_link_info
228  {  {
229    /* Function callbacks.  */    /* TRUE if BFD should generate a relocatable object file.  */
230    const struct bfd_link_callbacks *callbacks;    unsigned int relocatable: 1;
   
   /* true if BFD should generate a relocateable object file.  */  
   boolean relocateable;  
231    
232    /* true if BFD should generate relocation information in the final    /* TRUE if BFD should generate relocation information in the final
233       executable.  */       executable.  */
234    boolean emitrelocations;    unsigned int emitrelocations: 1;
235    
236    /* true if BFD should generate a "task linked" object file,    /* TRUE if BFD should generate a "task linked" object file,
237       similar to relocatable but also with globals converted to       similar to relocatable but also with globals converted to
238       statics.  */       statics.  */
239    boolean task_link;    unsigned int task_link: 1;
240    
241    /* true if BFD should generate a shared object.  */    /* TRUE if BFD should generate a shared object.  */
242    boolean shared;    unsigned int shared: 1;
243    
244    /* true if BFD should pre-bind symbols in a shared object.  */    /* TRUE if BFD should pre-bind symbols in a shared object.  */
245    boolean symbolic;    unsigned int symbolic: 1;
246    
247    /* true if BFD should export all symbols in the dynamic symbol table    /* TRUE if BFD should export all symbols in the dynamic symbol table
248       of an executable, rather than only those used.  */       of an executable, rather than only those used.  */
249    boolean export_dynamic;    unsigned int export_dynamic: 1;
250    
251    /* true if shared objects should be linked directly, not shared.  */    /* TRUE if shared objects should be linked directly, not shared.  */
252    boolean static_link;    unsigned int static_link: 1;
253    
254    /* true if the output file should be in a traditional format.  This    /* TRUE if the output file should be in a traditional format.  This
255       is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag       is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
256       on the output file, but may be checked when reading the input       on the output file, but may be checked when reading the input
257       files.  */       files.  */
258    boolean traditional_format;    unsigned int traditional_format: 1;
259    
260    /* true if we want to produced optimized output files.  This might    /* TRUE if we want to produced optimized output files.  This might
261       need much more time and therefore must be explicitly selected.  */       need much more time and therefore must be explicitly selected.  */
262    boolean optimize;    unsigned int optimize: 1;
263    
264      /* TRUE if ok to have multiple definition.  */
265      unsigned int allow_multiple_definition: 1;
266    
267      /* TRUE if ok to have version with no definition.  */
268      unsigned int allow_undefined_version: 1;
269    
270      /* TRUE if a default symbol version should be created and used for
271         exported symbols.  */
272      unsigned int create_default_symver: 1;
273    
274      /* TRUE if a default symbol version should be created and used for
275         imported symbols.  */
276      unsigned int default_imported_symver: 1;
277    
278    /* true if BFD should generate errors for undefined symbols    /* TRUE if symbols should be retained in memory, FALSE if they
279       even if generating a shared object.  */       should be freed and reread.  */
280    boolean no_undefined;    unsigned int keep_memory: 1;
281    
282    /* true if BFD should allow undefined symbols in shared objects even    /* TRUE if every symbol should be reported back via the notice
283       when no_undefined is set to disallow undefined symbols.  The net       callback.  */
284       result will be that undefined symbols in regular objects will    unsigned int notice_all: 1;
      still trigger an error, but undefined symbols in shared objects  
      will be ignored.  The implementation of no_undefined makes the  
      assumption that the runtime linker will choke on undefined  
      symbols.  However there is at least one system (BeOS) where  
      undefined symbols in shared libraries is normal since the kernel  
      patches them at load time to select which function is most  
      appropriate for the current architecture.  I.E. dynamically  
      select an appropriate memset function.  Apparently it is also  
      normal for HPPA shared libraries to have undefined symbols.  */  
   boolean allow_shlib_undefined;  
285    
286    /* true if ok to have multiple definition.  */    /* TRUE if executable should not contain copy relocs.
287    boolean allow_multiple_definition;       Setting this true may result in a non-sharable text segment.  */
288      unsigned int nocopyreloc: 1;
289    
290      /* TRUE if the new ELF dynamic tags are enabled. */
291      unsigned int new_dtags: 1;
292    
293      /* TRUE if non-PLT relocs should be merged into one reloc section
294         and sorted so that relocs against the same symbol come together.  */
295      unsigned int combreloc: 1;
296    
297      /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
298         should be created.  */
299      unsigned int eh_frame_hdr: 1;
300    
301      /* TRUE if global symbols in discarded sections should be stripped.  */
302      unsigned int strip_discarded: 1;
303    
304      /* TRUE if the final relax pass is needed.  */
305      unsigned int need_relax_finalize: 1;
306    
307      /* TRUE if generating a position independent executable.  */
308      unsigned int pie: 1;
309    
310      /* TRUE if generating an executable, position independent or not.  */
311      unsigned int executable : 1;
312    
313      /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
314         flags.  */
315      unsigned int execstack: 1;
316    
317      /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
318         flags.  */
319      unsigned int noexecstack: 1;
320    
321      /* TRUE if PT_GNU_RELRO segment should be created.  */
322      unsigned int relro: 1;
323    
324      /* TRUE if we should warn when adding a DT_TEXTREL to a shared object.  */
325      unsigned int warn_shared_textrel: 1;
326    
327      /* What to do with unresolved symbols in an object file.
328         When producing executables the default is GENERATE_ERROR.
329         When producing shared libraries the default is IGNORE.  The
330         assumption with shared libraries is that the reference will be
331         resolved at load/execution time.  */
332      enum report_method unresolved_syms_in_objects;
333    
334      /* What to do with unresolved symbols in a shared library.
335         The same defaults apply.  */
336      enum report_method unresolved_syms_in_shared_libs;
337    
338    /* Which symbols to strip.  */    /* Which symbols to strip.  */
339    enum bfd_link_strip strip;    enum bfd_link_strip strip;
# Line 260  struct bfd_link_info Line 341  struct bfd_link_info
341    /* Which local symbols to discard.  */    /* Which local symbols to discard.  */
342    enum bfd_link_discard discard;    enum bfd_link_discard discard;
343    
344    /* true if symbols should be retained in memory, false if they    /* Criteria for skipping symbols when detemining
345       should be freed and reread.  */       whether to include an object from an archive. */
346    boolean keep_memory;    enum bfd_link_common_skip_ar_aymbols common_skip_ar_aymbols;
347    
348    /* The list of input BFD's involved in the link.  These are chained    /* Char that may appear as the first char of a symbol, but should be
349       together via the link_next field.  */       skipped (like symbol_leading_char) when looking up symbols in
350    bfd *input_bfds;       wrap_hash.  Used by PowerPC Linux for 'dot' symbols.  */
351      char wrap_char;
   /* If a symbol should be created for each input BFD, this is section  
      where those symbols should be placed.  It must be a section in  
      the output BFD.  It may be NULL, in which case no such symbols  
      will be created.  This is to support CREATE_OBJECT_SYMBOLS in the  
      linker command language.  */  
   asection *create_object_symbols_section;  
352    
353    /* List of global symbol names that are starting points for marking    /* Function callbacks.  */
354       sections against garbage collection.  */    const struct bfd_link_callbacks *callbacks;
   struct bfd_sym_chain *gc_sym_list;  
355    
356    /* Hash table handled by BFD.  */    /* Hash table handled by BFD.  */
357    struct bfd_link_hash_table *hash;    struct bfd_link_hash_table *hash;
# Line 286  struct bfd_link_info Line 360  struct bfd_link_info
360       strip_some.  */       strip_some.  */
361    struct bfd_hash_table *keep_hash;    struct bfd_hash_table *keep_hash;
362    
   /* true if every symbol should be reported back via the notice  
      callback.  */  
   boolean notice_all;  
   
363    /* Hash table of symbols to report back via the notice callback.  If    /* Hash table of symbols to report back via the notice callback.  If
364       this is NULL, and notice_all is false, then no symbols are       this is NULL, and notice_all is FALSE, then no symbols are
365       reported back.  */       reported back.  */
366    struct bfd_hash_table *notice_hash;    struct bfd_hash_table *notice_hash;
367    
# Line 299  struct bfd_link_info Line 369  struct bfd_link_info
369       option).  If this is NULL, no symbols are being wrapped.  */       option).  If this is NULL, no symbols are being wrapped.  */
370    struct bfd_hash_table *wrap_hash;    struct bfd_hash_table *wrap_hash;
371    
372    /* If a base output file is wanted, then this points to it */    /* The list of input BFD's involved in the link.  These are chained
373    PTR base_file;       together via the link_next field.  */
374      bfd *input_bfds;
375    
376      /* If a symbol should be created for each input BFD, this is section
377         where those symbols should be placed.  It must be a section in
378         the output BFD.  It may be NULL, in which case no such symbols
379         will be created.  This is to support CREATE_OBJECT_SYMBOLS in the
380         linker command language.  */
381      asection *create_object_symbols_section;
382    
383    /* If non-zero, specifies that branches which are problematic for the    /* List of global symbol names that are starting points for marking
384    MPC860 C0 (or earlier) should be checked for and modified.  It gives the       sections against garbage collection.  */
385    number of bytes that should be checked at the end of each text page. */    struct bfd_sym_chain *gc_sym_list;
386    int mpc860c0;  
387      /* If a base output file is wanted, then this points to it */
388      void *base_file;
389    
390    /* The function to call when the executable or shared object is    /* The function to call when the executable or shared object is
391       loaded.  */       loaded.  */
# Line 315  struct bfd_link_info Line 395  struct bfd_link_info
395       unloaded.  */       unloaded.  */
396    const char *fini_function;    const char *fini_function;
397    
398    /* true if the new ELF dynamic tags are enabled. */    /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
   boolean new_dtags;  
   
   /* May be used to set DT_FLAGS for ELF. */  
   bfd_vma flags;  
   
   /* May be used to set DT_FLAGS_1 for ELF. */  
   bfd_vma flags_1;  
   
   /* Non-zero if auto-import thunks for DATA items in pei386 DLLs  
399       should be generated/linked against.  Set to 1 if this feature       should be generated/linked against.  Set to 1 if this feature
400       is explicitly requested by the user, -1 if enabled by default.  */       is explicitly requested by the user, -1 if enabled by default.  */
401    int pei386_auto_import;    int pei386_auto_import;
402    
403    /* True if non-PLT relocs should be merged into one reloc section    /* Non-zero if runtime relocs for DATA items with non-zero addends
404       and sorted so that relocs against the same symbol come together.  */       in pei386 DLLs should be generated.  Set to 1 if this feature
405    boolean combreloc;       is explicitly requested by the user, -1 if enabled by default.  */
406      int pei386_runtime_pseudo_reloc;
   /* True if executable should not contain copy relocs.  
      Setting this true may result in a non-sharable text segment.  */  
   boolean nocopyreloc;  
   
   /* True if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment  
      should be created.  */  
   boolean eh_frame_hdr;  
407    
408    /* How many spare .dynamic DT_NULL entries should be added?  */    /* How many spare .dynamic DT_NULL entries should be added?  */
409    unsigned int spare_dynamic_tags;    unsigned int spare_dynamic_tags;
410    
411      /* May be used to set DT_FLAGS for ELF. */
412      bfd_vma flags;
413    
414      /* May be used to set DT_FLAGS_1 for ELF. */
415      bfd_vma flags_1;
416    
417      /* Start and end of RELRO region.  */
418      bfd_vma relro_start, relro_end;
419  };  };
420    
421  /* This structures holds a set of callback functions.  These are  /* This structures holds a set of callback functions.  These are
422     called by the BFD linker routines.  The first argument to each     called by the BFD linker routines.  The first argument to each
423     callback function is the bfd_link_info structure being used.  Each     callback function is the bfd_link_info structure being used.  Each
424     function returns a boolean value.  If the function returns false,     function returns a boolean value.  If the function returns FALSE,
425     then the BFD function which called it will return with a failure     then the BFD function which called it will return with a failure
426     indication.  */     indication.  */
427    
# Line 358  struct bfd_link_callbacks Line 431  struct bfd_link_callbacks
431       archive.  ABFD is the archive element being added.  NAME is the       archive.  ABFD is the archive element being added.  NAME is the
432       name of the symbol which caused the archive element to be pulled       name of the symbol which caused the archive element to be pulled
433       in.  */       in.  */
434    boolean (*add_archive_element) PARAMS ((struct bfd_link_info *,    bfd_boolean (*add_archive_element)
435                                            bfd *abfd,      (struct bfd_link_info *, bfd *abfd, const char *name);
                                           const char *name));  
436    /* A function which is called when a symbol is found with multiple    /* A function which is called when a symbol is found with multiple
437       definitions.  NAME is the symbol which is defined multiple times.       definitions.  NAME is the symbol which is defined multiple times.
438       OBFD is the old BFD, OSEC is the old section, OVAL is the old       OBFD is the old BFD, OSEC is the old section, OVAL is the old
439       value, NBFD is the new BFD, NSEC is the new section, and NVAL is       value, NBFD is the new BFD, NSEC is the new section, and NVAL is
440       the new value.  OBFD may be NULL.  OSEC and NSEC may be       the new value.  OBFD may be NULL.  OSEC and NSEC may be
441       bfd_com_section or bfd_ind_section.  */       bfd_com_section or bfd_ind_section.  */
442    boolean (*multiple_definition) PARAMS ((struct bfd_link_info *,    bfd_boolean (*multiple_definition)
443                                            const char *name,      (struct bfd_link_info *, const char *name,
444                                            bfd *obfd,       bfd *obfd, asection *osec, bfd_vma oval,
445                                            asection *osec,       bfd *nbfd, asection *nsec, bfd_vma nval);
                                           bfd_vma oval,  
                                           bfd *nbfd,  
                                           asection *nsec,  
                                           bfd_vma nval));  
446    /* A function which is called when a common symbol is defined    /* A function which is called when a common symbol is defined
447       multiple times.  NAME is the symbol appearing multiple times.       multiple times.  NAME is the symbol appearing multiple times.
448       OBFD is the BFD of the existing symbol; it may be NULL if this is       OBFD is the BFD of the existing symbol; it may be NULL if this is
# Line 386  struct bfd_link_callbacks Line 454  struct bfd_link_callbacks
454       symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or       symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
455       bfd_link_hash_indirect.  If NTYPE is bfd_link_hash_common, NSIZE       bfd_link_hash_indirect.  If NTYPE is bfd_link_hash_common, NSIZE
456       is the size of the new symbol.  */       is the size of the new symbol.  */
457    boolean (*multiple_common) PARAMS ((struct bfd_link_info *,    bfd_boolean (*multiple_common)
458                                        const char *name,      (struct bfd_link_info *, const char *name,
459                                        bfd *obfd,       bfd *obfd, enum bfd_link_hash_type otype, bfd_vma osize,
460                                        enum bfd_link_hash_type otype,       bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
                                       bfd_vma osize,  
                                       bfd *nbfd,  
                                       enum bfd_link_hash_type ntype,  
                                       bfd_vma nsize));  
461    /* A function which is called to add a symbol to a set.  ENTRY is    /* A function which is called to add a symbol to a set.  ENTRY is
462       the link hash table entry for the set itself (e.g.,       the link hash table entry for the set itself (e.g.,
463       __CTOR_LIST__).  RELOC is the relocation to use for an entry in       __CTOR_LIST__).  RELOC is the relocation to use for an entry in
464       the set when generating a relocateable file, and is also used to       the set when generating a relocatable file, and is also used to
465       get the size of the entry when generating an executable file.       get the size of the entry when generating an executable file.
466       ABFD, SEC and VALUE identify the value to add to the set.  */       ABFD, SEC and VALUE identify the value to add to the set.  */
467    boolean (*add_to_set) PARAMS ((struct bfd_link_info *,    bfd_boolean (*add_to_set)
468                                   struct bfd_link_hash_entry *entry,      (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
469                                   bfd_reloc_code_real_type reloc,       bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
                                  bfd *abfd, asection *sec, bfd_vma value));  
470    /* A function which is called when the name of a g++ constructor or    /* A function which is called when the name of a g++ constructor or
471       destructor is found.  This is only called by some object file       destructor is found.  This is only called by some object file
472       formats.  CONSTRUCTOR is true for a constructor, false for a       formats.  CONSTRUCTOR is TRUE for a constructor, FALSE for a
473       destructor.  This will use BFD_RELOC_CTOR when generating a       destructor.  This will use BFD_RELOC_CTOR when generating a
474       relocateable file.  NAME is the name of the symbol found.  ABFD,       relocatable file.  NAME is the name of the symbol found.  ABFD,
475       SECTION and VALUE are the value of the symbol.  */       SECTION and VALUE are the value of the symbol.  */
476    boolean (*constructor) PARAMS ((struct bfd_link_info *,    bfd_boolean (*constructor)
477                                    boolean constructor,      (struct bfd_link_info *, bfd_boolean constructor, const char *name,
478                                    const char *name, bfd *abfd, asection *sec,       bfd *abfd, asection *sec, bfd_vma value);
                                   bfd_vma value));  
479    /* A function which is called to issue a linker warning.  For    /* A function which is called to issue a linker warning.  For
480       example, this is called when there is a reference to a warning       example, this is called when there is a reference to a warning
481       symbol.  WARNING is the warning to be issued.  SYMBOL is the name       symbol.  WARNING is the warning to be issued.  SYMBOL is the name
# Line 421  struct bfd_link_callbacks Line 483  struct bfd_link_callbacks
483       there is none.  ABFD, SECTION and ADDRESS identify the location       there is none.  ABFD, SECTION and ADDRESS identify the location
484       which trigerred the warning; either ABFD or SECTION or both may       which trigerred the warning; either ABFD or SECTION or both may
485       be NULL if the location is not known.  */       be NULL if the location is not known.  */
486    boolean (*warning) PARAMS ((struct bfd_link_info *,    bfd_boolean (*warning)
487                                const char *warning, const char *symbol,      (struct bfd_link_info *, const char *warning, const char *symbol,
488                                bfd *abfd, asection *section,       bfd *abfd, asection *section, bfd_vma address);
                               bfd_vma address));  
489    /* A function which is called when a relocation is attempted against    /* A function which is called when a relocation is attempted against
490       an undefined symbol.  NAME is the symbol which is undefined.       an undefined symbol.  NAME is the symbol which is undefined.
491       ABFD, SECTION and ADDRESS identify the location from which the       ABFD, SECTION and ADDRESS identify the location from which the
492       reference is made. FATAL indicates whether an undefined symbol is       reference is made. FATAL indicates whether an undefined symbol is
493       a fatal error or not. In some cases SECTION may be NULL.  */       a fatal error or not. In some cases SECTION may be NULL.  */
494    boolean (*undefined_symbol) PARAMS ((struct bfd_link_info *,    bfd_boolean (*undefined_symbol)
495                                         const char *name, bfd *abfd,      (struct bfd_link_info *, const char *name, bfd *abfd,
496                                         asection *section,       asection *section, bfd_vma address, bfd_boolean fatal);
497                                         bfd_vma address,    /* A function which is called when a reloc overflow occurs. ENTRY is
498                                         boolean fatal));       the link hash table entry for the symbol the reloc is against.
499    /* A function which is called when a reloc overflow occurs.  NAME is       NAME is the name of the local symbol or section the reloc is
500       the name of the symbol or section the reloc is against,       against, RELOC_NAME is the name of the relocation, and ADDEND is
501       RELOC_NAME is the name of the relocation, and ADDEND is any       any addend that is used.  ABFD, SECTION and ADDRESS identify the
      addend that is used.  ABFD, SECTION and ADDRESS identify the  
502       location at which the overflow occurs; if this is the result of a       location at which the overflow occurs; if this is the result of a
503       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
504       ABFD will be NULL.  */       ABFD will be NULL.  */
505    boolean (*reloc_overflow) PARAMS ((struct bfd_link_info *,    bfd_boolean (*reloc_overflow)
506                                       const char *name,      (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
507                                       const char *reloc_name, bfd_vma addend,       const char *name, const char *reloc_name, bfd_vma addend,
508                                       bfd *abfd, asection *section,       bfd *abfd, asection *section, bfd_vma address);
                                      bfd_vma address));  
509    /* A function which is called when a dangerous reloc is performed.    /* A function which is called when a dangerous reloc is performed.
510       The canonical example is an a29k IHCONST reloc which does not       The canonical example is an a29k IHCONST reloc which does not
511       follow an IHIHALF reloc.  MESSAGE is an appropriate message.       follow an IHIHALF reloc.  MESSAGE is an appropriate message.
# Line 454  struct bfd_link_callbacks Line 513  struct bfd_link_callbacks
513       problem occurred; if this is the result of a       problem occurred; if this is the result of a
514       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
515       ABFD will be NULL.  */       ABFD will be NULL.  */
516    boolean (*reloc_dangerous) PARAMS ((struct bfd_link_info *,    bfd_boolean (*reloc_dangerous)
517                                        const char *message,      (struct bfd_link_info *, const char *message,
518                                        bfd *abfd, asection *section,       bfd *abfd, asection *section, bfd_vma address);
                                       bfd_vma address));  
519    /* A function which is called when a reloc is found to be attached    /* A function which is called when a reloc is found to be attached
520       to a symbol which is not being written out.  NAME is the name of       to a symbol which is not being written out.  NAME is the name of
521       the symbol.  ABFD, SECTION and ADDRESS identify the location of       the symbol.  ABFD, SECTION and ADDRESS identify the location of
522       the reloc; if this is the result of a       the reloc; if this is the result of a
523       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
524       ABFD will be NULL.  */       ABFD will be NULL.  */
525    boolean (*unattached_reloc) PARAMS ((struct bfd_link_info *,    bfd_boolean (*unattached_reloc)
526                                         const char *name,      (struct bfd_link_info *, const char *name,
527                                         bfd *abfd, asection *section,       bfd *abfd, asection *section, bfd_vma address);
                                        bfd_vma address));  
528    /* A function which is called when a symbol in notice_hash is    /* A function which is called when a symbol in notice_hash is
529       defined or referenced.  NAME is the symbol.  ABFD, SECTION and       defined or referenced.  NAME is the symbol.  ABFD, SECTION and
530       ADDRESS are the value of the symbol.  If SECTION is       ADDRESS are the value of the symbol.  If SECTION is
531       bfd_und_section, this is a reference.  */       bfd_und_section, this is a reference.  */
532    boolean (*notice) PARAMS ((struct bfd_link_info *, const char *name,    bfd_boolean (*notice)
533                               bfd *abfd, asection *section, bfd_vma address));      (struct bfd_link_info *, const char *name,
534         bfd *abfd, asection *section, bfd_vma address);
535  };  };
536    
537  /* The linker builds link_order structures which tell the code how to  /* The linker builds link_order structures which tell the code how to
# Line 493  enum bfd_link_order_type Line 551  enum bfd_link_order_type
551  /* This is the link_order structure itself.  These form a chain  /* This is the link_order structure itself.  These form a chain
552     attached to the section whose contents they are describing.  */     attached to the section whose contents they are describing.  */
553    
554  struct bfd_link_order  struct bfd_link_order
555  {  {
556    /* Next link_order in chain.  */    /* Next link_order in chain.  */
557    struct bfd_link_order *next;    struct bfd_link_order *next;
558    /* Type of link_order.  */    /* Type of link_order.  */
559    enum bfd_link_order_type type;    enum bfd_link_order_type type;
560    /* Offset within output section.  */    /* Offset within output section.  */
561    bfd_vma offset;      bfd_vma offset;
562    /* Size within output section.  */    /* Size within output section.  */
563    bfd_size_type size;    bfd_size_type size;
564    /* Type specific information.  */    /* Type specific information.  */
565    union    union
566      {      {
567        struct        struct
568          {          {
569            /* Section to include.  If this is used, then            /* Section to include.  If this is used, then
570               section->output_section must be the section the               section->output_section must be the section the
571               link_order is attached to, section->output_offset must               link_order is attached to, section->output_offset must
572               equal the link_order offset field, and section->_raw_size               equal the link_order offset field, and section->size
573               must equal the link_order size field.  Maybe these               must equal the link_order size field.  Maybe these
574               restrictions should be relaxed someday.  */               restrictions should be relaxed someday.  */
575            asection *section;            asection *section;
# Line 573  struct bfd_link_order_reloc Line 631  struct bfd_link_order_reloc
631  };  };
632    
633  /* Allocate a new link_order for a section.  */  /* Allocate a new link_order for a section.  */
634  extern struct bfd_link_order *bfd_new_link_order PARAMS ((bfd *, asection *));  extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
635    
636  /* These structures are used to describe version information for the  /* These structures are used to describe version information for the
637     ELF linker.  These structures could be manipulated entirely inside     ELF linker.  These structures could be manipulated entirely inside
638     BFD, but it would be a pain.  Instead, the regular linker sets up     BFD, but it would be a pain.  Instead, the regular linker sets up
639     these structures, and then passes them into BFD.  */     these structures, and then passes them into BFD.  */
640    
641  /* Regular expressions for a version.  */  /* Glob pattern for a version.  */
642    
643  struct bfd_elf_version_expr  struct bfd_elf_version_expr
644  {  {
645    /* Next regular expression for this version.  */    /* Next glob pattern for this version.  */
646    struct bfd_elf_version_expr *next;    struct bfd_elf_version_expr *next;
647    /* Regular expression.  */    /* Glob pattern.  */
648    const char *pattern;    const char *pattern;
649    /* Matching function.  */    /* NULL for a glob pattern, otherwise a straight symbol.  */
650    int (*match) PARAMS((struct bfd_elf_version_expr *, const char *));    const char *symbol;
651      /* Defined by ".symver".  */
652      unsigned int symver : 1;
653      /* Defined by version script.  */
654      unsigned int script : 1;
655      /* Pattern type.  */
656    #define BFD_ELF_VERSION_C_TYPE          1
657    #define BFD_ELF_VERSION_CXX_TYPE        2
658    #define BFD_ELF_VERSION_JAVA_TYPE       4
659      unsigned int mask : 3;
660    };
661    
662    struct bfd_elf_version_expr_head
663    {
664      /* List of all patterns, both wildcards and non-wildcards.  */
665      struct bfd_elf_version_expr *list;
666      /* Hash table for non-wildcards.  */
667      void *htab;
668      /* Remaining patterns.  */
669      struct bfd_elf_version_expr *remaining;
670      /* What kind of pattern types are present in list (bitmask).  */
671      unsigned int mask;
672  };  };
673    
674  /* Version dependencies.  */  /* Version dependencies.  */
# Line 613  struct bfd_elf_version_tree Line 692  struct bfd_elf_version_tree
692    /* Version number.  */    /* Version number.  */
693    unsigned int vernum;    unsigned int vernum;
694    /* Regular expressions for global symbols in this version.  */    /* Regular expressions for global symbols in this version.  */
695    struct bfd_elf_version_expr *globals;    struct bfd_elf_version_expr_head globals;
696    /* Regular expressions for local symbols in this version.  */    /* Regular expressions for local symbols in this version.  */
697    struct bfd_elf_version_expr *locals;    struct bfd_elf_version_expr_head locals;
698    /* List of versions which this version depends upon.  */    /* List of versions which this version depends upon.  */
699    struct bfd_elf_version_deps *deps;    struct bfd_elf_version_deps *deps;
700    /* Index of the version name.  This is used within BFD.  */    /* Index of the version name.  This is used within BFD.  */
701    unsigned int name_indx;    unsigned int name_indx;
702    /* Whether this version tree was used.  This is used within BFD.  */    /* Whether this version tree was used.  This is used within BFD.  */
703    int used;    int used;
704      /* Matching hook.  */
705      struct bfd_elf_version_expr *(*match)
706        (struct bfd_elf_version_expr_head *head,
707         struct bfd_elf_version_expr *prev, const char *sym);
708  };  };
709    
710  #endif  #endif

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.20.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26