[llvm-commits] [lld] r149426 - in /lld/trunk/lib/Core: NativeFileFormat.h NativeReader.cpp NativeWriter.cpp
Eli Friedman
eli.friedman at gmail.com
Tue Jan 31 14:04:17 PST 2012
On Tue, Jan 31, 2012 at 1:45 PM, Michael J. Spencer
<bigcheesegs at gmail.com> wrote:
> Author: mspencer
> Date: Tue Jan 31 15:45:53 2012
> New Revision: 149426
>
> URL: http://llvm.org/viewvc/llvm-project?rev=149426&view=rev
> Log:
> Flexible array members are not in C++03, and MSVC doesn't support them.
>
> Modified:
> lld/trunk/lib/Core/NativeFileFormat.h
> lld/trunk/lib/Core/NativeReader.cpp
> lld/trunk/lib/Core/NativeWriter.cpp
>
> Modified: lld/trunk/lib/Core/NativeFileFormat.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/NativeFileFormat.h?rev=149426&r1=149425&r2=149426&view=diff
> ==============================================================================
> --- lld/trunk/lib/Core/NativeFileFormat.h (original)
> +++ lld/trunk/lib/Core/NativeFileFormat.h Tue Jan 31 15:45:53 2012
> @@ -80,7 +80,6 @@
> uint32_t architecture;
> uint32_t fileSize;
> uint32_t chunkCount;
> - NativeChunk chunks[];
> };
This isn't obviously safe: the presence of the flexible array might
change the tail padding.
-Eli
> //
>
> Modified: lld/trunk/lib/Core/NativeReader.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/NativeReader.cpp?rev=149426&r1=149425&r2=149426&view=diff
> ==============================================================================
> --- lld/trunk/lib/Core/NativeReader.cpp (original)
> +++ lld/trunk/lib/Core/NativeReader.cpp Tue Jan 31 15:45:53 2012
> @@ -175,6 +175,8 @@
> reinterpret_cast<const uint8_t*>(mb->getBufferStart());
> const NativeFileHeader* const header =
> reinterpret_cast<const NativeFileHeader*>(base);
> + const NativeChunk *const chunks =
> + reinterpret_cast<const NativeChunk*>(base + sizeof(NativeFileHeader));
> // make sure magic matches
> if ( memcmp(header->magic, NATIVE_FILE_HEADER_MAGIC, 16) != 0 )
> return make_error_code(unknown_file_format);
> @@ -190,7 +192,7 @@
> // process each chunk
> for(uint32_t i=0; i < header->chunkCount; ++i) {
> llvm::error_code ec;
> - const NativeChunk* chunk = &header->chunks[i];
> + const NativeChunk* chunk = &chunks[i];
> // sanity check chunk is within file
> if ( chunk->fileOffset > fileSize )
> return make_error_code(file_malformed);
>
> Modified: lld/trunk/lib/Core/NativeWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/NativeWriter.cpp?rev=149426&r1=149425&r2=149426&view=diff
> ==============================================================================
> --- lld/trunk/lib/Core/NativeWriter.cpp (original)
> +++ lld/trunk/lib/Core/NativeWriter.cpp Tue Jan 31 15:45:53 2012
> @@ -71,6 +71,9 @@
> _headerBufferSize = sizeof(NativeFileHeader) + 4*sizeof(NativeChunk);
> _headerBuffer = reinterpret_cast<NativeFileHeader*>
> (operator new(_headerBufferSize, std::nothrow));
> + NativeChunk *chunks =
> + reinterpret_cast<NativeChunk*>(reinterpret_cast<char*>(_headerBuffer)
> + + sizeof(NativeFileHeader));
> memcpy(_headerBuffer->magic, NATIVE_FILE_HEADER_MAGIC, 16);
> _headerBuffer->endian = NFH_LittleEndian;
> _headerBuffer->architecture = 0;
> @@ -78,25 +81,25 @@
> _headerBuffer->chunkCount = 4;
>
> // create chunk for atom ivar array
> - NativeChunk& ch0 = _headerBuffer->chunks[0];
> + NativeChunk& ch0 = chunks[0];
> ch0.signature = NCS_DefinedAtomsV1;
> ch0.fileOffset = _headerBufferSize;
> ch0.fileSize = _definedAtomIvars.size()*sizeof(NativeDefinedAtomIvarsV1);
> ch0.elementCount = _definedAtomIvars.size();
> - // create chunk for attributes
> - NativeChunk& ch1 = _headerBuffer->chunks[1];
> + // create chunk for attributes
> + NativeChunk& ch1 = chunks[1];
> ch1.signature = NCS_AttributesArrayV1;
> ch1.fileOffset = ch0.fileOffset + ch0.fileSize;
> ch1.fileSize = _attributes.size()*sizeof(NativeAtomAttributesV1);
> ch1.elementCount = _attributes.size();
> - // create chunk for content
> - NativeChunk& ch2 = _headerBuffer->chunks[2];
> + // create chunk for content
> + NativeChunk& ch2 = chunks[2];
> ch2.signature = NCS_Content;
> ch2.fileOffset = ch1.fileOffset + ch1.fileSize;
> ch2.fileSize = _contentPool.size();
> ch2.elementCount = _contentPool.size();
> // create chunk for symbol strings
> - NativeChunk& ch3 = _headerBuffer->chunks[3];
> + NativeChunk& ch3 = chunks[3];
> ch3.signature = NCS_Strings;
> ch3.fileOffset = ch2.fileOffset + ch2.fileSize;
> ch3.fileSize = _stringPool.size();
>
>
> _______________________________________________
> 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