summaryrefslogtreecommitdiff
path: root/include/llvm/TextAPI/MachO/Symbol.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/TextAPI/MachO/Symbol.h')
-rw-r--r--include/llvm/TextAPI/MachO/Symbol.h35
1 files changed, 28 insertions, 7 deletions
diff --git a/include/llvm/TextAPI/MachO/Symbol.h b/include/llvm/TextAPI/MachO/Symbol.h
index 3c7ff5e0f4ea..1b1632c599c4 100644
--- a/include/llvm/TextAPI/MachO/Symbol.h
+++ b/include/llvm/TextAPI/MachO/Symbol.h
@@ -14,6 +14,7 @@
#include "llvm/Support/Error.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TextAPI/MachO/ArchitectureSet.h"
+#include "llvm/TextAPI/MachO/Target.h"
namespace llvm {
namespace MachO {
@@ -37,7 +38,10 @@ enum class SymbolFlags : uint8_t {
/// Undefined
Undefined = 1U << 3,
- LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/Undefined),
+ /// Rexported
+ Rexported = 1U << 4,
+
+ LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/Rexported),
};
// clang-format on
@@ -49,16 +53,18 @@ enum class SymbolKind : uint8_t {
ObjectiveCInstanceVariable,
};
+using TargetList = SmallVector<Target, 5>;
class Symbol {
public:
- constexpr Symbol(SymbolKind Kind, StringRef Name,
- ArchitectureSet Architectures, SymbolFlags Flags)
- : Name(Name), Architectures(Architectures), Kind(Kind), Flags(Flags) {}
+ Symbol(SymbolKind Kind, StringRef Name, TargetList Targets, SymbolFlags Flags)
+ : Name(Name), Targets(std::move(Targets)), Kind(Kind), Flags(Flags) {}
+ void addTarget(Target target) { Targets.emplace_back(target); }
SymbolKind getKind() const { return Kind; }
StringRef getName() const { return Name; }
- ArchitectureSet getArchitectures() const { return Architectures; }
- void addArchitectures(ArchitectureSet Archs) { Architectures |= Archs; }
+ ArchitectureSet getArchitectures() const {
+ return mapToArchitectureSet(Targets);
+ }
SymbolFlags getFlags() const { return Flags; }
bool isWeakDefined() const {
@@ -78,6 +84,21 @@ public:
return (Flags & SymbolFlags::Undefined) == SymbolFlags::Undefined;
}
+ bool isReexported() const {
+ return (Flags & SymbolFlags::Rexported) == SymbolFlags::Rexported;
+ }
+
+ using const_target_iterator = TargetList::const_iterator;
+ using const_target_range = llvm::iterator_range<const_target_iterator>;
+ const_target_range targets() const { return {Targets}; }
+
+ using const_filtered_target_iterator =
+ llvm::filter_iterator<const_target_iterator,
+ std::function<bool(const Target &)>>;
+ using const_filtered_target_range =
+ llvm::iterator_range<const_filtered_target_iterator>;
+ const_filtered_target_range targets(ArchitectureSet architectures) const;
+
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
void dump(raw_ostream &OS) const;
void dump() const { dump(llvm::errs()); }
@@ -85,7 +106,7 @@ public:
private:
StringRef Name;
- ArchitectureSet Architectures;
+ TargetList Targets;
SymbolKind Kind;
SymbolFlags Flags;
};