123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /* ld-emul.h - Linker emulation header file
- Copyright (C) 1991-2017 Free Software Foundation, Inc.
- This file is part of the GNU Binutils.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
- #ifndef LDEMUL_H
- #define LDEMUL_H
- /* Forward declaration for ldemul_add_options() and others. */
- struct option;
- extern void ldemul_hll
- (char *);
- extern void ldemul_syslib
- (char *);
- extern void ldemul_after_parse
- (void);
- extern void ldemul_before_parse
- (void);
- extern void ldemul_after_open
- (void);
- extern void ldemul_after_allocation
- (void);
- extern void ldemul_before_allocation
- (void);
- extern void ldemul_set_output_arch
- (void);
- extern char *ldemul_choose_target
- (int, char**);
- extern void ldemul_choose_mode
- (char *);
- extern void ldemul_list_emulations
- (FILE *);
- extern void ldemul_list_emulation_options
- (FILE *);
- extern char *ldemul_get_script
- (int *isfile);
- extern void ldemul_finish
- (void);
- extern void ldemul_set_symbols
- (void);
- extern void ldemul_create_output_section_statements
- (void);
- extern lang_output_section_statement_type *ldemul_place_orphan
- (asection *, const char *, int);
- extern bfd_boolean ldemul_parse_args
- (int, char **);
- extern void ldemul_add_options
- (int, char **, int, struct option **, int, struct option **);
- extern bfd_boolean ldemul_handle_option
- (int);
- extern bfd_boolean ldemul_unrecognized_file
- (struct lang_input_statement_struct *);
- extern bfd_boolean ldemul_recognized_file
- (struct lang_input_statement_struct *);
- extern bfd_boolean ldemul_open_dynamic_archive
- (const char *, struct search_dirs *, struct lang_input_statement_struct *);
- extern char *ldemul_default_target
- (int, char**);
- extern void after_parse_default
- (void);
- extern void after_open_default
- (void);
- extern void after_allocation_default
- (void);
- extern void before_allocation_default
- (void);
- extern void finish_default
- (void);
- extern void finish_default
- (void);
- extern void set_output_arch_default
- (void);
- extern void syslib_default
- (char*);
- extern void hll_default
- (char*);
- extern int ldemul_find_potential_libraries
- (char *, struct lang_input_statement_struct *);
- extern struct bfd_elf_version_expr *ldemul_new_vers_pattern
- (struct bfd_elf_version_expr *);
- extern void ldemul_extra_map_file_text
- (bfd *, struct bfd_link_info *, FILE *);
- typedef struct ld_emulation_xfer_struct {
- /* Run before parsing the command line and script file.
- Set the architecture, maybe other things. */
- void (*before_parse) (void);
- /* Handle the SYSLIB (low level library) script command. */
- void (*syslib) (char *);
- /* Handle the HLL (high level library) script command. */
- void (*hll) (char *);
- /* Run after parsing the command line and script file. */
- void (*after_parse) (void);
- /* Run after opening all input files, and loading the symbols. */
- void (*after_open) (void);
- /* Run after allocating output sections. */
- void (*after_allocation) (void);
- /* Set the output architecture and machine if possible. */
- void (*set_output_arch) (void);
- /* Decide which target name to use. */
- char * (*choose_target) (int, char**);
- /* Run before allocating output sections. */
- void (*before_allocation) (void);
- /* Return the appropriate linker script. */
- char * (*get_script) (int *isfile);
- /* The name of this emulation. */
- char *emulation_name;
- /* The output format. */
- char *target_name;
- /* Run after assigning values from the script. */
- void (*finish) (void);
- /* Create any output sections needed by the target. */
- void (*create_output_section_statements) (void);
- /* Try to open a dynamic library. ARCH is an architecture name, and
- is normally the empty string. ENTRY is the lang_input_statement
- that should be opened. */
- bfd_boolean (*open_dynamic_archive)
- (const char *arch, struct search_dirs *,
- struct lang_input_statement_struct *entry);
- /* Place an orphan section. Return TRUE if it was placed, FALSE if
- the default action should be taken. This field may be NULL, in
- which case the default action will always be taken. */
- lang_output_section_statement_type *(*place_orphan)
- (asection *, const char *, int);
- /* Run after assigning parsing with the args, but before
- reading the script. Used to initialize symbols used in the script. */
- void (*set_symbols) (void);
- /* Parse args which the base linker doesn't understand.
- Return TRUE if the arg needs no further processing. */
- bfd_boolean (*parse_args) (int, char **);
- /* Hook to add options to parameters passed by the base linker to
- getopt_long and getopt_long_only calls. */
- void (*add_options)
- (int, char **, int, struct option **, int, struct option **);
- /* Companion to the above to handle an option. Returns TRUE if it is
- one of our options. */
- bfd_boolean (*handle_option) (int);
- /* Run to handle files which are not recognized as object files or
- archives. Return TRUE if the file was handled. */
- bfd_boolean (*unrecognized_file)
- (struct lang_input_statement_struct *);
- /* Run to list the command line options which parse_args handles. */
- void (* list_options) (FILE *);
- /* Run to specially handle files which *are* recognized as object
- files or archives. Return TRUE if the file was handled. */
- bfd_boolean (*recognized_file)
- (struct lang_input_statement_struct *);
- /* Called when looking for libraries in a directory specified
- via a linker command line option or linker script option.
- Files that match the pattern "lib*.a" have already been scanned.
- (For VMS files matching ":lib*.a" have also been scanned). */
- int (* find_potential_libraries)
- (char *, struct lang_input_statement_struct *);
- /* Called when adding a new version pattern. PowerPC64-ELF uses
- this hook to add a pattern matching ".foo" for every "foo". */
- struct bfd_elf_version_expr * (*new_vers_pattern)
- (struct bfd_elf_version_expr *);
- /* Called when printing the map file, in case there are
- emulation-specific sections for it. */
- void (*extra_map_file_text)
- (bfd *, struct bfd_link_info *, FILE *);
- } ld_emulation_xfer_type;
- typedef enum {
- intel_ic960_ld_mode_enum,
- default_mode_enum,
- intel_gld960_ld_mode_enum
- } lang_emulation_mode_enum_type;
- extern ld_emulation_xfer_type *ld_emulations[];
- #endif
|