Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- TapiFile.h - Text-based Dynamic Library Stub -------------*- 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
// This file declares the TapiFile interface.
10
//
11
//===----------------------------------------------------------------------===//
12
 
13
#ifndef LLVM_OBJECT_TAPIFILE_H
14
#define LLVM_OBJECT_TAPIFILE_H
15
 
16
#include "llvm/ADT/StringRef.h"
17
#include "llvm/Object/Binary.h"
18
#include "llvm/Object/SymbolicFile.h"
19
#include "llvm/Support/Error.h"
20
#include "llvm/Support/MemoryBufferRef.h"
21
#include "llvm/TextAPI/Architecture.h"
22
 
23
namespace llvm {
24
 
25
class raw_ostream;
26
 
27
namespace MachO {
28
 
29
class InterfaceFile;
30
 
31
}
32
 
33
namespace object {
34
 
35
class TapiFile : public SymbolicFile {
36
public:
37
  TapiFile(MemoryBufferRef Source, const MachO::InterfaceFile &interface,
38
           MachO::Architecture Arch);
39
  ~TapiFile() override;
40
 
41
  void moveSymbolNext(DataRefImpl &DRI) const override;
42
 
43
  Error printSymbolName(raw_ostream &OS, DataRefImpl DRI) const override;
44
 
45
  Expected<uint32_t> getSymbolFlags(DataRefImpl DRI) const override;
46
 
47
  basic_symbol_iterator symbol_begin() const override;
48
 
49
  basic_symbol_iterator symbol_end() const override;
50
 
51
  static bool classof(const Binary *v) { return v->isTapiFile(); }
52
 
53
  bool is64Bit() { return MachO::is64Bit(Arch); }
54
 
55
private:
56
  struct Symbol {
57
    StringRef Prefix;
58
    StringRef Name;
59
    uint32_t Flags;
60
 
61
    constexpr Symbol(StringRef Prefix, StringRef Name, uint32_t Flags)
62
        : Prefix(Prefix), Name(Name), Flags(Flags) {}
63
  };
64
 
65
  std::vector<Symbol> Symbols;
66
  MachO::Architecture Arch;
67
};
68
 
69
} // end namespace object.
70
} // end namespace llvm.
71
 
72
#endif // LLVM_OBJECT_TAPIFILE_H