LLVM 20.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
llvm::MemoryBuffer Class Referenceabstract

This interface provides simple read-only access to a block of memory, and provides simple methods for reading files and standard input into a memory buffer. More...

#include "llvm/Support/MemoryBuffer.h"

Inheritance diagram for llvm::MemoryBuffer:
Inheritance graph
[legend]

Public Types

enum  BufferKind { MemoryBuffer_Malloc , MemoryBuffer_MMap }
 The kind of memory backing used to support the MemoryBuffer. More...
 

Public Member Functions

 MemoryBuffer (const MemoryBuffer &)=delete
 
MemoryBufferoperator= (const MemoryBuffer &)=delete
 
virtual ~MemoryBuffer ()
 
const chargetBufferStart () const
 
const chargetBufferEnd () const
 
size_t getBufferSize () const
 
StringRef getBuffer () const
 
virtual StringRef getBufferIdentifier () const
 Return an identifier for this buffer, typically the filename it was read from.
 
virtual void dontNeedIfMmap ()
 For read-only MemoryBuffer_MMap, mark the buffer as unused in the near future and the kernel can free resources associated with it.
 
virtual BufferKind getBufferKind () const =0
 Return information on the memory mechanism used to support the MemoryBuffer.
 
MemoryBufferRef getMemBufferRef () const
 

Static Public Member Functions

static ErrorOr< std::unique_ptr< MemoryBuffer > > getFile (const Twine &Filename, bool IsText=false, bool RequiresNullTerminator=true, bool IsVolatile=false, std::optional< Align > Alignment=std::nullopt)
 Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful, otherwise returning null.
 
static ErrorOr< std::unique_ptr< MemoryBuffer > > getFileAsStream (const Twine &Filename)
 Read all of the specified file into a MemoryBuffer as a stream (i.e.
 
static ErrorOr< std::unique_ptr< MemoryBuffer > > getOpenFileSlice (sys::fs::file_t FD, const Twine &Filename, uint64_t MapSize, int64_t Offset, bool IsVolatile=false, std::optional< Align > Alignment=std::nullopt)
 Given an already-open file descriptor, map some slice of it into a MemoryBuffer.
 
static ErrorOr< std::unique_ptr< MemoryBuffer > > getOpenFile (sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize, bool RequiresNullTerminator=true, bool IsVolatile=false, std::optional< Align > Alignment=std::nullopt)
 Given an already-open file descriptor, read the file and return a MemoryBuffer.
 
static std::unique_ptr< MemoryBuffergetMemBuffer (StringRef InputData, StringRef BufferName="", bool RequiresNullTerminator=true)
 Open the specified memory range as a MemoryBuffer.
 
static std::unique_ptr< MemoryBuffergetMemBuffer (MemoryBufferRef Ref, bool RequiresNullTerminator=true)
 
static std::unique_ptr< MemoryBuffergetMemBufferCopy (StringRef InputData, const Twine &BufferName="")
 Open the specified memory range as a MemoryBuffer, copying the contents and taking ownership of it.
 
static ErrorOr< std::unique_ptr< MemoryBuffer > > getSTDIN ()
 Read all of stdin into a file buffer, and return it.
 
static ErrorOr< std::unique_ptr< MemoryBuffer > > getFileOrSTDIN (const Twine &Filename, bool IsText=false, bool RequiresNullTerminator=true, std::optional< Align > Alignment=std::nullopt)
 Open the specified file as a MemoryBuffer, or open stdin if the Filename is "-".
 
static ErrorOr< std::unique_ptr< MemoryBuffer > > getFileSlice (const Twine &Filename, uint64_t MapSize, uint64_t Offset, bool IsVolatile=false, std::optional< Align > Alignment=std::nullopt)
 Map a subrange of the specified file as a MemoryBuffer.
 

Protected Member Functions

 MemoryBuffer ()=default
 
void init (const char *BufStart, const char *BufEnd, bool RequiresNullTerminator)
 init - Initialize this MemoryBuffer as a reference to externally allocated memory, memory that we know is already null terminated.
 

Detailed Description

This interface provides simple read-only access to a block of memory, and provides simple methods for reading files and standard input into a memory buffer.

In addition to basic access to the characters in the file, this interface guarantees you can read one character past the end of the file, and that this character will read as '\0'.

The '\0' guarantee is needed to support an optimization – it's intended to be more efficient for clients which are reading all the data to stop reading when they encounter a '\0' than to continually check the file position to see if it has reached the end of the file.

Definition at line 51 of file MemoryBuffer.h.

Member Enumeration Documentation

◆ BufferKind

The kind of memory backing used to support the MemoryBuffer.

Enumerator
MemoryBuffer_Malloc 
MemoryBuffer_MMap 

Definition at line 165 of file MemoryBuffer.h.

Constructor & Destructor Documentation

◆ MemoryBuffer() [1/2]

llvm::MemoryBuffer::MemoryBuffer ( )
protecteddefault

◆ MemoryBuffer() [2/2]

llvm::MemoryBuffer::MemoryBuffer ( const MemoryBuffer )
delete

◆ ~MemoryBuffer()

MemoryBuffer::~MemoryBuffer ( )
virtualdefault

Member Function Documentation

◆ dontNeedIfMmap()

virtual void llvm::MemoryBuffer::dontNeedIfMmap ( )
inlinevirtual

For read-only MemoryBuffer_MMap, mark the buffer as unused in the near future and the kernel can free resources associated with it.

Further access is supported but may be expensive. This calls madvise(MADV_DONTNEED) on read-only file mappings on *NIX systems. This function should not be called on a writable buffer.

Definition at line 83 of file MemoryBuffer.h.

◆ getBuffer()

StringRef llvm::MemoryBuffer::getBuffer ( ) const
inline

◆ getBufferEnd()

const char * llvm::MemoryBuffer::getBufferEnd ( ) const
inline

◆ getBufferIdentifier()

virtual StringRef llvm::MemoryBuffer::getBufferIdentifier ( ) const
inlinevirtual

◆ getBufferKind()

virtual BufferKind llvm::MemoryBuffer::getBufferKind ( ) const
pure virtual

Return information on the memory mechanism used to support the MemoryBuffer.

Implemented in llvm::SmallVectorMemoryBuffer.

◆ getBufferSize()

size_t llvm::MemoryBuffer::getBufferSize ( ) const
inline

◆ getBufferStart()

const char * llvm::MemoryBuffer::getBufferStart ( ) const
inline

◆ getFile()

ErrorOr< std::unique_ptr< MemoryBuffer > > MemoryBuffer::getFile ( const Twine Filename,
bool  IsText = false,
bool  RequiresNullTerminator = true,
bool  IsVolatile = false,
std::optional< Align Alignment = std::nullopt 
)
static

Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful, otherwise returning null.

Parameters
IsTextSet to true to indicate that the file should be read in text mode.
IsVolatileSet to true to indicate that the contents of the file can change outside the user's control, e.g. when libclang tries to parse while the user is editing/updating the file or if the file is on an NFS.
AlignmentSet to indicate that the buffer should be aligned to at least the specified alignment.

Definition at line 261 of file MemoryBuffer.cpp.

Referenced by llvm::MachO::DylibReader::accumulateSourceLocFromDSYM(), llvm::LTOCodeGenerator::compileOptimized(), llvm::computeLTOCacheKey(), llvm::orc::COFFPlatform::Create(), llvm::LTOModule::createFromFile(), llvm::objcopy::coff::createGnuDebugLinkSectionContents(), llvm::object::ObjectFile::createObjectFile(), llvm::remarks::createYAMLParserFromMeta(), llvm::DiffFilesWithTolerance(), doList(), llvm::doSystemDiff(), llvm::findVCToolChainViaSetupConfig(), llvm::InstrProfCorrelator::get(), llvm::codegen::getBBSectionsMode(), llvm::object::Archive::Child::getBuffer(), getFileOrSTDIN(), llvm::getHeaders(), llvm::unittest::getInputFileDirectory(), llvm::identify_magic(), llvm::LTOModule::isBitcodeFile(), llvm::libDriverMain(), LLVMCreateMemoryBufferWithContentsOfFile(), llvm::orc::loadMachORelocatableObject(), llvm::OpenMPIRBuilder::loadOffloadInfoMetadata(), loadPdbFile(), llvm::orc::loadRelocatableObject(), llvm::MemProfContextDisambiguation::MemProfContextDisambiguation(), llvm::pdb::InputFile::open(), openFile(), llvm::SourceMgr::OpenIncludeFile(), llvm::orc::ExecutorNativePlatform::operator()(), llvm::SymbolRewriter::RewriteMapParser::parse(), parseCHRFilterFiles(), printSymbolizedStackTrace(), llvm::CtxProfAnalysis::run(), llvm::runFuzzerOnInputs(), llvm::TableGenMain(), llvm::lto::thinBackend(), and llvm::ifs::writeELFBinaryToFile().

◆ getFileAsStream()

ErrorOr< std::unique_ptr< MemoryBuffer > > MemoryBuffer::getFileAsStream ( const Twine Filename)
static

Read all of the specified file into a MemoryBuffer as a stream (i.e.

until EOF reached). This is useful for special files that look like a regular file but have 0 size (e.g. /proc/cpuinfo on Linux).

Definition at line 566 of file MemoryBuffer.cpp.

References llvm::sys::fs::closeFile(), llvm::errorToErrorCode(), getMemoryBufferForStream(), llvm::sys::fs::OF_None, llvm::sys::fs::openNativeFileForRead(), and llvm::Expected< T >::takeError().

Referenced by getProcCpuinfoContent().

◆ getFileOrSTDIN()

ErrorOr< std::unique_ptr< MemoryBuffer > > MemoryBuffer::getFileOrSTDIN ( const Twine Filename,
bool  IsText = false,
bool  RequiresNullTerminator = true,
std::optional< Align Alignment = std::nullopt 
)
static

◆ getFileSlice()

ErrorOr< std::unique_ptr< MemoryBuffer > > MemoryBuffer::getFileSlice ( const Twine Filename,
uint64_t  MapSize,
uint64_t  Offset,
bool  IsVolatile = false,
std::optional< Align Alignment = std::nullopt 
)
static

Map a subrange of the specified file as a MemoryBuffer.

Definition at line 177 of file MemoryBuffer.cpp.

References llvm::Offset.

Referenced by llvm::orc::StaticLibraryDefinitionGenerator::Load(), and llvm::orc::loadMachORelocatableObjectFromUniversalBinary().

◆ getMemBuffer() [1/2]

std::unique_ptr< MemoryBuffer > MemoryBuffer::getMemBuffer ( MemoryBufferRef  Ref,
bool  RequiresNullTerminator = true 
)
static

Definition at line 138 of file MemoryBuffer.cpp.

References getMemBuffer(), and llvm::Ref.

◆ getMemBuffer() [2/2]

std::unique_ptr< MemoryBuffer > MemoryBuffer::getMemBuffer ( StringRef  InputData,
StringRef  BufferName = "",
bool  RequiresNullTerminator = true 
)
static

◆ getMemBufferCopy()

std::unique_ptr< MemoryBuffer > MemoryBuffer::getMemBufferCopy ( StringRef  InputData,
const Twine BufferName = "" 
)
static

◆ getMemBufferRef()

MemoryBufferRef MemoryBuffer::getMemBufferRef ( ) const

◆ getOpenFile()

ErrorOr< std::unique_ptr< MemoryBuffer > > MemoryBuffer::getOpenFile ( sys::fs::file_t  FD,
const Twine Filename,
uint64_t  FileSize,
bool  RequiresNullTerminator = true,
bool  IsVolatile = false,
std::optional< Align Alignment = std::nullopt 
)
static

Given an already-open file descriptor, read the file and return a MemoryBuffer.

Parameters
IsVolatileSet to true to indicate that the contents of the file can change outside the user's control, e.g. when libclang tries to parse while the user is editing/updating the file or if the file is on an NFS.
AlignmentSet to indicate that the buffer should be aligned to at least the specified alignment.

Definition at line 539 of file MemoryBuffer.cpp.

Referenced by llvm::NewArchiveMember::getFile(), llvm::localCache(), and llvm::streamFile().

◆ getOpenFileSlice()

ErrorOr< std::unique_ptr< MemoryBuffer > > MemoryBuffer::getOpenFileSlice ( sys::fs::file_t  FD,
const Twine Filename,
uint64_t  MapSize,
int64_t  Offset,
bool  IsVolatile = false,
std::optional< Align Alignment = std::nullopt 
)
static

Given an already-open file descriptor, map some slice of it into a MemoryBuffer.

The slice is specified by an Offset and MapSize. Since this is in the middle of a file, the buffer is not null terminated.

Definition at line 547 of file MemoryBuffer.cpp.

References assert(), and llvm::Offset.

Referenced by llvm::LTOModule::createFromOpenFileSlice().

◆ getSTDIN()

ErrorOr< std::unique_ptr< MemoryBuffer > > MemoryBuffer::getSTDIN ( )
static

◆ init()

void MemoryBuffer::init ( const char BufStart,
const char BufEnd,
bool  RequiresNullTerminator 
)
protected

init - Initialize this MemoryBuffer as a reference to externally allocated memory, memory that we know is already null terminated.

Definition at line 51 of file MemoryBuffer.cpp.

References assert().

Referenced by llvm::SmallVectorMemoryBuffer::SmallVectorMemoryBuffer().

◆ operator=()

MemoryBuffer & llvm::MemoryBuffer::operator= ( const MemoryBuffer )
delete

The documentation for this class was generated from the following files: