(linenum→info "unix/slp.c:2238")

binutils/2.18/ld/ld.h

    1: /* ld.h -- general linker header file
    2:    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
    3:    2001, 2002, 2003, 2004, 2005, 2006, 2007
    4:    Free Software Foundation, Inc.
    5: 
    6:    This file is part of the GNU Binutils.
    7: 
    8:    This program is free software; you can redistribute it and/or modify
    9:    it under the terms of the GNU General Public License as published by
   10:    the Free Software Foundation; either version 3 of the License, or
   11:    (at your option) any later version.
   12: 
   13:    This program is distributed in the hope that it will be useful,
   14:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   15:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   16:    GNU General Public License for more details.
   17: 
   18:    You should have received a copy of the GNU General Public License
   19:    along with this program; if not, write to the Free Software
   20:    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   21:    MA 02110-1301, USA.  */
   22: 
   23: #ifndef LD_H
   24: #define LD_H
   25: 
   26: #ifdef HAVE_LOCALE_H
   27: #endif
   28: #ifndef SEEK_CUR
   29: #define SEEK_CUR 1
   30: #endif
   31: #ifndef SEEK_END
   32: #define SEEK_END 2
   33: #endif
   34: 
   35: #if defined(__GNUC__) && !defined(C_ALLOCA)
   36: # undef alloca
   37: # define alloca __builtin_alloca
   38: #else
   39: # if defined(HAVE_ALLOCA_H) && !defined(C_ALLOCA)
   40: #  include <alloca.h>
   41: # else
   42: #  ifndef alloca /* predefined by HP cc +Olibcalls */
   43: #   if !defined (__STDC__) && !defined (__hpux)
   44: char *alloca ();
   45: #   else
   46: void *alloca ();
   47: #   endif /* __STDC__, __hpux */
   48: #  endif /* alloca */
   49: # endif /* HAVE_ALLOCA_H */
   50: #endif
   51: 
   52: 
   53: #ifdef HAVE_LOCALE_H
   54: # ifndef ENABLE_NLS
   55:    /* The Solaris version of locale.h always includes libintl.h.  If we have
   56:       been configured with --disable-nls then ENABLE_NLS will not be defined
   57:       and the dummy definitions of bindtextdomain (et al) below will conflict
   58:       with the defintions in libintl.h.  So we define these values to prevent
   59:       the bogus inclusion of libintl.h.  */
   60: #  define _LIBINTL_H
   61: #  define _LIBGETTEXT_H
   62: # endif
   63: # include <locale.h>
   64: #endif
   65: 
   66: #ifdef ENABLE_NLS
   67: # include <libintl.h>
   68: # define _(String) gettext (String)
   69: # ifdef gettext_noop
   70: #  define N_(String) gettext_noop (String)
   71: # else
   72: #  define N_(String) (String)
   73: # endif
   74: #else
   75: # define gettext(Msgid) (Msgid)
   76: # define dgettext(Domainname, Msgid) (Msgid)
   77: # define dcgettext(Domainname, Msgid, Category) (Msgid)
   78: # define textdomain(Domainname) while (0) /* nothing */
   79: # define bindtextdomain(Domainname, Dirname) while (0) /* nothing */
   80: # define _(String) (String)
   81: # define N_(String) (String)
   82: #endif
   83: 
   84: /* Look in this environment name for the linker to pretend to be */
   85: #define EMULATION_ENVIRON "LDEMULATION"
   86: /* If in there look for the strings: */
   87: 
   88: /* Look in this variable for a target format */
   89: #define TARGET_ENVIRON "GNUTARGET"
   90: 
   91: /* Input sections which are put in a section of this name are actually
   92:    discarded.  */
   93: #define DISCARD_SECTION_NAME "/DISCARD/"
   94: 
   95: /* A file name list */
   96: typedef struct name_list {
   97:   const char *name;
   98:   struct name_list *next;
   99: }
  100: name_list;
  101: 
  102: /* A wildcard specification.  */
  103: 
  104: typedef enum {
  105:   none, by_name, by_alignment, by_name_alignment, by_alignment_name
  106: } sort_type;
  107: 
  108: extern sort_type sort_section;
  109: 
  110: struct wildcard_spec {
  111:   const char *name;
  112:   struct name_list *exclude_name_list;
  113:   sort_type sorted;
  114: };
  115: 
  116: struct wildcard_list {
  117:   struct wildcard_list *next;
  118:   struct wildcard_spec spec;
  119: };
  120: 
  121: struct map_symbol_def {
  122:   struct bfd_link_hash_entry *entry;
  123:   struct map_symbol_def *next;
  124: };
  125: 
  126: /* The initial part of fat_user_section_struct has to be idential with
  127:    lean_user_section_struct.  */
  128: typedef struct fat_user_section_struct {
  129:   /* For input sections, when writing a map file: head / tail of a linked
  130:      list of hash table entries for symbols defined in this section.  */
  131:   struct map_symbol_def *map_symbol_def_head;
  132:   struct map_symbol_def **map_symbol_def_tail;
  133: } fat_section_userdata_type;
  134: 
  135: #define get_userdata(x) ((x)->userdata)
  136: 
  137: #define BYTE_SIZE       (1)
  138: #define SHORT_SIZE      (2)
  139: #define LONG_SIZE       (4)
  140: #define QUAD_SIZE       (8)
  141: 
  142: typedef struct {
  143:   /* 1 => assign space to common symbols even if `relocatable_output'.  */
  144:   bfd_boolean force_common_definition;
  145: 
  146:   /* 1 => do not assign addresses to common symbols.  */
  147:   bfd_boolean inhibit_common_definition;
  148:   bfd_boolean relax;
  149: 
  150:   /* If TRUE, build MIPS embedded PIC relocation tables in the output
  151:      file.  */
  152:   bfd_boolean embedded_relocs;
  153: 
  154:   /* If TRUE, force generation of a file with a .exe file.  */
  155:   bfd_boolean force_exe_suffix;
  156: 
  157:   /* If TRUE, generate a cross reference report.  */
  158:   bfd_boolean cref;
  159: 
  160:   /* If TRUE (which is the default), warn about mismatched input
  161:      files.  */
  162:   bfd_boolean warn_mismatch;
  163: 
  164:   /* Warn on attempting to open an incompatible library during a library
  165:      search.  */
  166:   bfd_boolean warn_search_mismatch;
  167: 
  168: 
  169:   /* If TRUE (the default) check section addresses, once compute,
  170:      fpor overlaps.  */
  171:   bfd_boolean check_section_addresses;
  172: 
  173:   /* If TRUE allow the linking of input files in an unknown architecture
  174:      assuming that the user knows what they are doing.  This was the old
  175:      behaviour of the linker.  The new default behaviour is to reject such
  176:      input files.  */
  177:   bfd_boolean accept_unknown_input_arch;
  178: 
  179:   /* Big or little endian as set on command line.  */
  180:   enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian;
  181: 
  182:   /* -Bsymbolic and -Bsymbolic-functions, as set on command line.  */
  183:   enum
  184:     {
  185:       symbolic_unset = 0,
  186:       symbolic,
  187:       symbolic_functions,
  188:     } symbolic;
  189: 
  190:   /* --dynamic-list, --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo
  191:      and --dynamic-list FILE, as set on command line.  */
  192:   enum
  193:     {
  194:       dynamic_list_unset = 0,
  195:       dynamic_list_data,
  196:       dynamic_list
  197:     } dynamic_list;
  198: 
  199:   /* Name of runtime interpreter to invoke.  */
  200:   char *interpreter;
  201: 
  202:   /* Name to give runtime libary from the -soname argument.  */
  203:   char *soname;
  204: 
  205:   /* Runtime library search path from the -rpath argument.  */
  206:   char *rpath;
  207: 
  208:   /* Link time runtime library search path from the -rpath-link
  209:      argument.  */
  210:   char *rpath_link;
  211: 
  212:   /* Name of shared object whose symbol table should be filtered with
  213:      this shared object.  From the --filter option.  */
  214:   char *filter_shlib;
  215: 
  216:   /* Name of shared object for whose symbol table this shared object
  217:      is an auxiliary filter.  From the --auxiliary option.  */
  218:   char **auxiliary_filters;
  219: 
  220:   /* A version symbol to be applied to the symbol names found in the
  221:      .exports sections.  */
  222:   char *version_exports_section;
  223: 
  224:   /* Default linker script.  */
  225:   char *default_script;
  226: } args_type;
  227: 
  228: extern args_type command_line;
  229: 
  230: typedef int token_code_type;
  231: 
  232: typedef struct {
  233:   bfd_boolean magic_demand_paged;
  234:   bfd_boolean make_executable;
  235: 
  236:   /* If TRUE, doing a dynamic link.  */
  237:   bfd_boolean dynamic_link;
  238: 
  239:   /* If TRUE, -shared is supported.  */
  240:   /* ??? A better way to do this is perhaps to define this in the
  241:      ld_emulation_xfer_struct since this is really a target dependent
  242:      parameter.  */
  243:   bfd_boolean has_shared;
  244: 
  245:   /* If TRUE, build constructors.  */
  246:   bfd_boolean build_constructors;
  247: 
  248:   /* If TRUE, warn about any constructors.  */
  249:   bfd_boolean warn_constructors;
  250: 
  251:   /* If TRUE, warn about merging common symbols with others.  */
  252:   bfd_boolean warn_common;
  253: 
  254:   /* If TRUE, only warn once about a particular undefined symbol.  */
  255:   bfd_boolean warn_once;
  256: 
  257:   /* If TRUE, warn if multiple global-pointers are needed (Alpha
  258:      only).  */
  259:   bfd_boolean warn_multiple_gp;
  260: 
  261:   /* If TRUE, warn if the starting address of an output section
  262:      changes due to the alignment of an input section.  */
  263:   bfd_boolean warn_section_align;
  264: 
  265:   /* If TRUE, warning messages are fatal */
  266:   bfd_boolean fatal_warnings;
  267: 
  268:   bfd_boolean sort_common;
  269: 
  270:   bfd_boolean text_read_only;
  271: 
  272:   bfd_boolean stats;
  273: 
  274:   /* If set, orphan input sections will be mapped to separate output
  275:      sections.  */
  276:   bfd_boolean unique_orphan_sections;
  277: 
  278:   /* If set, only search library directories explicitly selected
  279:      on the command line.  */
  280:   bfd_boolean only_cmd_line_lib_dirs;
  281: 
  282:   /* The rpath separation character.  Usually ':'.  */
  283:   char rpath_separator;
  284: 
  285:   char *map_filename;
  286:   FILE *map_file;
  287: 
  288:   unsigned int split_by_reloc;
  289:   bfd_size_type split_by_file;
  290: 
  291:   bfd_size_type specified_data_size;
  292: 
  293:   /* The size of the hash table to use.  */
  294:   bfd_size_type hash_table_size;
  295: 
  296:   /* The maximum page size for ELF.  */
  297:   bfd_vma maxpagesize;
  298: 
  299:   /* The common page size for ELF.  */
  300:   bfd_vma commonpagesize;
  301: } ld_config_type;
  302: 
  303: extern ld_config_type config;
  304: 
  305: extern FILE * saved_script_handle;
  306: extern bfd_boolean force_make_executable;
  307: 
  308: /* Non-zero if we are processing a --defsym from the command line.  */
  309: extern int parsing_defsym;
  310: 
  311: extern int yyparse (void);
  312: extern void add_cref (const char *, bfd *, asection *, bfd_vma);
  313: extern bfd_boolean handle_asneeded_cref (bfd *, enum notice_asneeded_action);
  314: extern void output_cref (FILE *);
  315: extern void check_nocrossrefs (void);
  316: extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
  317: 
  318: /* If gcc >= 2.6, we can give a function name, too.  */
  319: #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
  320: #define __PRETTY_FUNCTION__  NULL
  321: #endif
  322: 
  323: #undef abort
  324: #define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
  325: 
  326: #endif
Syntax (Markdown)