1//===-- LocateSymbolFile.h --------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef liblldb_Symbols_h_
10#define liblldb_Symbols_h_
11
12#include <stdint.h>
13
14#include "lldb/Core/FileSpecList.h"
15#include "lldb/Utility/FileSpec.h"
16
17namespace lldb_private {
18
19class ArchSpec;
20class ModuleSpec;
21class UUID;
22
23class Symbols {
24public:
25  // Locate the executable file given a module specification.
26  //
27  // Locating the file should happen only on the local computer or using the
28  // current computers global settings.
29  static ModuleSpec LocateExecutableObjectFile(const ModuleSpec &module_spec);
30
31  // Locate the symbol file given a module specification.
32  //
33  // Locating the file should happen only on the local computer or using the
34  // current computers global settings.
35  static FileSpec
36  LocateExecutableSymbolFile(const ModuleSpec &module_spec,
37                             const FileSpecList &default_search_paths);
38
39  static FileSpec FindSymbolFileInBundle(const FileSpec &dsym_bundle_fspec,
40                                         const lldb_private::UUID *uuid,
41                                         const ArchSpec *arch);
42
43  // Locate the object and symbol file given a module specification.
44  //
45  // Locating the file can try to download the file from a corporate build
46  // repository, or using any other means necessary to locate both the
47  // unstripped object file and the debug symbols. The force_lookup argument
48  // controls whether the external program is called unconditionally to find
49  // the symbol file, or if the user's settings are checked to see if they've
50  // enabled the external program before calling.
51  //
52  static bool DownloadObjectAndSymbolFile(ModuleSpec &module_spec,
53                                          bool force_lookup = true);
54};
55
56} // namespace lldb_private
57
58#endif // liblldb_Symbols_h_
59