]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/dwarf-index-cache.h
[binutils, ARM, 4/16] BF insns infrastructure with array of relocs in struct arm_it
[thirdparty/binutils-gdb.git] / gdb / dwarf-index-cache.h
CommitLineData
87d6a7aa
SM
1/* Caching of GDB/DWARF index files.
2
42a4f53d 3 Copyright (C) 2018-2019 Free Software Foundation, Inc.
87d6a7aa
SM
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20#ifndef DWARF_INDEX_CACHE_H
21#define DWARF_INDEX_CACHE_H
22
d55e5aa6 23#include "dwarf-index-common.h"
4de283e4 24#include "common/array-view.h"
87d6a7aa
SM
25#include "symfile.h"
26
27/* Base of the classes used to hold the resources of the indices loaded from
28 the cache (e.g. mmapped files). */
29
30struct index_cache_resource
31{
32 virtual ~index_cache_resource () = 0;
33};
34
35/* Class to manage the access to the DWARF index cache. */
36
37class index_cache
38{
39public:
40 /* Change the directory used to save/load index files. */
41 void set_directory (std::string dir);
42
43 /* Return true if the usage of the cache is enabled. */
44 bool enabled () const
45 {
46 return m_enabled;
47 }
48
49 /* Enable the cache. */
50 void enable ();
51
52 /* Disable the cache. */
53 void disable ();
54
55 /* Store an index for the specified object file in the cache. */
56 void store (struct dwarf2_per_objfile *dwarf2_per_objfile);
57
58 /* Look for an index file matching BUILD_ID. If found, return the contents
59 as an array_view and store the underlying resources (allocated memory,
60 mapped file, etc) in RESOURCE. The returned array_view is valid as long
61 as RESOURCE is not destroyed.
62
63 If no matching index file is found, return an empty array view. */
64 gdb::array_view<const gdb_byte>
65 lookup_gdb_index (const bfd_build_id *build_id,
66 std::unique_ptr<index_cache_resource> *resource);
67
68 /* Return the number of cache hits. */
69 unsigned int n_hits () const
70 { return m_n_hits; }
71
72 /* Record a cache hit. */
73 void hit ()
74 {
75 if (enabled ())
76 m_n_hits++;
77 }
78
79 /* Return the number of cache misses. */
80 unsigned int n_misses () const
81 { return m_n_misses; }
82
83 /* Record a cache miss. */
84 void miss ()
85 {
86 if (enabled ())
87 m_n_misses++;
88 }
89
90private:
91
92 /* Compute the absolute filename where the index of the objfile with build
93 id BUILD_ID will be stored. SUFFIX is appended at the end of the
94 filename. */
95 std::string make_index_filename (const bfd_build_id *build_id,
96 const char *suffix) const;
97
98 /* The base directory where we are storing and looking up index files. */
99 std::string m_dir;
100
101 /* Whether the cache is enabled. */
102 bool m_enabled = false;
103
104 /* Number of cache hits and misses during this GDB session. */
105 unsigned int m_n_hits = 0;
106 unsigned int m_n_misses = 0;
107};
108
109/* The global instance of the index cache. */
110extern index_cache global_index_cache;
111
112#endif /* DWARF_INDEX_CACHE_H */