Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
Archive.h
Go to the documentation of this file.
1//===- Archive.h - ar archive file format -----------------------*- 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 ar archive file format class.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_OBJECT_ARCHIVE_H
14#define LLVM_OBJECT_ARCHIVE_H
15
16#include "llvm/ADT/StringRef.h"
17#include "llvm/ADT/fallible_iterator.h"
18#include "llvm/ADT/iterator_range.h"
19#include "llvm/Object/Binary.h"
20#include "llvm/Support/Chrono.h"
21#include "llvm/Support/Error.h"
22#include "llvm/Support/FileSystem.h"
23#include "llvm/Support/MemoryBuffer.h"
24#include <cassert>
25#include <cstdint>
26#include <memory>
27#include <string>
28#include <vector>
29
30namespacellvm {
31namespaceobject {
32
33constcharArchiveMagic[] ="!<arch>\n";
34constcharThinArchiveMagic[] ="!<thin>\n";
35constcharBigArchiveMagic[] ="<bigaf>\n";
36
37classArchive;
38
39classAbstractArchiveMemberHeader {
40protected:
41AbstractArchiveMemberHeader(constArchive *Parent) :Parent(Parent){};
42
43public:
44friendclassArchive;
45virtual std::unique_ptr<AbstractArchiveMemberHeader>clone()const = 0;
46virtual~AbstractArchiveMemberHeader() =default;
47
48 /// Get the name without looking up long names.
49virtualExpected<StringRef>getRawName()const = 0;
50virtualStringRefgetRawAccessMode()const = 0;
51virtualStringRefgetRawLastModified()const = 0;
52virtualStringRefgetRawUID()const = 0;
53virtualStringRefgetRawGID()const = 0;
54
55 /// Get the name looking up long names.
56virtualExpected<StringRef>getName(uint64_tSize)const = 0;
57virtualExpected<uint64_t>getSize()const = 0;
58virtualuint64_tgetOffset()const = 0;
59
60 /// Get next file member location.
61virtualExpected<const char *>getNextChildLoc()const = 0;
62virtualExpected<bool>isThin()const = 0;
63
64Expected<sys::fs::perms>getAccessMode()const;
65Expected<sys::TimePoint<std::chrono::seconds>>getLastModified()const;
66Expected<unsigned>getUID()const;
67Expected<unsigned>getGID()const;
68
69 /// Returns the size in bytes of the format-defined member header of the
70 /// concrete archive type.
71virtualuint64_tgetSizeOf()const = 0;
72
73constArchive *Parent;
74};
75
76template <typename T>
77classCommonArchiveMemberHeader :publicAbstractArchiveMemberHeader {
78public:
79CommonArchiveMemberHeader(constArchive *Parent,constT *RawHeaderPtr)
80 :AbstractArchiveMemberHeader(Parent),ArMemHdr(RawHeaderPtr){};
81StringRefgetRawAccessMode()const override;
82StringRefgetRawLastModified()const override;
83StringRefgetRawUID()const override;
84StringRefgetRawGID()const override;
85
86uint64_tgetOffset()const override;
87uint64_tgetSizeOf() const override{returnsizeof(T); }
88
89Tconst *ArMemHdr;
90};
91
92structUnixArMemHdrType {
93charName[16];
94charLastModified[12];
95charUID[6];
96charGID[6];
97charAccessMode[8];
98charSize[10];///< Size of data, not including header or padding.
99charTerminator[2];
100};
101
102classArchiveMemberHeader :publicCommonArchiveMemberHeader<UnixArMemHdrType> {
103public:
104ArchiveMemberHeader(constArchive *Parent,constchar *RawHeaderPtr,
105uint64_tSize,Error *Err);
106
107 std::unique_ptr<AbstractArchiveMemberHeader>clone() const override{
108return std::make_unique<ArchiveMemberHeader>(*this);
109 }
110
111Expected<StringRef>getRawName()const override;
112
113Expected<StringRef>getName(uint64_tSize)const override;
114Expected<uint64_t>getSize()const override;
115Expected<const char *>getNextChildLoc()const override;
116Expected<bool>isThin()const override;
117};
118
119// File Member Header
120structBigArMemHdrType {
121charSize[20];// File member size in decimal
122charNextOffset[20];// Next member offset in decimal
123charPrevOffset[20];// Previous member offset in decimal
124charLastModified[12];
125charUID[12];
126charGID[12];
127charAccessMode[12];
128charNameLen[4];// File member name length in decimal
129union{
130charName[2];// Start of member name
131charTerminator[2];
132 };
133};
134
135// Define file member header of AIX big archive.
136classBigArchiveMemberHeader
137 :publicCommonArchiveMemberHeader<BigArMemHdrType> {
138
139public:
140BigArchiveMemberHeader(Archiveconst *Parent,constchar *RawHeaderPtr,
141uint64_tSize,Error *Err);
142 std::unique_ptr<AbstractArchiveMemberHeader>clone() const override{
143return std::make_unique<BigArchiveMemberHeader>(*this);
144 }
145
146Expected<StringRef>getRawName()const override;
147Expected<uint64_t>getRawNameSize()const;
148
149Expected<StringRef>getName(uint64_tSize)const override;
150Expected<uint64_t>getSize()const override;
151Expected<const char *>getNextChildLoc()const override;
152Expected<uint64_t>getNextOffset()const;
153Expected<bool>isThin() const override{returnfalse; }
154};
155
156classArchive :publicBinary {
157virtualvoid anchor();
158
159public:
160classChild {
161friendArchive;
162friendAbstractArchiveMemberHeader;
163
164constArchive *Parent;
165 std::unique_ptr<AbstractArchiveMemberHeader> Header;
166 /// Includes header but not padding byte.
167StringRef Data;
168 /// Offset from Data to the start of the file.
169uint16_t StartOfFile;
170
171Expected<bool> isThinMember()const;
172
173public:
174Child(constArchive *Parent,constchar *Start,Error *Err);
175Child(constArchive *Parent,StringRef Data,uint16_t StartOfFile);
176
177Child(constChild &C)
178 : Parent(C.Parent), Data(C.Data), StartOfFile(C.StartOfFile) {
179if (C.Header)
180 Header =C.Header->clone();
181 }
182
183Child(Child &&C) {
184 Parent = std::move(C.Parent);
185 Header = std::move(C.Header);
186 Data =C.Data;
187 StartOfFile =C.StartOfFile;
188 }
189
190Child &operator=(Child &&C)noexcept {
191if (&C ==this)
192return *this;
193
194 Parent = std::move(C.Parent);
195 Header = std::move(C.Header);
196 Data =C.Data;
197 StartOfFile =C.StartOfFile;
198
199return *this;
200 }
201
202Child &operator=(constChild &C) {
203if (&C ==this)
204return *this;
205
206 Parent =C.Parent;
207if (C.Header)
208 Header =C.Header->clone();
209 Data =C.Data;
210 StartOfFile =C.StartOfFile;
211
212return *this;
213 }
214
215booloperator==(constChild &other) const{
216assert(!Parent || !other.Parent || Parent == other.Parent);
217return Data.begin() == other.Data.begin();
218 }
219
220constArchive *getParent() const{return Parent; }
221Expected<Child>getNext()const;
222
223Expected<StringRef>getName()const;
224Expected<std::string>getFullName()const;
225Expected<StringRef>getRawName() const{return Header->getRawName(); }
226
227Expected<sys::TimePoint<std::chrono::seconds>>getLastModified() const{
228return Header->getLastModified();
229 }
230
231StringRefgetRawLastModified() const{
232return Header->getRawLastModified();
233 }
234
235Expected<unsigned>getUID() const{return Header->getUID(); }
236Expected<unsigned>getGID() const{return Header->getGID(); }
237
238Expected<sys::fs::perms>getAccessMode() const{
239return Header->getAccessMode();
240 }
241
242 /// \return the size of the archive member without the header or padding.
243Expected<uint64_t>getSize()const;
244 /// \return the size in the archive header for this member.
245Expected<uint64_t>getRawSize()const;
246
247Expected<StringRef>getBuffer()const;
248uint64_tgetChildOffset()const;
249uint64_tgetDataOffset() const{returngetChildOffset() + StartOfFile; }
250
251Expected<MemoryBufferRef>getMemoryBufferRef()const;
252
253Expected<std::unique_ptr<Binary>>
254getAsBinary(LLVMContext *Context =nullptr)const;
255 };
256
257classChildFallibleIterator {
258Child C;
259
260public:
261ChildFallibleIterator() : C(Child(nullptr, nullptr, nullptr)) {}
262ChildFallibleIterator(constChild &C) : C(C) {}
263
264constChild *operator->() const{return &C; }
265constChild &operator*() const{return C; }
266
267booloperator==(constChildFallibleIterator &other) const{
268// Ignore errors here: If an error occurred during increment then getNext
269// will have been set to child_end(), and the following comparison should
270// do the right thing.
271return C == other.C;
272 }
273
274booloperator!=(constChildFallibleIterator &other) const{
275return !(*this == other);
276 }
277
278Errorinc() {
279auto NextChild = C.getNext();
280if (!NextChild)
281return NextChild.takeError();
282 C = std::move(*NextChild);
283returnError::success();
284 }
285 };
286
287usingchild_iterator =fallible_iterator<ChildFallibleIterator>;
288
289classSymbol {
290constArchive *Parent;
291uint32_t SymbolIndex;
292uint32_t StringIndex;// Extra index to the string.
293
294public:
295Symbol(constArchive *p,uint32_t symi,uint32_t stri)
296 : Parent(p), SymbolIndex(symi), StringIndex(stri) {}
297
298booloperator==(constSymbol &other) const{
299return (Parent == other.Parent) && (SymbolIndex == other.SymbolIndex);
300 }
301
302StringRefgetName()const;
303Expected<Child>getMember()const;
304SymbolgetNext()const;
305boolisECSymbol()const;
306 };
307
308classsymbol_iterator {
309Symbol symbol;
310
311public:
312symbol_iterator(constSymbol &s) : symbol(s) {}
313
314constSymbol *operator->() const{return &symbol; }
315constSymbol &operator*() const{return symbol; }
316
317booloperator==(constsymbol_iterator &other) const{
318return symbol == other.symbol;
319 }
320
321booloperator!=(constsymbol_iterator &other) const{
322return !(*this == other);
323 }
324
325symbol_iterator &operator++() {// Preincrement
326 symbol = symbol.getNext();
327return *this;
328 }
329 };
330
331Archive(MemoryBufferRef Source,Error &Err);
332staticExpected<std::unique_ptr<Archive>>create(MemoryBufferRef Source);
333
334 /// Size field is 10 decimal digits long
335staticconstuint64_tMaxMemberSize = 9999999999;
336
337enumKind {K_GNU,K_GNU64,K_BSD,K_DARWIN,K_DARWIN64,K_COFF,K_AIXBIG };
338
339Kindkind() const{return (Kind)Format; }
340boolisThin() const{return IsThin; }
341staticobject::Archive::KindgetDefaultKind();
342staticobject::Archive::KindgetDefaultKindForTriple(constTriple &T);
343
344child_iteratorchild_begin(Error &Err,bool SkipInternal =true)const;
345child_iteratorchild_end()const;
346iterator_range<child_iterator>children(Error &Err,
347bool SkipInternal =true) const{
348returnmake_range(child_begin(Err, SkipInternal),child_end());
349 }
350
351symbol_iteratorsymbol_begin()const;
352symbol_iteratorsymbol_end()const;
353iterator_range<symbol_iterator>symbols() const{
354returnmake_range(symbol_begin(),symbol_end());
355 }
356
357Expected<iterator_range<symbol_iterator>>ec_symbols()const;
358
359staticboolclassof(Binaryconst *v) {return v->isArchive(); }
360
361// check if a symbol is in the archive
362Expected<std::optional<Child>>findSym(StringRefname)const;
363
364virtualboolisEmpty()const;
365boolhasSymbolTable()const;
366StringRefgetSymbolTable() const{returnSymbolTable; }
367StringRefgetStringTable() const{returnStringTable; }
368uint32_tgetNumberOfSymbols()const;
369uint32_tgetNumberOfECSymbols()const;
370virtualuint64_tgetFirstChildOffset() const{returngetArchiveMagicLen(); }
371
372 std::vector<std::unique_ptr<MemoryBuffer>>takeThinBuffers() {
373return std::move(ThinBuffers);
374 }
375
376 std::unique_ptr<AbstractArchiveMemberHeader>
377createArchiveMemberHeader(constchar *RawHeaderPtr,uint64_tSize,
378Error *Err)const;
379
380protected:
381uint64_tgetArchiveMagicLen()const;
382voidsetFirstRegular(const Child &C);
383
384StringRefSymbolTable;
385StringRefECSymbolTable;
386StringRefStringTable;
387
388private:
389StringRef FirstRegularData;
390uint16_t FirstRegularStartOfFile = -1;
391
392unsigned Format : 3;
393unsigned IsThin : 1;
394mutable std::vector<std::unique_ptr<MemoryBuffer>> ThinBuffers;
395};
396
397classBigArchive :publicArchive {
398public:
399 /// Fixed-Length Header.
400structFixLenHdr {
401charMagic[sizeof(BigArchiveMagic) - 1];///< Big archive magic string.
402charMemOffset[20];///< Offset to member table.
403charGlobSymOffset[20];///< Offset to global symbol table.
404char
405GlobSym64Offset[20];///< Offset global symbol table for 64-bit objects.
406charFirstChildOffset[20];///< Offset to first archive member.
407charLastChildOffset[20];///< Offset to last archive member.
408charFreeOffset[20];///< Offset to first mem on free list.
409 };
410
411constFixLenHdr *ArFixLenHdr;
412uint64_tFirstChildOffset = 0;
413uint64_tLastChildOffset = 0;
414 std::stringMergedGlobalSymtabBuf;
415boolHas32BitGlobalSymtab =false;
416boolHas64BitGlobalSymtab =false;
417
418public:
419BigArchive(MemoryBufferRef Source,Error &Err);
420uint64_tgetFirstChildOffset() const override{returnFirstChildOffset; }
421uint64_tgetLastChildOffset() const{returnLastChildOffset; }
422boolisEmpty() const override{returngetFirstChildOffset() == 0; }
423
424boolhas32BitGlobalSymtab() {returnHas32BitGlobalSymtab; }
425boolhas64BitGlobalSymtab() {returnHas64BitGlobalSymtab; }
426};
427
428}// end namespace object
429}// end namespace llvm
430
431#endif// LLVM_OBJECT_ARCHIVE_H
Binary.h
Chrono.h
Size
uint64_t Size
Definition:ELFObjHandler.cpp:81
FileSystem.h
MemoryBuffer.h
T
#define T
Definition:Mips16ISelLowering.cpp:341
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
name
static const char * name
Definition:SMEABIPass.cpp:46
StringRef.h
T
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::LLVMContext
This is an important class for using LLVM in a threaded context.
Definition:LLVMContext.h:67
llvm::MemoryBufferRef
Definition:MemoryBufferRef.h:22
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition:StringRef.h:51
llvm::StringRef::begin
iterator begin() const
Definition:StringRef.h:116
llvm::Triple
Triple - Helper class for working with autoconf configuration names.
Definition:Triple.h:44
llvm::fallible_iterator
A wrapper class for fallible iterators.
Definition:fallible_iterator.h:68
llvm::iterator_range
A range adaptor for a pair of iterators.
Definition:iterator_range.h:42
llvm::object::AbstractArchiveMemberHeader
Definition:Archive.h:39
llvm::object::AbstractArchiveMemberHeader::Parent
const Archive * Parent
Definition:Archive.h:73
llvm::object::AbstractArchiveMemberHeader::getRawGID
virtual StringRef getRawGID() const =0
llvm::object::AbstractArchiveMemberHeader::getRawUID
virtual StringRef getRawUID() const =0
llvm::object::AbstractArchiveMemberHeader::getUID
Expected< unsigned > getUID() const
Definition:Archive.cpp:403
llvm::object::AbstractArchiveMemberHeader::getSize
virtual Expected< uint64_t > getSize() const =0
llvm::object::AbstractArchiveMemberHeader::getAccessMode
Expected< sys::fs::perms > getAccessMode() const
Definition:Archive.cpp:384
llvm::object::AbstractArchiveMemberHeader::AbstractArchiveMemberHeader
AbstractArchiveMemberHeader(const Archive *Parent)
Definition:Archive.h:41
llvm::object::AbstractArchiveMemberHeader::~AbstractArchiveMemberHeader
virtual ~AbstractArchiveMemberHeader()=default
llvm::object::AbstractArchiveMemberHeader::getGID
Expected< unsigned > getGID() const
Definition:Archive.cpp:410
llvm::object::AbstractArchiveMemberHeader::getOffset
virtual uint64_t getOffset() const =0
llvm::object::AbstractArchiveMemberHeader::getNextChildLoc
virtual Expected< const char * > getNextChildLoc() const =0
Get next file member location.
llvm::object::AbstractArchiveMemberHeader::getRawName
virtual Expected< StringRef > getRawName() const =0
Get the name without looking up long names.
llvm::object::AbstractArchiveMemberHeader::isThin
virtual Expected< bool > isThin() const =0
llvm::object::AbstractArchiveMemberHeader::getLastModified
Expected< sys::TimePoint< std::chrono::seconds > > getLastModified() const
Definition:Archive.cpp:393
llvm::object::AbstractArchiveMemberHeader::getSizeOf
virtual uint64_t getSizeOf() const =0
Returns the size in bytes of the format-defined member header of the concrete archive type.
llvm::object::AbstractArchiveMemberHeader::getRawAccessMode
virtual StringRef getRawAccessMode() const =0
llvm::object::AbstractArchiveMemberHeader::clone
virtual std::unique_ptr< AbstractArchiveMemberHeader > clone() const =0
llvm::object::AbstractArchiveMemberHeader::getRawLastModified
virtual StringRef getRawLastModified() const =0
llvm::object::AbstractArchiveMemberHeader::getName
virtual Expected< StringRef > getName(uint64_t Size) const =0
Get the name looking up long names.
llvm::object::ArchiveMemberHeader
Definition:Archive.h:102
llvm::object::ArchiveMemberHeader::clone
std::unique_ptr< AbstractArchiveMemberHeader > clone() const override
Definition:Archive.h:107
llvm::object::ArchiveMemberHeader::getName
Expected< StringRef > getName(uint64_t Size) const override
Get the name looking up long names.
Definition:Archive.cpp:244
llvm::object::ArchiveMemberHeader::getRawName
Expected< StringRef > getRawName() const override
Get the name without looking up long names.
Definition:Archive.cpp:154
llvm::object::ArchiveMemberHeader::isThin
Expected< bool > isThin() const override
Definition:Archive.cpp:417
llvm::object::ArchiveMemberHeader::getSize
Expected< uint64_t > getSize() const override
Definition:Archive.cpp:356
llvm::object::ArchiveMemberHeader::getNextChildLoc
Expected< const char * > getNextChildLoc() const override
Get next file member location.
Definition:Archive.cpp:425
llvm::object::Archive::ChildFallibleIterator
Definition:Archive.h:257
llvm::object::Archive::ChildFallibleIterator::ChildFallibleIterator
ChildFallibleIterator()
Definition:Archive.h:261
llvm::object::Archive::ChildFallibleIterator::inc
Error inc()
Definition:Archive.h:278
llvm::object::Archive::ChildFallibleIterator::operator->
const Child * operator->() const
Definition:Archive.h:264
llvm::object::Archive::ChildFallibleIterator::operator==
bool operator==(const ChildFallibleIterator &other) const
Definition:Archive.h:267
llvm::object::Archive::ChildFallibleIterator::operator*
const Child & operator*() const
Definition:Archive.h:265
llvm::object::Archive::ChildFallibleIterator::operator!=
bool operator!=(const ChildFallibleIterator &other) const
Definition:Archive.h:274
llvm::object::Archive::ChildFallibleIterator::ChildFallibleIterator
ChildFallibleIterator(const Child &C)
Definition:Archive.h:262
llvm::object::Archive::Child
Definition:Archive.h:160
llvm::object::Archive::Child::getBuffer
Expected< StringRef > getBuffer() const
Definition:Archive.cpp:572
llvm::object::Archive::Child::getRawLastModified
StringRef getRawLastModified() const
Definition:Archive.h:231
llvm::object::Archive::Child::getNext
Expected< Child > getNext() const
Definition:Archive.cpp:594
llvm::object::Archive::Child::operator==
bool operator==(const Child &other) const
Definition:Archive.h:215
llvm::object::Archive::Child::getFullName
Expected< std::string > getFullName() const
Definition:Archive.cpp:554
llvm::object::Archive::Child::getChildOffset
uint64_t getChildOffset() const
Definition:Archive.cpp:625
llvm::object::Archive::Child::getRawSize
Expected< uint64_t > getRawSize() const
Definition:Archive.cpp:548
llvm::object::Archive::Child::getName
Expected< StringRef > getName() const
Definition:Archive.cpp:632
llvm::object::Archive::Child::getSize
Expected< uint64_t > getSize() const
Definition:Archive.cpp:542
llvm::object::Archive::Child::operator=
Child & operator=(const Child &C)
Definition:Archive.h:202
llvm::object::Archive::Child::getGID
Expected< unsigned > getGID() const
Definition:Archive.h:236
llvm::object::Archive::Child::getDataOffset
uint64_t getDataOffset() const
Definition:Archive.h:249
llvm::object::Archive::Child::getRawName
Expected< StringRef > getRawName() const
Definition:Archive.h:225
llvm::object::Archive::Child::getAsBinary
Expected< std::unique_ptr< Binary > > getAsBinary(LLVMContext *Context=nullptr) const
Definition:Archive.cpp:657
llvm::object::Archive::Child::getMemoryBufferRef
Expected< MemoryBufferRef > getMemoryBufferRef() const
Definition:Archive.cpp:645
llvm::object::Archive::Child::getUID
Expected< unsigned > getUID() const
Definition:Archive.h:235
llvm::object::Archive::Child::operator=
Child & operator=(Child &&C) noexcept
Definition:Archive.h:190
llvm::object::Archive::Child::getAccessMode
Expected< sys::fs::perms > getAccessMode() const
Definition:Archive.h:238
llvm::object::Archive::Child::getLastModified
Expected< sys::TimePoint< std::chrono::seconds > > getLastModified() const
Definition:Archive.h:227
llvm::object::Archive::Child::getParent
const Archive * getParent() const
Definition:Archive.h:220
llvm::object::Archive::Child::Child
Child(Child &&C)
Definition:Archive.h:183
llvm::object::Archive::Child::Child
Child(const Child &C)
Definition:Archive.h:177
llvm::object::Archive::Symbol
Definition:Archive.h:289
llvm::object::Archive::Symbol::getNext
Symbol getNext() const
Definition:Archive.cpp:1090
llvm::object::Archive::Symbol::Symbol
Symbol(const Archive *p, uint32_t symi, uint32_t stri)
Definition:Archive.h:295
llvm::object::Archive::Symbol::getMember
Expected< Child > getMember() const
Definition:Archive.cpp:1020
llvm::object::Archive::Symbol::operator==
bool operator==(const Symbol &other) const
Definition:Archive.h:298
llvm::object::Archive::Symbol::getName
StringRef getName() const
Definition:Archive.cpp:1014
llvm::object::Archive::Symbol::isECSymbol
bool isECSymbol() const
Definition:Archive.cpp:1006
llvm::object::Archive::symbol_iterator
Definition:Archive.h:308
llvm::object::Archive::symbol_iterator::operator++
symbol_iterator & operator++()
Definition:Archive.h:325
llvm::object::Archive::symbol_iterator::operator*
const Symbol & operator*() const
Definition:Archive.h:315
llvm::object::Archive::symbol_iterator::operator!=
bool operator!=(const symbol_iterator &other) const
Definition:Archive.h:321
llvm::object::Archive::symbol_iterator::operator->
const Symbol * operator->() const
Definition:Archive.h:314
llvm::object::Archive::symbol_iterator::symbol_iterator
symbol_iterator(const Symbol &s)
Definition:Archive.h:312
llvm::object::Archive::symbol_iterator::operator==
bool operator==(const symbol_iterator &other) const
Definition:Archive.h:317
llvm::object::Archive
Definition:Archive.h:156
llvm::object::Archive::createArchiveMemberHeader
std::unique_ptr< AbstractArchiveMemberHeader > createArchiveMemberHeader(const char *RawHeaderPtr, uint64_t Size, Error *Err) const
Definition:Archive.cpp:684
llvm::object::Archive::symbol_begin
symbol_iterator symbol_begin() const
Definition:Archive.cpp:1132
llvm::object::Archive::symbols
iterator_range< symbol_iterator > symbols() const
Definition:Archive.h:353
llvm::object::Archive::getFirstChildOffset
virtual uint64_t getFirstChildOffset() const
Definition:Archive.h:370
llvm::object::Archive::isThin
bool isThin() const
Definition:Archive.h:340
llvm::object::Archive::getStringTable
StringRef getStringTable() const
Definition:Archive.h:367
llvm::object::Archive::getNumberOfSymbols
uint32_t getNumberOfSymbols() const
Definition:Archive.cpp:1239
llvm::object::Archive::child_iterator
fallible_iterator< ChildFallibleIterator > child_iterator
Definition:Archive.h:287
llvm::object::Archive::getNumberOfECSymbols
uint32_t getNumberOfECSymbols() const
Definition:Archive.cpp:1257
llvm::object::Archive::setFirstRegular
void setFirstRegular(const Child &C)
Definition:Archive.cpp:703
llvm::object::Archive::getArchiveMagicLen
uint64_t getArchiveMagicLen() const
Definition:Archive.cpp:693
llvm::object::Archive::getSymbolTable
StringRef getSymbolTable() const
Definition:Archive.h:366
llvm::object::Archive::ECSymbolTable
StringRef ECSymbolTable
Definition:Archive.h:385
llvm::object::Archive::symbol_end
symbol_iterator symbol_end() const
Definition:Archive.cpp:1190
llvm::object::Archive::getDefaultKind
static object::Archive::Kind getDefaultKind()
Definition:Archive.cpp:981
llvm::object::Archive::children
iterator_range< child_iterator > children(Error &Err, bool SkipInternal=true) const
Definition:Archive.h:346
llvm::object::Archive::isEmpty
virtual bool isEmpty() const
Definition:Archive.cpp:1280
llvm::object::Archive::child_end
child_iterator child_end() const
Definition:Archive.cpp:1002
llvm::object::Archive::hasSymbolTable
bool hasSymbolTable() const
Definition:Archive.cpp:1284
llvm::object::Archive::classof
static bool classof(Binary const *v)
Definition:Archive.h:359
llvm::object::Archive::StringTable
StringRef StringTable
Definition:Archive.h:386
llvm::object::Archive::kind
Kind kind() const
Definition:Archive.h:339
llvm::object::Archive::getDefaultKindForTriple
static object::Archive::Kind getDefaultKindForTriple(const Triple &T)
Definition:Archive.cpp:971
llvm::object::Archive::SymbolTable
StringRef SymbolTable
Definition:Archive.h:384
llvm::object::Archive::Kind
Kind
Definition:Archive.h:337
llvm::object::Archive::K_AIXBIG
@ K_AIXBIG
Definition:Archive.h:337
llvm::object::Archive::K_DARWIN
@ K_DARWIN
Definition:Archive.h:337
llvm::object::Archive::K_GNU
@ K_GNU
Definition:Archive.h:337
llvm::object::Archive::K_BSD
@ K_BSD
Definition:Archive.h:337
llvm::object::Archive::K_COFF
@ K_COFF
Definition:Archive.h:337
llvm::object::Archive::K_DARWIN64
@ K_DARWIN64
Definition:Archive.h:337
llvm::object::Archive::K_GNU64
@ K_GNU64
Definition:Archive.h:337
llvm::object::Archive::ec_symbols
Expected< iterator_range< symbol_iterator > > ec_symbols() const
Definition:Archive.cpp:1194
llvm::object::Archive::findSym
Expected< std::optional< Child > > findSym(StringRef name) const
Definition:Archive.cpp:1263
llvm::object::Archive::child_begin
child_iterator child_begin(Error &Err, bool SkipInternal=true) const
Definition:Archive.cpp:986
llvm::object::Archive::MaxMemberSize
static const uint64_t MaxMemberSize
Size field is 10 decimal digits long.
Definition:Archive.h:335
llvm::object::Archive::takeThinBuffers
std::vector< std::unique_ptr< MemoryBuffer > > takeThinBuffers()
Definition:Archive.h:372
llvm::object::Archive::create
static Expected< std::unique_ptr< Archive > > create(MemoryBufferRef Source)
Definition:Archive.cpp:668
llvm::object::BigArchiveMemberHeader
Definition:Archive.h:137
llvm::object::BigArchiveMemberHeader::getSize
Expected< uint64_t > getSize() const override
Definition:Archive.cpp:361
llvm::object::BigArchiveMemberHeader::getRawName
Expected< StringRef > getRawName() const override
Get the name without looking up long names.
Definition:Archive.cpp:215
llvm::object::BigArchiveMemberHeader::isThin
Expected< bool > isThin() const override
Definition:Archive.h:153
llvm::object::BigArchiveMemberHeader::clone
std::unique_ptr< AbstractArchiveMemberHeader > clone() const override
Definition:Archive.h:142
llvm::object::BigArchiveMemberHeader::getNextChildLoc
Expected< const char * > getNextChildLoc() const override
Get next file member location.
Definition:Archive.cpp:450
llvm::object::BigArchiveMemberHeader::getName
Expected< StringRef > getName(uint64_t Size) const override
Get the name looking up long names.
Definition:Archive.cpp:352
llvm::object::BigArchiveMemberHeader::getRawNameSize
Expected< uint64_t > getRawNameSize() const
Definition:Archive.cpp:374
llvm::object::BigArchiveMemberHeader::getNextOffset
Expected< uint64_t > getNextOffset() const
Definition:Archive.cpp:379
llvm::object::BigArchive
Definition:Archive.h:397
llvm::object::BigArchive::isEmpty
bool isEmpty() const override
Definition:Archive.h:422
llvm::object::BigArchive::Has32BitGlobalSymtab
bool Has32BitGlobalSymtab
Definition:Archive.h:415
llvm::object::BigArchive::getLastChildOffset
uint64_t getLastChildOffset() const
Definition:Archive.h:421
llvm::object::BigArchive::MergedGlobalSymtabBuf
std::string MergedGlobalSymtabBuf
Definition:Archive.h:414
llvm::object::BigArchive::Has64BitGlobalSymtab
bool Has64BitGlobalSymtab
Definition:Archive.h:416
llvm::object::BigArchive::ArFixLenHdr
const FixLenHdr * ArFixLenHdr
Definition:Archive.h:411
llvm::object::BigArchive::FirstChildOffset
uint64_t FirstChildOffset
Definition:Archive.h:412
llvm::object::BigArchive::LastChildOffset
uint64_t LastChildOffset
Definition:Archive.h:413
llvm::object::BigArchive::has32BitGlobalSymtab
bool has32BitGlobalSymtab()
Definition:Archive.h:424
llvm::object::BigArchive::getFirstChildOffset
uint64_t getFirstChildOffset() const override
Definition:Archive.h:420
llvm::object::BigArchive::has64BitGlobalSymtab
bool has64BitGlobalSymtab()
Definition:Archive.h:425
llvm::object::Binary
Definition:Binary.h:32
llvm::object::CommonArchiveMemberHeader
Definition:Archive.h:77
llvm::object::CommonArchiveMemberHeader::getRawLastModified
StringRef getRawLastModified() const override
Definition:Archive.cpp:75
llvm::object::CommonArchiveMemberHeader::getRawUID
StringRef getRawUID() const override
Definition:Archive.cpp:79
llvm::object::CommonArchiveMemberHeader::CommonArchiveMemberHeader
CommonArchiveMemberHeader(const Archive *Parent, const T *RawHeaderPtr)
Definition:Archive.h:79
llvm::object::CommonArchiveMemberHeader::getSizeOf
uint64_t getSizeOf() const override
Returns the size in bytes of the format-defined member header of the concrete archive type.
Definition:Archive.h:87
llvm::object::CommonArchiveMemberHeader::getOffset
uint64_t getOffset() const override
Definition:Archive.cpp:87
llvm::object::CommonArchiveMemberHeader::getRawAccessMode
StringRef getRawAccessMode() const override
Definition:Archive.cpp:70
llvm::object::CommonArchiveMemberHeader::getRawGID
StringRef getRawGID() const override
Definition:Archive.cpp:83
llvm::object::CommonArchiveMemberHeader::ArMemHdr
T const * ArMemHdr
Definition:Archive.h:89
llvm::object::symbol_iterator
Definition:ObjectFile.h:208
uint16_t
uint32_t
uint64_t
fallible_iterator.h
iterator_range.h
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
Error.h
llvm::CallingConv::C
@ C
The default llvm calling convention, compatible with C.
Definition:CallingConv.h:34
llvm::object::ArchiveMagic
const char ArchiveMagic[]
Definition:Archive.h:33
llvm::object::ThinArchiveMagic
const char ThinArchiveMagic[]
Definition:Archive.h:34
llvm::object::BigArchiveMagic
const char BigArchiveMagic[]
Definition:Archive.h:35
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::make_range
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
Definition:iterator_range.h:77
llvm::object::BigArMemHdrType
Definition:Archive.h:120
llvm::object::BigArMemHdrType::AccessMode
char AccessMode[12]
Definition:Archive.h:127
llvm::object::BigArMemHdrType::Terminator
char Terminator[2]
Definition:Archive.h:131
llvm::object::BigArMemHdrType::NextOffset
char NextOffset[20]
Definition:Archive.h:122
llvm::object::BigArMemHdrType::LastModified
char LastModified[12]
Definition:Archive.h:124
llvm::object::BigArMemHdrType::PrevOffset
char PrevOffset[20]
Definition:Archive.h:123
llvm::object::BigArMemHdrType::Size
char Size[20]
Definition:Archive.h:121
llvm::object::BigArMemHdrType::UID
char UID[12]
Definition:Archive.h:125
llvm::object::BigArMemHdrType::NameLen
char NameLen[4]
Definition:Archive.h:128
llvm::object::BigArMemHdrType::GID
char GID[12]
Definition:Archive.h:126
llvm::object::BigArMemHdrType::Name
char Name[2]
Definition:Archive.h:130
llvm::object::BigArchive::FixLenHdr
Fixed-Length Header.
Definition:Archive.h:400
llvm::object::BigArchive::FixLenHdr::Magic
char Magic[sizeof(BigArchiveMagic) - 1]
Big archive magic string.
Definition:Archive.h:401
llvm::object::BigArchive::FixLenHdr::FirstChildOffset
char FirstChildOffset[20]
Offset to first archive member.
Definition:Archive.h:406
llvm::object::BigArchive::FixLenHdr::LastChildOffset
char LastChildOffset[20]
Offset to last archive member.
Definition:Archive.h:407
llvm::object::BigArchive::FixLenHdr::FreeOffset
char FreeOffset[20]
Offset to first mem on free list.
Definition:Archive.h:408
llvm::object::BigArchive::FixLenHdr::GlobSym64Offset
char GlobSym64Offset[20]
Offset global symbol table for 64-bit objects.
Definition:Archive.h:405
llvm::object::BigArchive::FixLenHdr::MemOffset
char MemOffset[20]
Offset to member table.
Definition:Archive.h:402
llvm::object::BigArchive::FixLenHdr::GlobSymOffset
char GlobSymOffset[20]
Offset to global symbol table.
Definition:Archive.h:403
llvm::object::UnixArMemHdrType
Definition:Archive.h:92
llvm::object::UnixArMemHdrType::Terminator
char Terminator[2]
Definition:Archive.h:99
llvm::object::UnixArMemHdrType::UID
char UID[6]
Definition:Archive.h:95
llvm::object::UnixArMemHdrType::AccessMode
char AccessMode[8]
Definition:Archive.h:97
llvm::object::UnixArMemHdrType::LastModified
char LastModified[12]
Definition:Archive.h:94
llvm::object::UnixArMemHdrType::GID
char GID[6]
Definition:Archive.h:96
llvm::object::UnixArMemHdrType::Size
char Size[10]
Size of data, not including header or padding.
Definition:Archive.h:98
llvm::object::UnixArMemHdrType::Name
char Name[16]
Definition:Archive.h:93

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

©2009-2025 Movatter.jp