1  /* LTO declarations.
       2     Copyright (C) 2009-2023 Free Software Foundation, Inc.
       3     Contributed by CodeSourcery, Inc.
       4  
       5  This file is part of GCC.
       6  
       7  GCC is free software; you can redistribute it and/or modify it under
       8  the terms of the GNU General Public License as published by the Free
       9  Software Foundation; either version 3, or (at your option) any later
      10  version.
      11  
      12  GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      13  WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      15  for more details.
      16  
      17  You should have received a copy of the GNU General Public License
      18  along with GCC; see the file COPYING3.  If not see
      19  <http://www.gnu.org/licenses/>.  */
      20  
      21  #ifndef LTO_H
      22  #define LTO_H
      23  
      24  
      25  /* A file.  */
      26  struct lto_file
      27  {
      28    /* The name of the file.  */
      29    const char *filename;
      30    /* The offset for the object inside an ar archive file (or zero).  */
      31    off_t offset;
      32  };
      33  
      34  /* In lto-lang.cc  */
      35  extern const char *resolution_file_name;
      36  
      37  /* In lto.cc  */
      38  extern tree lto_eh_personality (void);
      39  extern void lto_main (void);
      40  extern void lto_read_all_file_options (void);
      41  
      42  /* In lto-elf.c or lto-coff.c  */
      43  extern lto_file *lto_obj_file_open (const char *filename, bool writable);
      44  extern void lto_obj_file_close (lto_file *file);
      45  struct lto_section_list;
      46  extern htab_t lto_obj_build_section_table (lto_file *file, struct lto_section_list *list);
      47  extern htab_t lto_obj_create_section_hash_table (void);
      48  extern void lto_obj_begin_section (const char *name);
      49  extern void lto_obj_append_data (const void *data, size_t len, void *block);
      50  extern void lto_obj_end_section (void);
      51  extern lto_file *lto_set_current_out_file (lto_file *file);
      52  extern lto_file *lto_get_current_out_file (void);
      53  
      54  extern int lto_link_dump_id, decl_merge_dump_id, partition_dump_id;
      55  
      56  /* Hash table entry to hold the start offset and length of an LTO
      57     section in a .o file.  */
      58  struct lto_section_slot
      59  {
      60    const char *name;
      61    intptr_t start;
      62    size_t len;
      63    struct lto_section_slot *next;
      64  };
      65  
      66  /* A list of section slots */
      67  struct lto_section_list
      68  {
      69    struct lto_section_slot *first, *last;
      70  };
      71  
      72  extern unsigned int lto_option_lang_mask (void);
      73  
      74  #endif /* LTO_H */