1/* Header file to load module for 'compile' command.
2   Copyright (C) 2014-2020 Free Software Foundation, Inc.
3
4   This program is free software; you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 3 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17#ifndef COMPILE_COMPILE_OBJECT_LOAD_H
18#define COMPILE_COMPILE_OBJECT_LOAD_H
19
20#include "compile-internal.h"
21#include <list>
22
23struct munmap_list
24{
25public:
26
27  munmap_list () = default;
28  ~munmap_list ();
29
30  DISABLE_COPY_AND_ASSIGN (munmap_list);
31
32  /* Add a region to the list.  */
33  void add (CORE_ADDR addr, CORE_ADDR size);
34
35private:
36
37  /* Track inferior memory reserved by inferior mmap.  */
38
39  struct munmap_item
40  {
41    CORE_ADDR addr, size;
42  };
43
44  std::vector<munmap_item> items;
45};
46
47struct compile_module
48{
49  /* objfile for the compiled module.  */
50  struct objfile *objfile;
51
52  /* .c file OBJFILE was built from.  It needs to be xfree-d.  */
53  char *source_file;
54
55  /* Inferior function GCC_FE_WRAPPER_FUNCTION.  */
56  struct symbol *func_sym;
57
58  /* Inferior registers address or NULL if the inferior function does not
59     require any.  */
60  CORE_ADDR regs_addr;
61
62  /* The "scope" of this compilation.  */
63  enum compile_i_scope_types scope;
64
65  /* User data for SCOPE in use.  */
66  void *scope_data;
67
68  /* Inferior parameter out value type or NULL if the inferior function does not
69     have one.  */
70  struct type *out_value_type;
71
72  /* If the inferior function has an out value, this is its address.
73     Otherwise it is zero.  */
74  CORE_ADDR out_value_addr;
75
76  /* Track inferior memory reserved by inferior mmap.  */
77  struct munmap_list *munmap_list_head;
78};
79
80extern struct compile_module *compile_object_load
81  (const compile_file_names &fnames,
82   enum compile_i_scope_types scope, void *scope_data);
83
84#endif /* COMPILE_COMPILE_OBJECT_LOAD_H */
85