Updates:
        Cc: [email protected]

Comment #6 on issue 3645 by [email protected]: MSan vs. Serializer: Fight!
https://code.google.com/p/v8/issues/detail?id=3645

CC'ing eugenis@ as requested.

Repro: try to compile MSan-Chrome in Debug mode, or at least the d8 target:
$ export GYP_DEFINES="msan=1 and_any_other_flags_you_like=1"
$ build/gyp_chromium
$ ninja -C out/Debug d8
The build will fail during the "mksnapshot" step.

For your convenience, this is the report:
==23352== WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x7f6cedf7c90a in v8::internal::SnapshotByteSink::PutSection(int, char const*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/snapshot-source-sink.h:76:5 #1 0x7f6cf0e73a6f in v8::internal::Serializer::ObjectSerializer::OutputRawData(unsigned char*, v8::internal::Serializer::ObjectSerializer::ReturnSkip) /usr/local/google/home/jkummerow/chrome/sr
c/out/Debug/../../v8/src/serialize.cc:1844:7
#2 0x7f6cf0e61b30 in v8::internal::Serializer::ObjectSerializer::Serialize() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1627:3 #3 0x7f6cf0e5e76c in v8::internal::StartupSerializer::SerializeObject(v8::internal::Object*, v8::internal::SerializerDeserializer::HowToCode, v8::internal::SerializerDeserializer::WhereToPoint, int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1411:5 #4 0x7f6cf0e761cf in v8::internal::Serializer::ObjectSerializer::VisitPointers(v8::internal::Object**, v8::internal::Object**) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src
/serialize.cc:1663:9
#5 0x7f6cf04c71b7 in v8::internal::FixedBodyDescriptor<8, 24, 32>::IterateBody(v8::internal::HeapObject*, v8::internal::ObjectVisitor*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../
../v8/src/objects-inl.h:7217:5
#6 0x7f6cf04c3b8f in v8::internal::HeapObject::IterateBody(v8::internal::InstanceType, int, v8::internal::ObjectVisitor*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/obje
cts.cc:1604:7
#7 0x7f6cf0e619ce in v8::internal::Serializer::ObjectSerializer::Serialize() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1626:3 #8 0x7f6cf0e5e76c in v8::internal::StartupSerializer::SerializeObject(v8::internal::Object*, v8::internal::SerializerDeserializer::HowToCode, v8::internal::SerializerDeserializer::WhereToPoint, int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1411:5 #9 0x7f6cf0e761cf in v8::internal::Serializer::ObjectSerializer::VisitPointers(v8::internal::Object**, v8::internal::Object**) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src
/serialize.cc:1663:9
#10 0x7f6cf04c8297 in v8::internal::FixedBodyDescriptor<24, 72, 72>::IterateBody(v8::internal::HeapObject*, v8::internal::ObjectVisitor*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/.
./../v8/src/objects-inl.h:7217:5
#11 0x7f6cf04c3d23 in v8::internal::HeapObject::IterateBody(v8::internal::InstanceType, int, v8::internal::ObjectVisitor*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/obj
ects.cc:1616:7
#12 0x7f6cf0e619ce in v8::internal::Serializer::ObjectSerializer::Serialize() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1626:3 #13 0x7f6cf0e5e76c in v8::internal::StartupSerializer::SerializeObject(v8::internal::Object*, v8::internal::SerializerDeserializer::HowToCode, v8::internal::SerializerDeserializer::WhereToPoint , int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1411:5 #14 0x7f6cf0e670b0 in v8::internal::Serializer::ObjectSerializer::SerializePrologue(int, int, v8::internal::Map*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc
:1548:3
#15 0x7f6cf0e6171f in v8::internal::Serializer::ObjectSerializer::Serialize() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1620:3 #16 0x7f6cf0e5e76c in v8::internal::StartupSerializer::SerializeObject(v8::internal::Object*, v8::internal::SerializerDeserializer::HowToCode, v8::internal::SerializerDeserializer::WhereToPoint , int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1411:5 #17 0x7f6cf0e761cf in v8::internal::Serializer::ObjectSerializer::VisitPointers(v8::internal::Object**, v8::internal::Object**) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/sr
c/serialize.cc:1663:9
#18 0x7f6cf04c8297 in v8::internal::FixedBodyDescriptor<24, 72, 72>::IterateBody(v8::internal::HeapObject*, v8::internal::ObjectVisitor*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/.
./../v8/src/objects-inl.h:7217:5
#19 0x7f6cf04c3d23 in v8::internal::HeapObject::IterateBody(v8::internal::InstanceType, int, v8::internal::ObjectVisitor*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/obj
ects.cc:1616:7
#20 0x7f6cf0e619ce in v8::internal::Serializer::ObjectSerializer::Serialize() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1626:3 #21 0x7f6cf0e5e76c in v8::internal::StartupSerializer::SerializeObject(v8::internal::Object*, v8::internal::SerializerDeserializer::HowToCode, v8::internal::SerializerDeserializer::WhereToPoint , int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1411:5 #22 0x7f6cf0e670b0 in v8::internal::Serializer::ObjectSerializer::SerializePrologue(int, int, v8::internal::Map*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1548:3 #23 0x7f6cf0e6171f in v8::internal::Serializer::ObjectSerializer::Serialize() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1620:3 #24 0x7f6cf0e5e76c in v8::internal::StartupSerializer::SerializeObject(v8::internal::Object*, v8::internal::SerializerDeserializer::HowToCode, v8::internal::SerializerDeserializer::WhereToPoint, int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1411:5 #25 0x7f6cf0e58951 in v8::internal::Serializer::VisitPointers(v8::internal::Object**, v8::internal::Object**) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1280:7 #26 0x7f6cef33f0ee in v8::internal::Heap::IterateStrongRoots(v8::internal::ObjectVisitor*, v8::internal::VisitMode) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/heap/heap.cc:4787:3 #27 0x7f6cf0e5605d in v8::internal::StartupSerializer::SerializeStrongReferences() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/serialize.cc:1245:3 #28 0x7f6cedf6230c in main /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/mksnapshot.cc:411:5 #29 0x7f6ce8a55ec4 in __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:287 #30 0x7f6cedf02763 in _start (/usr/local/google/home/jkummerow/chrome/src/out/Debug/mksnapshot+0xc3763)

  Uninitialized value was created by a heap allocation
#0 0x7f6cedf0d049 in __msan_allocated_memory (/usr/local/google/home/jkummerow/chrome/src/out/Debug/mksnapshot+0xce049) #1 0x7f6ceef329e8 in v8::internal::PagedSpace::AllocateRaw(int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/heap/spaces-inl.h:262:5 #2 0x7f6ceef2e8e4 in v8::internal::Heap::AllocateRaw(int, v8::internal::AllocationSpace, v8::internal::AllocationSpace) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/heap/heap-inl.h:197:18 #3 0x7f6ceedfdc2e in v8::internal::Heap::AllocateOneByteInternalizedString(v8::internal::Vector<unsigned char const>, unsigned int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/heap/heap-inl.h:97:35 #4 0x7f6ceedfa9d7 in v8::internal::Heap::AllocateInternalizedStringFromUtf8(v8::internal::Vector<char const>, int, unsigned int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/heap/heap-inl.h:69:12 #5 0x7f6ceedf8594 in v8::internal::Factory::NewInternalizedStringFromUtf8(v8::internal::Vector<char const>, int, unsigned int) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/factory.cc:293:3 #6 0x7f6ceef3fa02 in v8::internal::Utf8StringKey::AsHandle(v8::internal::Isolate*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/objects-inl.h:608:12 #7 0x7f6cf079cdbd in v8::internal::StringTable::LookupKey(v8::internal::Isolate*, v8::internal::HashTableKey*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/objects.cc:14776:27 #8 0x7f6ceede1460 in v8::internal::Handle<v8::internal::String> v8::internal::Factory::InternalizeStringWithKey<v8::internal::Utf8StringKey>(v8::internal::Utf8StringKey*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/factory.cc:203:10 #9 0x7f6ceede09cd in v8::internal::Factory::InternalizeUtf8String(v8::internal::Vector<char const>) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/factory.cc:171:10 #10 0x7f6cee1c7351 in v8::internal::Factory::InternalizeUtf8String(char const*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/factory.h:70:12 #11 0x7f6cf06a3deb in v8::internal::Oddball::Initialize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Oddball>, char const*, v8::internal::Handle<v8::internal::Object>, unsigned char) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/objects.cc:9615:7 #12 0x7f6cef2e35fd in v8::internal::Heap::CreateInitialObjects() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/heap/heap.cc:2791:3 #13 0x7f6cef351206 in v8::internal::Heap::CreateHeapObjects() /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/heap/heap.cc:5201:3 #14 0x7f6ceff33a8b in v8::internal::Isolate::Init(v8::internal::Deserializer*) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/isolate.cc:1899:31 #15 0x7f6cee1a3034 in v8::Isolate::New(v8::Isolate::CreateParams const&) /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/api.cc:6610:5 #16 0x7f6cedf5fb7d in main /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/mksnapshot.cc:337:22 #17 0x7f6ce8a55ec4 in __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:287

SUMMARY: MemorySanitizer: use-of-uninitialized-value /usr/local/google/home/jkummerow/chrome/src/out/Debug/../../v8/src/snapshot-source-sink.h:76 v8::internal::SnapshotByteSink::PutSection(int, char const*)
Exiting


re "Does this scenario actually come up in any non-trivial testing?": Snapshotting is part of the regular build process, so this issue prevents building V8 (or, as a consequence, Chrome) in Debug mode with MSan enabled.

Losing origins would be acceptable, I think, and it's nice to know that MSan already supports the most important things in its API. That means the hardest part would be extending V8's snapshotting infrastructure to handle the additional metadata. The code would have to be ifdeffed, and would probably be ugly.

--
You received this message because this project is configured to send all issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to