ld.h revision 1.3
150276Speter/* ld.h -- general linker header file
250276Speter   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3174993Srafan   2001, 2002, 2003, 2004, 2005
450276Speter   Free Software Foundation, Inc.
550276Speter
650276Speter   This file is part of GLD, the Gnu Linker.
750276Speter
850276Speter   GLD is free software; you can redistribute it and/or modify
950276Speter   it under the terms of the GNU General Public License as published by
1050276Speter   the Free Software Foundation; either version 2, or (at your option)
1150276Speter   any later version.
1250276Speter
1350276Speter   GLD is distributed in the hope that it will be useful,
1450276Speter   but WITHOUT ANY WARRANTY; without even the implied warranty of
1550276Speter   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1650276Speter   GNU General Public License for more details.
1750276Speter
1850276Speter   You should have received a copy of the GNU General Public License
1950276Speter   along with GLD; see the file COPYING.  If not, write to the Free
2050276Speter   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
2150276Speter   02110-1301, USA.  */
2250276Speter
2350276Speter#ifndef LD_H
2450276Speter#define LD_H
2550276Speter
2650276Speter#ifdef HAVE_LOCALE_H
2750276Speter#endif
2850276Speter#ifndef SEEK_CUR
2950276Speter#define SEEK_CUR 1
30174993Srafan#endif
3150276Speter#ifndef SEEK_END
3250276Speter#define SEEK_END 2
3350276Speter#endif
3450276Speter
3550276Speter#if defined(__GNUC__) && !defined(C_ALLOCA)
3650276Speter# undef alloca
37174993Srafan# define alloca __builtin_alloca
3850276Speter#else
39174993Srafan# if defined(HAVE_ALLOCA_H) && !defined(C_ALLOCA)
4050276Speter#  include <alloca.h>
41174993Srafan# else
4250276Speter#  ifndef alloca /* predefined by HP cc +Olibcalls */
43174993Srafan#   if !defined (__STDC__) && !defined (__hpux)
4450276Speterchar *alloca ();
4550276Speter#   else
4650276Spetervoid *alloca ();
4750276Speter#   endif /* __STDC__, __hpux */
48166124Srafan#  endif /* alloca */
4950276Speter# endif /* HAVE_ALLOCA_H */
5050276Speter#endif
51166124Srafan
5250276Speter
5350276Speter#ifdef HAVE_LOCALE_H
54166124Srafan# ifndef ENABLE_NLS
5550276Speter   /* The Solaris version of locale.h always includes libintl.h.  If we have
56166124Srafan      been configured with --disable-nls then ENABLE_NLS will not be defined
5750276Speter      and the dummy definitions of bindtextdomain (et al) below will conflict
5850276Speter      with the defintions in libintl.h.  So we define these values to prevent
5950276Speter      the bogus inclusion of libintl.h.  */
6050276Speter#  define _LIBINTL_H
6150276Speter#  define _LIBGETTEXT_H
6250276Speter# endif
6350276Speter# include <locale.h>
6450276Speter#endif
6550276Speter
6650276Speter#ifdef ENABLE_NLS
6750276Speter# include <libintl.h>
6850276Speter# define _(String) gettext (String)
69166124Srafan# ifdef gettext_noop
7050276Speter#  define N_(String) gettext_noop (String)
7150276Speter# else
72166124Srafan#  define N_(String) (String)
7350276Speter# endif
7450276Speter#else
7550276Speter# define gettext(Msgid) (Msgid)
7650276Speter# define dgettext(Domainname, Msgid) (Msgid)
7750276Speter# define dcgettext(Domainname, Msgid, Category) (Msgid)
7850276Speter# define textdomain(Domainname) while (0) /* nothing */
7950276Speter# define bindtextdomain(Domainname, Dirname) while (0) /* nothing */
8050276Speter# define _(String) (String)
8150276Speter# define N_(String) (String)
8250276Speter#endif
8350276Speter
8450276Speter#include "bin-bugs.h"
8550276Speter
8650276Speter/* Look in this environment name for the linker to pretend to be */
8750276Speter#define EMULATION_ENVIRON "LDEMULATION"
8850276Speter/* If in there look for the strings: */
8950276Speter
9050276Speter/* Look in this variable for a target format */
91#define TARGET_ENVIRON "GNUTARGET"
92
93/* Input sections which are put in a section of this name are actually
94   discarded.  */
95#define DISCARD_SECTION_NAME "/DISCARD/"
96
97/* A file name list */
98typedef struct name_list {
99  const char *name;
100  struct name_list *next;
101}
102name_list;
103
104/* A wildcard specification.  */
105
106typedef enum {
107  none, by_name, by_alignment, by_name_alignment, by_alignment_name
108} sort_type;
109
110extern sort_type sort_section;
111
112struct wildcard_spec {
113  const char *name;
114  struct name_list *exclude_name_list;
115  sort_type sorted;
116};
117
118struct wildcard_list {
119  struct wildcard_list *next;
120  struct wildcard_spec spec;
121};
122
123struct map_symbol_def {
124  struct bfd_link_hash_entry *entry;
125  struct map_symbol_def *next;
126};
127
128/* The initial part of fat_user_section_struct has to be idential with
129   lean_user_section_struct.  */
130typedef struct fat_user_section_struct {
131  /* For input sections, when writing a map file: head / tail of a linked
132     list of hash table entries for symbols defined in this section.  */
133  struct map_symbol_def *map_symbol_def_head;
134  struct map_symbol_def **map_symbol_def_tail;
135} fat_section_userdata_type;
136
137#define get_userdata(x) ((x)->userdata)
138
139#define BYTE_SIZE	(1)
140#define SHORT_SIZE	(2)
141#define LONG_SIZE	(4)
142#define QUAD_SIZE	(8)
143
144typedef struct {
145  /* 1 => assign space to common symbols even if `relocatable_output'.  */
146  bfd_boolean force_common_definition;
147
148  /* 1 => do not assign addresses to common symbols.  */
149  bfd_boolean inhibit_common_definition;
150  bfd_boolean relax;
151
152  /* Name of runtime interpreter to invoke.  */
153  char *interpreter;
154
155  /* Name to give runtime libary from the -soname argument.  */
156  char *soname;
157
158  /* Runtime library search path from the -rpath argument.  */
159  char *rpath;
160
161  /* Link time runtime library search path from the -rpath-link
162     argument.  */
163  char *rpath_link;
164
165  /* Big or little endian as set on command line.  */
166  enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian;
167
168  /* If TRUE, build MIPS embedded PIC relocation tables in the output
169     file.  */
170  bfd_boolean embedded_relocs;
171
172  /* If TRUE, force generation of a file with a .exe file.  */
173  bfd_boolean force_exe_suffix;
174
175  /* If TRUE, generate a cross reference report.  */
176  bfd_boolean cref;
177
178  /* If TRUE (which is the default), warn about mismatched input
179     files.  */
180  bfd_boolean warn_mismatch;
181
182  /* Name of shared object whose symbol table should be filtered with
183     this shared object.  From the --filter option.  */
184  char *filter_shlib;
185
186  /* Name of shared object for whose symbol table this shared object
187     is an auxiliary filter.  From the --auxiliary option.  */
188  char **auxiliary_filters;
189
190  /* A version symbol to be applied to the symbol names found in the
191     .exports sections.  */
192  char *version_exports_section;
193
194  /* If TRUE (the default) check section addresses, once compute,
195     fpor overlaps.  */
196  bfd_boolean check_section_addresses;
197
198  /* If TRUE allow the linking of input files in an unknown architecture
199     assuming that the user knows what they are doing.  This was the old
200     behaviour of the linker.  The new default behaviour is to reject such
201     input files.  */
202  bfd_boolean accept_unknown_input_arch;
203} args_type;
204
205extern args_type command_line;
206
207typedef int token_code_type;
208
209typedef struct {
210  bfd_size_type specified_data_size;
211  bfd_boolean magic_demand_paged;
212  bfd_boolean make_executable;
213
214  /* If TRUE, doing a dynamic link.  */
215  bfd_boolean dynamic_link;
216
217  /* If TRUE, -shared is supported.  */
218  /* ??? A better way to do this is perhaps to define this in the
219     ld_emulation_xfer_struct since this is really a target dependent
220     parameter.  */
221  bfd_boolean has_shared;
222
223  /* If TRUE, build constructors.  */
224  bfd_boolean build_constructors;
225
226  /* If TRUE, warn about any constructors.  */
227  bfd_boolean warn_constructors;
228
229  /* If TRUE, warn about merging common symbols with others.  */
230  bfd_boolean warn_common;
231
232  /* If TRUE, only warn once about a particular undefined symbol.  */
233  bfd_boolean warn_once;
234
235  /* If TRUE, warn if multiple global-pointers are needed (Alpha
236     only).  */
237  bfd_boolean warn_multiple_gp;
238
239  /* If TRUE, warn if the starting address of an output section
240     changes due to the alignment of an input section.  */
241  bfd_boolean warn_section_align;
242
243  /* If TRUE, warning messages are fatal */
244  bfd_boolean fatal_warnings;
245
246  bfd_boolean sort_common;
247
248  bfd_boolean text_read_only;
249
250  /* Classic ELF executable which has data and bss next to each
251     other with no padding for GOT/PLT. */
252  bfd_boolean data_bss_contig;
253
254  char *map_filename;
255  FILE *map_file;
256
257  bfd_boolean stats;
258
259  /* If set, orphan input sections will be mapped to separate output
260     sections.  */
261  bfd_boolean unique_orphan_sections;
262
263  unsigned int split_by_reloc;
264  bfd_size_type split_by_file;
265
266  /* If set, only search library directories explicitly selected
267     on the command line.  */
268  bfd_boolean only_cmd_line_lib_dirs;
269
270  /* The size of the hash table to use.  */
271  bfd_size_type hash_table_size;
272} ld_config_type;
273
274extern ld_config_type config;
275
276extern FILE * saved_script_handle;
277extern bfd_boolean force_make_executable;
278
279/* Non-zero if we are processing a --defsym from the command line.  */
280extern int parsing_defsym;
281
282extern int yyparse (void);
283extern void add_cref (const char *, bfd *, asection *, bfd_vma);
284extern void output_cref (FILE *);
285extern void check_nocrossrefs (void);
286extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
287
288/* If gcc >= 2.6, we can give a function name, too.  */
289#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
290#define __PRETTY_FUNCTION__  NULL
291#endif
292
293#undef abort
294#define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
295
296#endif
297