diff options
author | DJ Delorie <dj@redhat.com> | 1998-11-25 23:03:47 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 1998-11-25 23:03:47 +0000 |
commit | f1b2a4d619ff7427f4d1b9674a98f8799c74d594 (patch) | |
tree | 6dff962d6a1b89e362ef87e2095bcee9a7e21b6f /ld/ldemul.h | |
parent | 8cde3351e4f13f0b6437e37f458296cbfbaf088d (diff) | |
download | gdb-f1b2a4d619ff7427f4d1b9674a98f8799c74d594.zip gdb-f1b2a4d619ff7427f4d1b9674a98f8799c74d594.tar.gz gdb-f1b2a4d619ff7427f4d1b9674a98f8799c74d594.tar.bz2 |
* ldemul.h (ld_emulation_xfer_struct): new hook "recognized_file"
* ldemul.c (ldemul_recognized_file): new function, new hook
* ldint.texinfo: document new hook.
* ldlang.c (load_symbols): call recognized_hook for all objects we
do recognize, in case the emulation needs to handle them
specially. PE DLLs use this.
* pe-dll.c (pe_dll_generate_def_file): take out hack and debug
printfs
* emultempl/pe.em (gld_i386_recognized_file): new function
(gld_i486_unrecognized_file): take out hack
Diffstat (limited to 'ld/ldemul.h')
-rw-r--r-- | ld/ldemul.h | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/ld/ldemul.h b/ld/ldemul.h new file mode 100644 index 0000000..eb34da9 --- /dev/null +++ b/ld/ldemul.h @@ -0,0 +1,147 @@ +/* ld-emul.h - Linker emulation header file + Copyright 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. + + This file is part of GLD, the Gnu Linker. + + GLD 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 1, or (at your option) + any later version. + + GLD 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. */ + +#ifndef LDEMUL_H +#define LDEMUL_H + +#if ANSI_PROTOTYPES +struct lang_input_statement_struct; +struct search_dirs; +#endif + +extern void ldemul_hll PARAMS ((char *)); +extern void ldemul_syslib PARAMS ((char *)); +extern void ldemul_after_parse PARAMS ((void)); +extern void ldemul_before_parse PARAMS ((void)); +extern void ldemul_after_open PARAMS ((void)); +extern void ldemul_after_allocation PARAMS ((void)); +extern void ldemul_before_allocation PARAMS ((void)); +extern void ldemul_set_output_arch PARAMS ((void)); +extern char *ldemul_choose_target PARAMS ((void)); +extern void ldemul_choose_mode PARAMS ((char *)); +extern void ldemul_list_emulations PARAMS ((FILE *)); +extern void ldemul_list_emulation_options PARAMS ((FILE *)); +extern char *ldemul_get_script PARAMS ((int *isfile)); +extern void ldemul_finish PARAMS ((void)); +extern void ldemul_set_symbols PARAMS ((void)); +extern void ldemul_create_output_section_statements PARAMS ((void)); +extern boolean ldemul_place_orphan + PARAMS ((struct lang_input_statement_struct *, asection *)); +extern int ldemul_parse_args PARAMS ((int, char **)); +extern boolean ldemul_unrecognized_file + PARAMS ((struct lang_input_statement_struct *)); +extern boolean ldemul_open_dynamic_archive + PARAMS ((const char *, struct search_dirs *, + struct lang_input_statement_struct *)); +extern char *ldemul_default_target PARAMS ((void)); +extern void after_parse_default PARAMS ((void)); +extern void after_open_default PARAMS ((void)); +extern void after_allocation_default PARAMS ((void)); +extern void before_allocation_default PARAMS ((void)); +extern void set_output_arch_default PARAMS ((void)); +extern void syslib_default PARAMS ((char*)); +extern void hll_default PARAMS ((char*)); + +typedef struct ld_emulation_xfer_struct +{ + /* Run before parsing the command line and script file. + Set the architecture, maybe other things. */ + void (*before_parse) PARAMS ((void)); + + /* Handle the SYSLIB (low level library) script command. */ + void (*syslib) PARAMS ((char *)); + + /* Handle the HLL (high level library) script command. */ + void (*hll) PARAMS ((char *)); + + /* Run after parsing the command line and script file. */ + void (*after_parse) PARAMS ((void)); + + /* Run after opening all input files, and loading the symbols. */ + void (*after_open) PARAMS ((void)); + + /* Run after allocating output sections. */ + void (*after_allocation) PARAMS ( (void)); + + /* Set the output architecture and machine if possible. */ + void (*set_output_arch) PARAMS ((void)); + + /* Decide which target name to use. */ + char * (*choose_target) PARAMS ((void)); + + /* Run before allocating output sections. */ + void (*before_allocation) PARAMS ((void)); + + /* Return the appropriate linker script. */ + char * (*get_script) PARAMS ((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) PARAMS ((void)); + + /* Create any output sections needed by the target. */ + void (*create_output_section_statements) PARAMS ((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. */ + boolean (*open_dynamic_archive) + PARAMS ((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. */ + boolean (*place_orphan) + PARAMS ((struct lang_input_statement_struct *, asection *)); + + /* Run after assigning parsing with the args, but before + reading the script. Used to initialize symbols used in the script. */ + void (*set_symbols) PARAMS ((void)); + + /* Run to parse args which the base linker doesn't + understand. Return non zero on sucess. */ + int (*parse_args) PARAMS ((int, char **)); + + /* Run to handle files which are not recognized as object files or + archives. Return true if the file was handled. */ + boolean (*unrecognized_file) + PARAMS ((struct lang_input_statement_struct *)); + + /* Run to list the command line options which parse_args handles. */ + void (* list_options) PARAMS ((FILE *)); + + /* Run to specially handle files which *are* recognized as object + files or archives. Return true if the file was handled. */ + boolean (*recognized_file) + PARAMS ((struct lang_input_statement_struct *)); + +} 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 |