133965Sjdp/* ld-emul.h - Linker emulation header file 2218822Sdim Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 3218822Sdim 2002, 2003, 2004, 2005 477298Sobrien Free Software Foundation, Inc. 533965Sjdp 633965Sjdp This file is part of GLD, the Gnu Linker. 733965Sjdp 833965Sjdp GLD is free software; you can redistribute it and/or modify 933965Sjdp it under the terms of the GNU General Public License as published by 1033965Sjdp the Free Software Foundation; either version 1, or (at your option) 1133965Sjdp any later version. 1233965Sjdp 1333965Sjdp GLD is distributed in the hope that it will be useful, 1433965Sjdp but WITHOUT ANY WARRANTY; without even the implied warranty of 1533965Sjdp MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1633965Sjdp GNU General Public License for more details. */ 1733965Sjdp 1833965Sjdp#ifndef LDEMUL_H 1933965Sjdp#define LDEMUL_H 2033965Sjdp 21217394Skib/* Forward declaration for ldemul_add_options() and others. */ 22217394Skibstruct option; 23217394Skib 24130561Sobrienextern void ldemul_hll 25130561Sobrien (char *); 26130561Sobrienextern void ldemul_syslib 27130561Sobrien (char *); 28130561Sobrienextern void ldemul_after_parse 29130561Sobrien (void); 30130561Sobrienextern void ldemul_before_parse 31130561Sobrien (void); 32130561Sobrienextern void ldemul_after_open 33130561Sobrien (void); 34130561Sobrienextern void ldemul_after_allocation 35130561Sobrien (void); 36130561Sobrienextern void ldemul_before_allocation 37130561Sobrien (void); 38130561Sobrienextern void ldemul_set_output_arch 39130561Sobrien (void); 40130561Sobrienextern char *ldemul_choose_target 41130561Sobrien (int, char**); 42130561Sobrienextern void ldemul_choose_mode 43130561Sobrien (char *); 44130561Sobrienextern void ldemul_list_emulations 45130561Sobrien (FILE *); 46130561Sobrienextern void ldemul_list_emulation_options 47130561Sobrien (FILE *); 48130561Sobrienextern char *ldemul_get_script 49130561Sobrien (int *isfile); 50130561Sobrienextern void ldemul_finish 51130561Sobrien (void); 52130561Sobrienextern void ldemul_set_symbols 53130561Sobrien (void); 54130561Sobrienextern void ldemul_create_output_section_statements 55130561Sobrien (void); 56130561Sobrienextern bfd_boolean ldemul_place_orphan 57218822Sdim (asection *); 58130561Sobrienextern bfd_boolean ldemul_parse_args 59130561Sobrien (int, char **); 60130561Sobrienextern void ldemul_add_options 61130561Sobrien (int, char **, int, struct option **, int, struct option **); 62130561Sobrienextern bfd_boolean ldemul_handle_option 63130561Sobrien (int); 64130561Sobrienextern bfd_boolean ldemul_unrecognized_file 65130561Sobrien (struct lang_input_statement_struct *); 66130561Sobrienextern bfd_boolean ldemul_recognized_file 67130561Sobrien (struct lang_input_statement_struct *); 68130561Sobrienextern bfd_boolean ldemul_open_dynamic_archive 69130561Sobrien (const char *, struct search_dirs *, struct lang_input_statement_struct *); 70130561Sobrienextern char *ldemul_default_target 71130561Sobrien (int, char**); 72130561Sobrienextern void after_parse_default 73130561Sobrien (void); 74130561Sobrienextern void after_open_default 75130561Sobrien (void); 76130561Sobrienextern void after_allocation_default 77130561Sobrien (void); 78130561Sobrienextern void before_allocation_default 79130561Sobrien (void); 80218822Sdimextern void finish_default 81218822Sdim (void); 82218822Sdimextern void finish_default 83218822Sdim (void); 84130561Sobrienextern void set_output_arch_default 85130561Sobrien (void); 86130561Sobrienextern void syslib_default 87130561Sobrien (char*); 88130561Sobrienextern void hll_default 89130561Sobrien (char*); 9060484Sobrienextern int ldemul_find_potential_libraries 91130561Sobrien (char *, struct lang_input_statement_struct *); 92104834Sobrienextern struct bfd_elf_version_expr *ldemul_new_vers_pattern 93130561Sobrien (struct bfd_elf_version_expr *); 9433965Sjdp 9577298Sobrientypedef struct ld_emulation_xfer_struct { 9633965Sjdp /* Run before parsing the command line and script file. 9733965Sjdp Set the architecture, maybe other things. */ 98130561Sobrien void (*before_parse) (void); 9933965Sjdp 10033965Sjdp /* Handle the SYSLIB (low level library) script command. */ 101130561Sobrien void (*syslib) (char *); 10233965Sjdp 10333965Sjdp /* Handle the HLL (high level library) script command. */ 104130561Sobrien void (*hll) (char *); 10533965Sjdp 10633965Sjdp /* Run after parsing the command line and script file. */ 107130561Sobrien void (*after_parse) (void); 10833965Sjdp 10933965Sjdp /* Run after opening all input files, and loading the symbols. */ 110130561Sobrien void (*after_open) (void); 11133965Sjdp 11233965Sjdp /* Run after allocating output sections. */ 113130561Sobrien void (*after_allocation) (void); 11433965Sjdp 11533965Sjdp /* Set the output architecture and machine if possible. */ 116130561Sobrien void (*set_output_arch) (void); 11733965Sjdp 11833965Sjdp /* Decide which target name to use. */ 119130561Sobrien char * (*choose_target) (int, char**); 12033965Sjdp 12133965Sjdp /* Run before allocating output sections. */ 122130561Sobrien void (*before_allocation) (void); 12333965Sjdp 12433965Sjdp /* Return the appropriate linker script. */ 125130561Sobrien char * (*get_script) (int *isfile); 12633965Sjdp 12733965Sjdp /* The name of this emulation. */ 12833965Sjdp char *emulation_name; 12933965Sjdp 13033965Sjdp /* The output format. */ 13133965Sjdp char *target_name; 13233965Sjdp 13333965Sjdp /* Run after assigning values from the script. */ 134130561Sobrien void (*finish) (void); 13533965Sjdp 13633965Sjdp /* Create any output sections needed by the target. */ 137130561Sobrien void (*create_output_section_statements) (void); 13833965Sjdp 13933965Sjdp /* Try to open a dynamic library. ARCH is an architecture name, and 14033965Sjdp is normally the empty string. ENTRY is the lang_input_statement 14133965Sjdp that should be opened. */ 142130561Sobrien bfd_boolean (*open_dynamic_archive) 143130561Sobrien (const char *arch, struct search_dirs *, 144130561Sobrien struct lang_input_statement_struct *entry); 14533965Sjdp 146130561Sobrien /* Place an orphan section. Return TRUE if it was placed, FALSE if 14733965Sjdp the default action should be taken. This field may be NULL, in 14833965Sjdp which case the default action will always be taken. */ 149130561Sobrien bfd_boolean (*place_orphan) 150218822Sdim (asection *); 15133965Sjdp 15277298Sobrien /* Run after assigning parsing with the args, but before 15377298Sobrien reading the script. Used to initialize symbols used in the script. */ 154130561Sobrien void (*set_symbols) (void); 15533965Sjdp 156130561Sobrien /* Parse args which the base linker doesn't understand. 157130561Sobrien Return TRUE if the arg needs no further processing. */ 158130561Sobrien bfd_boolean (*parse_args) (int, char **); 15933965Sjdp 160130561Sobrien /* Hook to add options to parameters passed by the base linker to 161130561Sobrien getopt_long and getopt_long_only calls. */ 162130561Sobrien void (*add_options) 163130561Sobrien (int, char **, int, struct option **, int, struct option **); 164130561Sobrien 165130561Sobrien /* Companion to the above to handle an option. Returns TRUE if it is 166130561Sobrien one of our options. */ 167130561Sobrien bfd_boolean (*handle_option) (int); 168130561Sobrien 16933965Sjdp /* Run to handle files which are not recognized as object files or 170130561Sobrien archives. Return TRUE if the file was handled. */ 171130561Sobrien bfd_boolean (*unrecognized_file) 172130561Sobrien (struct lang_input_statement_struct *); 17333965Sjdp 17460484Sobrien /* Run to list the command line options which parse_args handles. */ 175130561Sobrien void (* list_options) (FILE *); 17660484Sobrien 17760484Sobrien /* Run to specially handle files which *are* recognized as object 178130561Sobrien files or archives. Return TRUE if the file was handled. */ 179130561Sobrien bfd_boolean (*recognized_file) 180130561Sobrien (struct lang_input_statement_struct *); 18160484Sobrien 18260484Sobrien /* Called when looking for libraries in a directory specified 18360484Sobrien via a linker command line option or linker script option. 18460484Sobrien Files that match the pattern "lib*.a" have already been scanned. 18560484Sobrien (For VMS files matching ":lib*.a" have also been scanned). */ 18660484Sobrien int (* find_potential_libraries) 187130561Sobrien (char *, struct lang_input_statement_struct *); 18877298Sobrien 189104834Sobrien /* Called when adding a new version pattern. PowerPC64-ELF uses 190104834Sobrien this hook to add a pattern matching ".foo" for every "foo". */ 191104834Sobrien struct bfd_elf_version_expr * (*new_vers_pattern) 192130561Sobrien (struct bfd_elf_version_expr *); 193104834Sobrien 19433965Sjdp} ld_emulation_xfer_type; 19533965Sjdp 19677298Sobrientypedef enum { 19733965Sjdp intel_ic960_ld_mode_enum, 19877298Sobrien default_mode_enum, 19933965Sjdp intel_gld960_ld_mode_enum 20033965Sjdp} lang_emulation_mode_enum_type; 20133965Sjdp 20233965Sjdpextern ld_emulation_xfer_type *ld_emulations[]; 20333965Sjdp 20433965Sjdp#endif 205