1 /* ld.h -- general linker header file 2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002 3 Free Software Foundation, Inc. 4 5 This file is part of GLD, the Gnu Linker. 6 7 GLD is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2, or (at your option) 10 any later version. 11 12 GLD is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GLD; see the file COPYING. If not, write to the Free 19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 20 02111-1307, USA. */ 21 22 #ifndef LD_H 23 #define LD_H 24 25 #ifdef HAVE_LOCALE_H 26 # include <locale.h> 27 #endif 28 29 #ifdef ENABLE_NLS 30 # include <libintl.h> 31 # define _(String) gettext (String) 32 # ifdef gettext_noop 33 # define N_(String) gettext_noop (String) 34 # else 35 # define N_(String) (String) 36 # endif 37 #else 38 # define gettext(Msgid) (Msgid) 39 # define dgettext(Domainname, Msgid) (Msgid) 40 # define dcgettext(Domainname, Msgid, Category) (Msgid) 41 # define textdomain(Domainname) while (0) /* nothing */ 42 # define bindtextdomain(Domainname, Dirname) while (0) /* nothing */ 43 # define _(String) (String) 44 # define N_(String) (String) 45 #endif 46 47 #include "bin-bugs.h" 48 49 /* Look in this environment name for the linker to pretend to be */ 50 #define EMULATION_ENVIRON "LDEMULATION" 51 /* If in there look for the strings: */ 52 53 /* Look in this variable for a target format */ 54 #define TARGET_ENVIRON "GNUTARGET" 55 56 /* Input sections which are put in a section of this name are actually 57 discarded. */ 58 #define DISCARD_SECTION_NAME "/DISCARD/" 59 60 /* A file name list */ 61 typedef struct name_list { 62 const char *name; 63 struct name_list *next; 64 } 65 name_list; 66 67 /* A wildcard specification. This is only used in ldgram.y, but it 68 winds up in ldgram.h, so we need to define it outside. */ 69 70 struct wildcard_spec { 71 const char *name; 72 struct name_list *exclude_name_list; 73 bfd_boolean sorted; 74 }; 75 76 struct wildcard_list { 77 struct wildcard_list *next; 78 struct wildcard_spec spec; 79 }; 80 81 /* Extra information we hold on sections */ 82 typedef struct user_section_struct { 83 /* Pointer to the section where this data will go */ 84 struct lang_input_statement_struct *file; 85 } section_userdata_type; 86 87 #define get_userdata(x) ((x)->userdata) 88 89 #define BYTE_SIZE (1) 90 #define SHORT_SIZE (2) 91 #define LONG_SIZE (4) 92 #define QUAD_SIZE (8) 93 94 typedef struct { 95 /* 1 => assign space to common symbols even if `relocatable_output'. */ 96 bfd_boolean force_common_definition; 97 98 /* 1 => do not assign addresses to common symbols. */ 99 bfd_boolean inhibit_common_definition; 100 bfd_boolean relax; 101 102 /* Name of runtime interpreter to invoke. */ 103 char *interpreter; 104 105 /* Name to give runtime libary from the -soname argument. */ 106 char *soname; 107 108 /* Runtime library search path from the -rpath argument. */ 109 char *rpath; 110 111 /* Link time runtime library search path from the -rpath-link 112 argument. */ 113 char *rpath_link; 114 115 /* Big or little endian as set on command line. */ 116 enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian; 117 118 /* If TRUE, build MIPS embedded PIC relocation tables in the output 119 file. */ 120 bfd_boolean embedded_relocs; 121 122 /* If TRUE, force generation of a file with a .exe file. */ 123 bfd_boolean force_exe_suffix; 124 125 /* If TRUE, generate a cross reference report. */ 126 bfd_boolean cref; 127 128 /* If TRUE (which is the default), warn about mismatched input 129 files. */ 130 bfd_boolean warn_mismatch; 131 132 /* Remove unreferenced sections? */ 133 bfd_boolean gc_sections; 134 135 /* Name of shared object whose symbol table should be filtered with 136 this shared object. From the --filter option. */ 137 char *filter_shlib; 138 139 /* Name of shared object for whose symbol table this shared object 140 is an auxiliary filter. From the --auxiliary option. */ 141 char **auxiliary_filters; 142 143 /* A version symbol to be applied to the symbol names found in the 144 .exports sections. */ 145 char *version_exports_section; 146 147 /* If TRUE (the default) check section addresses, once compute, 148 fpor overlaps. */ 149 bfd_boolean check_section_addresses; 150 151 /* If TRUE allow the linking of input files in an unknown architecture 152 assuming that the user knows what they are doing. This was the old 153 behaviour of the linker. The new default behaviour is to reject such 154 input files. */ 155 bfd_boolean accept_unknown_input_arch; 156 157 } args_type; 158 159 extern args_type command_line; 160 161 typedef int token_code_type; 162 163 typedef struct { 164 bfd_size_type specified_data_size; 165 bfd_boolean magic_demand_paged; 166 bfd_boolean make_executable; 167 168 /* If TRUE, doing a dynamic link. */ 169 bfd_boolean dynamic_link; 170 171 /* If TRUE, -shared is supported. */ 172 /* ??? A better way to do this is perhaps to define this in the 173 ld_emulation_xfer_struct since this is really a target dependent 174 parameter. */ 175 bfd_boolean has_shared; 176 177 /* If TRUE, build constructors. */ 178 bfd_boolean build_constructors; 179 180 /* If TRUE, warn about any constructors. */ 181 bfd_boolean warn_constructors; 182 183 /* If TRUE, warn about merging common symbols with others. */ 184 bfd_boolean warn_common; 185 186 /* If TRUE, only warn once about a particular undefined symbol. */ 187 bfd_boolean warn_once; 188 189 /* If TRUE, warn if multiple global-pointers are needed (Alpha 190 only). */ 191 bfd_boolean warn_multiple_gp; 192 193 /* If TRUE, warn if the starting address of an output section 194 changes due to the alignment of an input section. */ 195 bfd_boolean warn_section_align; 196 197 /* If TRUE, warning messages are fatal */ 198 bfd_boolean fatal_warnings; 199 200 bfd_boolean sort_common; 201 202 bfd_boolean text_read_only; 203 204 /* Classic ELF executable which has data and bss next to each 205 other with no padding for GOT/PLT. */ 206 bfd_boolean data_bss_contig; 207 208 char *map_filename; 209 FILE *map_file; 210 211 bfd_boolean stats; 212 213 /* If set, orphan input sections will be mapped to separate output 214 sections. */ 215 bfd_boolean unique_orphan_sections; 216 217 unsigned int split_by_reloc; 218 bfd_size_type split_by_file; 219 220 /* If set, only search library directories explicitly selected 221 on the command line. */ 222 bfd_boolean only_cmd_line_lib_dirs; 223 } ld_config_type; 224 225 extern ld_config_type config; 226 227 typedef enum { 228 lang_first_phase_enum, 229 lang_allocating_phase_enum, 230 lang_final_phase_enum 231 } lang_phase_type; 232 233 extern FILE * saved_script_handle; 234 extern bfd_boolean force_make_executable; 235 236 /* Non-zero if we are processing a --defsym from the command line. */ 237 extern int parsing_defsym; 238 239 extern int yyparse (void); 240 extern void add_cref (const char *, bfd *, asection *, bfd_vma); 241 extern void output_cref (FILE *); 242 extern void check_nocrossrefs (void); 243 extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; 244 245 /* If gcc >= 2.6, we can give a function name, too. */ 246 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) 247 #define __PRETTY_FUNCTION__ NULL 248 #endif 249 250 #undef abort 251 #define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__) 252 253 #endif 254