[llvm-commits] [llvm] r50880 - in /llvm/trunk/tools/lto2: LTOModule.cpp LTOModule.h
Nick Kledzik
kledzik at apple.com
Fri May 9 11:45:30 PDT 2008
Committed in revision 50908.
-Nick
On May 8, 2008, at 9:47 PM, Tanya Lattner wrote:
> Can you add some doxygen style (///) comments for makeBuffer?
>
> Thanks,
> Tanya
>
> On May 8, 2008, at 6:09 PM, Nick Kledzik wrote:
>
>> Author: kledzik
>> Date: Thu May 8 20:09:59 2008
>> New Revision: 50880
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=50880&view=rev
>> Log:
>> <rdar://problem/5917641> use getMemBufferCopy if supplied buffer is
>> not already zero terminated
>>
>> Modified:
>> llvm/trunk/tools/lto2/LTOModule.cpp
>> llvm/trunk/tools/lto2/LTOModule.h
>>
>> Modified: llvm/trunk/tools/lto2/LTOModule.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto2/LTOModule.cpp?rev=50880&r1=50879&r2=50880&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/tools/lto2/LTOModule.cpp (original)
>> +++ llvm/trunk/tools/lto2/LTOModule.cpp Thu May 8 20:09:59 2008
>> @@ -23,6 +23,7 @@
>> #include "llvm/Support/MemoryBuffer.h"
>> #include "llvm/Support/MathExtras.h"
>> #include "llvm/System/Path.h"
>> +#include "llvm/System/Process.h"
>> #include "llvm/Target/TargetMachine.h"
>> #include "llvm/Target/TargetMachineRegistry.h"
>> #include "llvm/Target/TargetAsmInfo.h"
>> @@ -46,8 +47,7 @@
>> bool LTOModule::isBitcodeFileForTarget(const void* mem, size_t
>> length,
>> const char* triplePrefix)
>> {
>> - MemoryBuffer* buffer = MemoryBuffer::getMemBuffer((char*)mem,
>> - (char*)mem
>> +length);
>> + MemoryBuffer* buffer = makeBuffer(mem, length);
>> if ( buffer == NULL )
>> return false;
>> return isTargetMatch(buffer, triplePrefix);
>> @@ -91,11 +91,26 @@
>> return makeLTOModule(buffer.get(), errMsg);
>> }
>>
>> +
>> +MemoryBuffer* LTOModule::makeBuffer(const void* mem, size_t length)
>> +{
>> + // MemoryBuffer requires the byte past end of the buffer to be a
>> zero.
>> + // We might get lucky and already be that way, otherwise make a
>> copy.
>> + // Also if next byte is on a different page, don't assume it is
>> readable.
>> + const char* startPtr = (char*)mem;
>> + const char* endPtr = startPtr+length;
>> + if ( (((uintptr_t)endPtr & (sys::Process::GetPageSize()-1)) == 0)
>> + || (*endPtr != 0) )
>> + return MemoryBuffer::getMemBufferCopy(startPtr, endPtr);
>> + else
>> + return MemoryBuffer::getMemBuffer(startPtr, endPtr);
>> +}
>> +
>> +
>> LTOModule* LTOModule::makeLTOModule(const void* mem, size_t length,
>>
>> std::string& errMsg)
>> {
>> - OwningPtr<MemoryBuffer>
>> buffer(MemoryBuffer::getMemBuffer((char*)mem,
>> -
>> (char*)mem+length));
>> + OwningPtr<MemoryBuffer> buffer(makeBuffer(mem, length));
>> if ( !buffer )
>> return NULL;
>> return makeLTOModule(buffer.get(), errMsg);
>>
>> Modified: llvm/trunk/tools/lto2/LTOModule.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto2/LTOModule.h?rev=50880&r1=50879&r2=50880&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/tools/lto2/LTOModule.h (original)
>> +++ llvm/trunk/tools/lto2/LTOModule.h Thu May 8 20:09:59 2008
>> @@ -81,6 +81,7 @@
>>
>> static LTOModule* makeLTOModule(llvm::MemoryBuffer* buffer,
>>
>> std::string& errMsg);
>> + static llvm::MemoryBuffer* makeBuffer(const void* mem, size_t
>> length);
>>
>> typedef llvm::StringMap<uint8_t> StringSet;
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list