Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
TapiFile.cpp
Go to the documentation of this file.
1//===- TapiFile.cpp -------------------------------------------------------===//
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 defines the Text-based Dynamcic Library Stub format.
10//
11//===----------------------------------------------------------------------===//
12
13#include "llvm/Object/TapiFile.h"
14#include "llvm/ADT/StringRef.h"
15#include "llvm/BinaryFormat/MachO.h"
16#include "llvm/Support/MemoryBufferRef.h"
17#include "llvm/TextAPI/ArchitectureSet.h"
18#include "llvm/TextAPI/InterfaceFile.h"
19#include "llvm/TextAPI/Platform.h"
20#include "llvm/TextAPI/Symbol.h"
21
22using namespacellvm;
23using namespaceMachO;
24using namespaceobject;
25
26staticuint32_tgetFlags(constSymbol *Sym) {
27uint32_t Flags =BasicSymbolRef::SF_Global;
28if (Sym->isUndefined())
29 Flags |=BasicSymbolRef::SF_Undefined;
30else
31 Flags |=BasicSymbolRef::SF_Exported;
32
33if (Sym->isWeakDefined() ||Sym->isWeakReferenced())
34 Flags |=BasicSymbolRef::SF_Weak;
35
36return Flags;
37}
38
39staticSymbolRef::TypegetType(constSymbol *Sym) {
40SymbolRef::TypeType =SymbolRef::ST_Unknown;
41if (Sym->isData())
42Type =SymbolRef::ST_Data;
43elseif (Sym->isText())
44Type =SymbolRef::ST_Function;
45
46returnType;
47}
48
49TapiFile::TapiFile(MemoryBufferRef Source,constInterfaceFile &Interface,
50Architecture Arch)
51 :SymbolicFile(ID_TapiFile, Source), Arch(Arch),
52 FileKind(Interface.getFileType()) {
53for (constauto *Symbol : Interface.symbols()) {
54if (!Symbol->getArchitectures().has(Arch))
55continue;
56
57switch (Symbol->getKind()) {
58case EncodeKind::GlobalSymbol:
59 Symbols.emplace_back(StringRef(),Symbol->getName(),getFlags(Symbol),
60::getType(Symbol));
61break;
62case EncodeKind::ObjectiveCClass:
63if (Interface.getPlatforms().count(PLATFORM_MACOS) && Arch == AK_i386) {
64 Symbols.emplace_back(ObjC1ClassNamePrefix,Symbol->getName(),
65getFlags(Symbol),::getType(Symbol));
66 }else {
67 Symbols.emplace_back(ObjC2ClassNamePrefix,Symbol->getName(),
68getFlags(Symbol),::getType(Symbol));
69 Symbols.emplace_back(ObjC2MetaClassNamePrefix,Symbol->getName(),
70getFlags(Symbol),::getType(Symbol));
71 }
72break;
73case EncodeKind::ObjectiveCClassEHType:
74 Symbols.emplace_back(ObjC2EHTypePrefix,Symbol->getName(),
75getFlags(Symbol),::getType(Symbol));
76break;
77case EncodeKind::ObjectiveCInstanceVariable:
78 Symbols.emplace_back(ObjC2IVarPrefix,Symbol->getName(),getFlags(Symbol),
79::getType(Symbol));
80break;
81 }
82 }
83}
84
85TapiFile::~TapiFile() =default;
86
87voidTapiFile::moveSymbolNext(DataRefImpl &DRI) const{ DRI.d.a++; }
88
89ErrorTapiFile::printSymbolName(raw_ostream &OS,DataRefImpl DRI) const{
90assert(DRI.d.a < Symbols.size() &&"Attempt to access symbol out of bounds");
91constSymbol &Sym = Symbols[DRI.d.a];
92OS <<Sym.Prefix <<Sym.Name;
93returnError::success();
94}
95
96Expected<SymbolRef::Type>TapiFile::getSymbolType(DataRefImpl DRI) const{
97assert(DRI.d.a < Symbols.size() &&"Attempt to access symbol out of bounds");
98return Symbols[DRI.d.a].Type;
99}
100
101Expected<uint32_t>TapiFile::getSymbolFlags(DataRefImpl DRI) const{
102assert(DRI.d.a < Symbols.size() &&"Attempt to access symbol out of bounds");
103return Symbols[DRI.d.a].Flags;
104}
105
106basic_symbol_iteratorTapiFile::symbol_begin() const{
107DataRefImpl DRI;
108 DRI.d.a = 0;
109returnBasicSymbolRef{DRI,this};
110}
111
112basic_symbol_iteratorTapiFile::symbol_end() const{
113DataRefImpl DRI;
114 DRI.d.a = Symbols.size();
115returnBasicSymbolRef{DRI,this};
116}
ArchitectureSet.h
MachO.h
Sym
Symbol * Sym
Definition:ELF_riscv.cpp:479
InterfaceFile.h
MemoryBufferRef.h
Platform.h
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
OS
raw_pwrite_stream & OS
Definition:SampleProfWriter.cpp:51
StringRef.h
Symbol.h
getFlags
static uint32_t getFlags(const Symbol *Sym)
Definition:TapiFile.cpp:26
getType
static SymbolRef::Type getType(const Symbol *Sym)
Definition:TapiFile.cpp:39
TapiFile.h
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition:Error.h:160
llvm::Error::success
static ErrorSuccess success()
Create a success value.
Definition:Error.h:337
llvm::Expected
Tagged union holding either a T or a Error.
Definition:Error.h:481
llvm::MachO::ArchitectureSet::has
bool has(Architecture Arch) const
Definition:ArchitectureSet.h:56
llvm::MachO::InterfaceFile
Defines the interface file.
Definition:InterfaceFile.h:105
llvm::MachO::Symbol
Definition:Symbol.h:96
llvm::MachO::Symbol::isData
bool isData() const
Definition:Symbol.h:130
llvm::MachO::Symbol::isWeakDefined
bool isWeakDefined() const
Definition:Symbol.h:109
llvm::MachO::Symbol::isUndefined
bool isUndefined() const
Definition:Symbol.h:122
llvm::MachO::Symbol::getArchitectures
ArchitectureSet getArchitectures() const
Definition:Symbol.h:104
llvm::MachO::Symbol::getName
StringRef getName() const
Definition:Symbol.h:103
llvm::MachO::Symbol::isText
bool isText() const
Definition:Symbol.h:134
llvm::MachO::Symbol::getKind
EncodeKind getKind() const
Definition:Symbol.h:102
llvm::MachO::Symbol::isWeakReferenced
bool isWeakReferenced() const
Definition:Symbol.h:113
llvm::MemoryBufferRef
Definition:MemoryBufferRef.h:22
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition:StringRef.h:51
llvm::Type
The instances of the Type class are immutable: once they are created, they are never changed.
Definition:Type.h:45
llvm::object::BasicSymbolRef
This is a value type class that represents a single symbol in the list of symbols in the object file.
Definition:SymbolicFile.h:103
llvm::object::BasicSymbolRef::SF_Global
@ SF_Global
Definition:SymbolicFile.h:111
llvm::object::BasicSymbolRef::SF_Exported
@ SF_Exported
Definition:SymbolicFile.h:116
llvm::object::BasicSymbolRef::SF_Weak
@ SF_Weak
Definition:SymbolicFile.h:112
llvm::object::BasicSymbolRef::SF_Undefined
@ SF_Undefined
Definition:SymbolicFile.h:110
llvm::object::Binary::getType
unsigned int getType() const
Definition:Binary.h:104
llvm::object::SymbolRef::Type
Type
Definition:ObjectFile.h:172
llvm::object::SymbolRef::ST_Unknown
@ ST_Unknown
Definition:ObjectFile.h:173
llvm::object::SymbolRef::ST_Function
@ ST_Function
Definition:ObjectFile.h:178
llvm::object::SymbolRef::ST_Data
@ ST_Data
Definition:ObjectFile.h:175
llvm::object::SymbolicFile
Definition:SymbolicFile.h:145
llvm::object::TapiFile::getSymbolType
Expected< SymbolRef::Type > getSymbolType(DataRefImpl DRI) const
Definition:TapiFile.cpp:96
llvm::object::TapiFile::moveSymbolNext
void moveSymbolNext(DataRefImpl &DRI) const override
Definition:TapiFile.cpp:87
llvm::object::TapiFile::getSymbolFlags
Expected< uint32_t > getSymbolFlags(DataRefImpl DRI) const override
Definition:TapiFile.cpp:101
llvm::object::TapiFile::~TapiFile
~TapiFile() override
llvm::object::TapiFile::symbol_end
basic_symbol_iterator symbol_end() const override
Definition:TapiFile.cpp:112
llvm::object::TapiFile::TapiFile
TapiFile(MemoryBufferRef Source, const MachO::InterfaceFile &Interface, MachO::Architecture Arch)
Definition:TapiFile.cpp:49
llvm::object::TapiFile::printSymbolName
Error printSymbolName(raw_ostream &OS, DataRefImpl DRI) const override
Definition:TapiFile.cpp:89
llvm::object::TapiFile::symbol_begin
basic_symbol_iterator symbol_begin() const override
Definition:TapiFile.cpp:106
llvm::object::content_iterator
Definition:SymbolicFile.h:69
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition:raw_ostream.h:52
uint32_t
llvm::MachO::ObjC2IVarPrefix
constexpr StringLiteral ObjC2IVarPrefix
Definition:Symbol.h:66
llvm::MachO::ObjC1ClassNamePrefix
constexpr StringLiteral ObjC1ClassNamePrefix
Definition:Symbol.h:62
llvm::MachO::ObjC2ClassNamePrefix
constexpr StringLiteral ObjC2ClassNamePrefix
Definition:Symbol.h:63
llvm::MachO::Architecture
Architecture
Defines the architecture slices that are supported by Text-based Stub files.
Definition:Architecture.h:27
llvm::MachO::ObjC2MetaClassNamePrefix
constexpr StringLiteral ObjC2MetaClassNamePrefix
Definition:Symbol.h:64
llvm::MachO::ObjC2EHTypePrefix
constexpr StringLiteral ObjC2EHTypePrefix
Definition:Symbol.h:65
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::object::DataRefImpl
Definition:SymbolicFile.h:35
llvm::object::DataRefImpl::d
struct llvm::object::DataRefImpl::@370 d
llvm::object::DataRefImpl::a
uint32_t a
Definition:SymbolicFile.h:39

Generated on Thu Jul 17 2025 12:34:53 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp