LLVM 22.0.0git
ArchiveWriter.cpp File Reference

Go to the source code of this file.

Classes

struct  SymMap

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.

Functions

template<typename T>
static void printWithSpacePadding (raw_ostream &OS, T Data, unsigned Size)
static bool isDarwin (object::Archive::Kind Kind)
static bool isAIXBigArchive (object::Archive::Kind Kind)
static bool isCOFFArchive (object::Archive::Kind Kind)
static bool isBSDLike (object::Archive::Kind Kind)
template<class T>
static void print (raw_ostream &Out, object::Archive::Kind Kind, T Val)
template<class T>
static void printLE (raw_ostream &Out, T Val)
static void printRestOfMemberHeader (raw_ostream &Out, const sys::TimePoint< std::chrono::seconds > &ModTime, unsigned UID, unsigned GID, unsigned Perms, uint64_t Size)
static void printGNUSmallMemberHeader (raw_ostream &Out, StringRef Name, const sys::TimePoint< std::chrono::seconds > &ModTime, unsigned UID, unsigned GID, unsigned Perms, uint64_t Size)
static void printBSDMemberHeader (raw_ostream &Out, uint64_t Pos, StringRef Name, const sys::TimePoint< std::chrono::seconds > &ModTime, unsigned UID, unsigned GID, unsigned Perms, uint64_t Size)
static void printBigArchiveMemberHeader (raw_ostream &Out, StringRef Name, const sys::TimePoint< std::chrono::seconds > &ModTime, unsigned UID, unsigned GID, unsigned Perms, uint64_t Size, uint64_t PrevOffset, uint64_t NextOffset)
static bool useStringTable (bool Thin, StringRef Name)
static bool is64BitKind (object::Archive::Kind Kind)
static void printMemberHeader (raw_ostream &Out, uint64_t Pos, raw_ostream &StringTable, StringMap< uint64_t > &MemberNames, object::Archive::Kind Kind, bool Thin, const NewArchiveMember &M, sys::TimePoint< std::chrono::seconds > ModTime, uint64_t Size)
static MemberData computeStringTable (StringRef Names)
static sys::TimePoint< std::chrono::seconds > now (bool Deterministic)
static bool isArchiveSymbol (const object::BasicSymbolRef &S)
static void printNBits (raw_ostream &Out, object::Archive::Kind Kind, uint64_t Val)
static uint64_t computeSymbolTableSize (object::Archive::Kind Kind, uint64_t NumSyms, uint64_t OffsetSize, uint64_t StringTableSize, uint32_t *Padding=nullptr)
static uint64_t computeSymbolMapSize (uint64_t NumObj, SymMap &SymMap, uint32_t *Padding=nullptr)
static uint64_t computeECSymbolsSize (SymMap &SymMap, uint32_t *Padding=nullptr)
static void writeSymbolTableHeader (raw_ostream &Out, object::Archive::Kind Kind, bool Deterministic, uint64_t Size, uint64_t PrevMemberOffset=0, uint64_t NextMemberOffset=0)
static uint64_t computeHeadersSize (object::Archive::Kind Kind, uint64_t NumMembers, uint64_t StringMemberSize, uint64_t NumSyms, uint64_t SymNamesSize, SymMap *SymMap)
static Expected< std::unique_ptr< SymbolicFile > > getSymbolicFile (MemoryBufferRef Buf, LLVMContext &Context, object::Archive::Kind Kind, function_ref< void(Error)> Warn)
static bool is64BitSymbolicFile (const SymbolicFile *SymObj)
template<typename AuxiliaryHeader>
uint16_t getAuxMaxAlignment (uint16_t AuxHeaderSize, AuxiliaryHeader *AuxHeader, uint16_t Log2OfMaxAlign)
static uint32_t getMemberAlignment (SymbolicFile *SymObj)
static void writeSymbolTable (raw_ostream &Out, object::Archive::Kind Kind, bool Deterministic, ArrayRef< MemberData > Members, StringRef StringTable, uint64_t MembersOffset, unsigned NumSyms, uint64_t PrevMemberOffset=0, uint64_t NextMemberOffset=0, bool Is64Bit=false)
static void writeSymbolMap (raw_ostream &Out, object::Archive::Kind Kind, bool Deterministic, ArrayRef< MemberData > Members, SymMap &SymMap, uint64_t MembersOffset)
static void writeECSymbols (raw_ostream &Out, object::Archive::Kind Kind, bool Deterministic, ArrayRef< MemberData > Members, SymMap &SymMap)
static bool isECObject (object::SymbolicFile &Obj)
static bool isAnyArm64COFF (object::SymbolicFile &Obj)
bool isImportDescriptor (StringRef Name)
static Expected< std::vector< unsigned > > getSymbols (SymbolicFile *Obj, uint16_t Index, raw_ostream &SymNames, SymMap *SymMap)
static Expected< std::vector< MemberData > > computeMemberData (raw_ostream &StringTable, raw_ostream &SymNames, object::Archive::Kind Kind, bool Thin, bool Deterministic, SymtabWritingMode NeedSymbols, SymMap *SymMap, LLVMContext &Context, ArrayRef< NewArchiveMember > NewMembers, std::optional< bool > IsEC, function_ref< void(Error)> Warn)
static ErrorOr< SmallString< 128 > > llvm::canonicalizePath (StringRef P)
LLVM_ABI Expected< std::string > llvm::computeArchiveRelativePath (StringRef From, StringRef To)
LLVM_ABI Error llvm::writeArchiveToStream (raw_ostream &Out, ArrayRef< NewArchiveMember > NewMembers, SymtabWritingMode WriteSymtab, object::Archive::Kind Kind, bool Deterministic, bool Thin, std::optional< bool > IsEC=std::nullopt, function_ref< void(Error)> Warn=warnToStderr)
LLVM_ABI void llvm::warnToStderr (Error Err)
LLVM_ABI Error llvm::writeArchive (StringRef ArcName, ArrayRef< NewArchiveMember > NewMembers, SymtabWritingMode WriteSymtab, object::Archive::Kind Kind, bool Deterministic, bool Thin, std::unique_ptr< MemoryBuffer > OldArchiveBuf=nullptr, std::optional< bool > IsEC=std::nullopt, function_ref< void(Error)> Warn=warnToStderr)
LLVM_ABI Expected< std::unique_ptr< MemoryBuffer > > llvm::writeArchiveToBuffer (ArrayRef< NewArchiveMember > NewMembers, SymtabWritingMode WriteSymtab, object::Archive::Kind Kind, bool Deterministic, bool Thin, function_ref< void(Error)> Warn=warnToStderr)

Variables

static const uint32_t Log2OfAIXPageSize = 12
static const uint32_t MinBigArchiveMemDataAlign = 2

Function Documentation

◆ computeECSymbolsSize()

uint64_t computeECSymbolsSize ( SymMap & SymMap,
uint32_t * Padding = nullptr )
static

Definition at line 428 of file ArchiveWriter.cpp.

References SymMap::ECMap, llvm::offsetToAlignment(), and Size.

Referenced by computeHeadersSize(), and writeECSymbols().

◆ computeHeadersSize()

◆ computeMemberData()

◆ computeStringTable()

MemberData computeStringTable ( StringRef Names)
static

◆ computeSymbolMapSize()

uint64_t computeSymbolMapSize ( uint64_t NumObj,
SymMap & SymMap,
uint32_t * Padding = nullptr )
static

Definition at line 413 of file ArchiveWriter.cpp.

References SymMap::Map, llvm::offsetToAlignment(), and Size.

Referenced by computeHeadersSize(), and writeSymbolMap().

◆ computeSymbolTableSize()

uint64_t computeSymbolTableSize ( object::Archive::Kind Kind,
uint64_t NumSyms,
uint64_t OffsetSize,
uint64_t StringTableSize,
uint32_t * Padding = nullptr )
static

◆ getAuxMaxAlignment()

template<typename AuxiliaryHeader>
uint16_t getAuxMaxAlignment ( uint16_t AuxHeaderSize,
AuxiliaryHeader * AuxHeader,
uint16_t Log2OfMaxAlign )

Definition at line 547 of file ArchiveWriter.cpp.

References Log2OfAIXPageSize, MinBigArchiveMemDataAlign, and offsetof.

Referenced by getMemberAlignment().

◆ getMemberAlignment()

◆ getSymbolicFile()

◆ getSymbols()

◆ is64BitKind()

◆ is64BitSymbolicFile()

bool is64BitSymbolicFile ( const SymbolicFile * SymObj)
static

◆ isAIXBigArchive()

◆ isAnyArm64COFF()

◆ isArchiveSymbol()

◆ isBSDLike()

◆ isCOFFArchive()

◆ isDarwin()

bool isDarwin ( object::Archive::Kind Kind)
static

◆ isECObject()

◆ isImportDescriptor()

◆ now()

◆ print()

◆ printBigArchiveMemberHeader()

void printBigArchiveMemberHeader ( raw_ostream & Out,
StringRef Name,
const sys::TimePoint< std::chrono::seconds > & ModTime,
unsigned UID,
unsigned GID,
unsigned Perms,
uint64_t Size,
uint64_t PrevOffset,
uint64_t NextOffset )
static

◆ printBSDMemberHeader()

void printBSDMemberHeader ( raw_ostream & Out,
uint64_t Pos,
StringRef Name,
const sys::TimePoint< std::chrono::seconds > & ModTime,
unsigned UID,
unsigned GID,
unsigned Perms,
uint64_t Size )
static

◆ printGNUSmallMemberHeader()

void printGNUSmallMemberHeader ( raw_ostream & Out,
StringRef Name,
const sys::TimePoint< std::chrono::seconds > & ModTime,
unsigned UID,
unsigned GID,
unsigned Perms,
uint64_t Size )
static

◆ printLE()

template<class T>
void printLE ( raw_ostream & Out,
T Val )
static

Definition at line 211 of file ArchiveWriter.cpp.

References llvm::little, T, and llvm::support::endian::write().

Referenced by writeECSymbols(), and writeSymbolMap().

◆ printMemberHeader()

◆ printNBits()

void printNBits ( raw_ostream & Out,
object::Archive::Kind Kind,
uint64_t Val )
static

Definition at line 376 of file ArchiveWriter.cpp.

References is64BitKind(), and llvm::print().

Referenced by writeSymbolTable().

◆ printRestOfMemberHeader()

void printRestOfMemberHeader ( raw_ostream & Out,
const sys::TimePoint< std::chrono::seconds > & ModTime,
unsigned UID,
unsigned GID,
unsigned Perms,
uint64_t Size )
static

◆ printWithSpacePadding()

◆ useStringTable()

bool useStringTable ( bool Thin,
StringRef Name )
static

Definition at line 280 of file ArchiveWriter.cpp.

Referenced by printMemberHeader().

◆ writeECSymbols()

void writeECSymbols ( raw_ostream & Out,
object::Archive::Kind Kind,
bool Deterministic,
ArrayRef< MemberData > Members,
SymMap & SymMap )
static

◆ writeSymbolMap()

void writeSymbolMap ( raw_ostream & Out,
object::Archive::Kind Kind,
bool Deterministic,
ArrayRef< MemberData > Members,
SymMap & SymMap,
uint64_t MembersOffset )
static

◆ writeSymbolTable()

void writeSymbolTable ( raw_ostream & Out,
object::Archive::Kind Kind,
bool Deterministic,
ArrayRef< MemberData > Members,
StringRef StringTable,
uint64_t MembersOffset,
unsigned NumSyms,
uint64_t PrevMemberOffset = 0,
uint64_t NextMemberOffset = 0,
bool Is64Bit = false )
static

◆ writeSymbolTableHeader()

void writeSymbolTableHeader ( raw_ostream & Out,
object::Archive::Kind Kind,
bool Deterministic,
uint64_t Size,
uint64_t PrevMemberOffset = 0,
uint64_t NextMemberOffset = 0 )
static

Variable Documentation

◆ Log2OfAIXPageSize

const uint32_t Log2OfAIXPageSize = 12
static

Definition at line 538 of file ArchiveWriter.cpp.

Referenced by getAuxMaxAlignment(), and getMemberAlignment().

◆ MinBigArchiveMemDataAlign

const uint32_t MinBigArchiveMemDataAlign = 2
static

Definition at line 544 of file ArchiveWriter.cpp.

Referenced by getAuxMaxAlignment(), and getMemberAlignment().