gdb: fix vfork with multiple threads
[deliverable/binutils-gdb.git] / ld / ldemul.h
index 890107fc68cad99de8e83cb5ba845e00d753a7c4..1e0bdc07786daa4d8d97270455415637852cc267 100644 (file)
@@ -1,7 +1,5 @@
 /* ld-emul.h - Linker emulation header file
-   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
-   2002, 2003, 2004, 2005, 2007, 2008
-   Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -36,6 +34,10 @@ extern void ldemul_before_parse
   (void);
 extern void ldemul_after_open
   (void);
+extern void ldemul_after_check_relocs
+  (void);
+extern void ldemul_before_place_orphans
+  (void);
 extern void ldemul_after_allocation
   (void);
 extern void ldemul_before_allocation
@@ -60,17 +62,17 @@ 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
+extern bool ldemul_parse_args
   (int, char **);
 extern void ldemul_add_options
   (int, char **, int, struct option **, int, struct option **);
-extern bfd_boolean ldemul_handle_option
+extern bool ldemul_handle_option
   (int);
-extern bfd_boolean ldemul_unrecognized_file
+extern bool ldemul_unrecognized_file
   (struct lang_input_statement_struct *);
-extern bfd_boolean ldemul_recognized_file
+extern bool ldemul_recognized_file
   (struct lang_input_statement_struct *);
-extern bfd_boolean ldemul_open_dynamic_archive
+extern bool ldemul_open_dynamic_archive
   (const char *, struct search_dirs *, struct lang_input_statement_struct *);
 extern char *ldemul_default_target
   (int, char**);
@@ -78,6 +80,10 @@ extern void after_parse_default
   (void);
 extern void after_open_default
   (void);
+extern void after_check_relocs_default
+  (void);
+extern void before_place_orphans_default
+  (void);
 extern void after_allocation_default
   (void);
 extern void before_allocation_default
@@ -96,6 +102,20 @@ 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 *);
+/* Return 1 if we are emitting CTF early, and 0 if ldemul_examine_strtab_for_ctf
+   will be called by the target.  */
+extern int ldemul_emit_ctf_early
+  (void);
+/* Called from per-target code to examine the strtab and symtab.  */
+extern void ldemul_acquire_strings_for_ctf
+  (struct ctf_dict *, struct elf_strtab_hash *);
+extern void ldemul_new_dynsym_for_ctf
+  (struct ctf_dict *, int symidx, struct elf_internal_sym *);
+
+extern bool ldemul_print_symbol
+  (struct bfd_link_hash_entry *hash_entry, void *ptr);
 
 typedef struct ld_emulation_xfer_struct {
   /* Run before parsing the command line and script file.
@@ -114,6 +134,12 @@ typedef struct ld_emulation_xfer_struct {
   /* Run after opening all input files, and loading the symbols.  */
   void   (*after_open) (void);
 
+  /* Run after checking relocations.  */
+  void   (*after_check_relocs)  (void);
+
+  /* Run before placing orphans.  */
+  void   (*before_place_orphans)  (void);
+
   /* Run after allocating output sections.  */
   void   (*after_allocation)  (void);
 
@@ -144,7 +170,7 @@ typedef struct ld_emulation_xfer_struct {
   /* 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)
+  bool (*open_dynamic_archive)
     (const char *arch, struct search_dirs *,
      struct lang_input_statement_struct *entry);
 
@@ -160,7 +186,7 @@ typedef struct ld_emulation_xfer_struct {
 
   /* Parse args which the base linker doesn't understand.
      Return TRUE if the arg needs no further processing.  */
-  bfd_boolean (*parse_args) (int, char **);
+  bool (*parse_args) (int, char **);
 
   /* Hook to add options to parameters passed by the base linker to
      getopt_long and getopt_long_only calls.  */
@@ -169,11 +195,11 @@ typedef struct ld_emulation_xfer_struct {
 
   /* Companion to the above to handle an option.  Returns TRUE if it is
      one of our options.  */
-  bfd_boolean (*handle_option) (int);
+  bool (*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)
+  bool (*unrecognized_file)
     (struct lang_input_statement_struct *);
 
   /* Run to list the command line options which parse_args handles.  */
@@ -181,7 +207,7 @@ typedef struct ld_emulation_xfer_struct {
 
   /* Run to specially handle files which *are* recognized as object
      files or archives.  Return TRUE if the file was handled.  */
-  bfd_boolean (*recognized_file)
+  bool (*recognized_file)
     (struct lang_input_statement_struct *);
 
   /* Called when looking for libraries in a directory specified
@@ -196,6 +222,38 @@ typedef struct ld_emulation_xfer_struct {
   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 *);
+
+  /* If this returns true, we emit CTF as early as possible: if false, we emit
+     CTF once the strtab and symtab are laid out.  */
+  int (*emit_ctf_early)
+    (void);
+
+  /* Called to examine the string table late enough in linking that it is
+     finally laid out.  If emit_ctf_early returns true, this is not called, and
+     ldemul_maybe_emit_ctf emits CTF in 'early' mode: otherwise, it waits
+     until 'late'. (Late mode needs explicit support at per-target link time to
+     get called at all).  If set, called by ld when the examine_strtab
+     bfd_link_callback is invoked by per-target code.  */
+  void (*acquire_strings_for_ctf) (struct ctf_dict *, struct elf_strtab_hash *);
+
+  /* Called when a new symbol is added to the dynamic symbol table.  If
+     emit_ctf_early returns true, this is not called, and ldemul_maybe_emit_ctf
+     emits CTF in 'early' mode: otherwise, it waits until 'late'. (Late mode
+     needs explicit support at per-target link time to get called at all).  If
+     set, called by ld when the ctf_new_symbol bfd_link_callback is invoked by
+     per-target code.  Called with a NULL symbol when no further symbols will be
+     provided.  */
+  void (*new_dynsym_for_ctf) (struct ctf_dict *, int, struct elf_internal_sym *);
+
+  /* Called when printing a symbol to the map file.   AIX uses this
+     hook to flag gc'd symbols.  */
+  bool (*print_symbol)
+    (struct bfd_link_hash_entry *hash_entry, void *ptr);
+
 } ld_emulation_xfer_type;
 
 typedef enum {
This page took 0.028619 seconds and 4 git commands to generate.