aboutsummaryrefslogtreecommitdiffstats
path: root/clang-r383902/include/lld/Core/SharedLibraryFile.h
blob: 846d1f22f17a06027946c444a101312418026101 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//===- Core/SharedLibraryFile.h - Models shared libraries as Atoms --------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLD_CORE_SHARED_LIBRARY_FILE_H
#define LLD_CORE_SHARED_LIBRARY_FILE_H

#include "lld/Core/File.h"

namespace lld {

///
/// The SharedLibraryFile subclass of File is used to represent dynamic
/// shared libraries being linked against.
///
class SharedLibraryFile : public File {
public:
  static bool classof(const File *f) {
    return f->kind() == kindSharedLibrary;
  }

  /// Check if the shared library exports a symbol with the specified name.
  /// If so, return a SharedLibraryAtom which represents that exported
  /// symbol.  Otherwise return nullptr.
  virtual OwningAtomPtr<SharedLibraryAtom> exports(StringRef name) const = 0;

  // Returns the install name.
  virtual StringRef getDSOName() const = 0;

  const AtomRange<DefinedAtom> defined() const override {
    return _definedAtoms;
  }

  const AtomRange<UndefinedAtom> undefined() const override {
    return _undefinedAtoms;
  }

  const AtomRange<SharedLibraryAtom> sharedLibrary() const override {
    return _sharedLibraryAtoms;
  }

  const AtomRange<AbsoluteAtom> absolute() const override {
    return _absoluteAtoms;
  }

  void clearAtoms() override {
    _definedAtoms.clear();
    _undefinedAtoms.clear();
    _sharedLibraryAtoms.clear();
    _absoluteAtoms.clear();
  }

protected:
  /// only subclasses of SharedLibraryFile can be instantiated
  explicit SharedLibraryFile(StringRef path) : File(path, kindSharedLibrary) {}

  AtomVector<DefinedAtom> _definedAtoms;
  AtomVector<UndefinedAtom> _undefinedAtoms;
  AtomVector<SharedLibraryAtom> _sharedLibraryAtoms;
  AtomVector<AbsoluteAtom> _absoluteAtoms;
};

} // namespace lld

#endif // LLD_CORE_SHARED_LIBRARY_FILE_H