[lld-macho] Try to fix MSAN "uninitialized memory" error
authorJez Ng <jezng@fb.com>
Mon, 14 Jun 2021 03:30:33 +0000 (23:30 -0400)
committerJez Ng <jezng@fb.com>
Mon, 14 Jun 2021 03:47:09 +0000 (23:47 -0400)
I *think* this is the fix, with the regression being introduced by
D104199. Not 100% sure since MSAN isn't supported on my Mac machine, and
it'll take some time to spin up a Linux box... will look at the
buildbots for answers

lld/MachO/Writer.cpp

index ebb2a5e..c620d84 100644 (file)
@@ -1074,10 +1074,11 @@ void macho::createSyntheticSections() {
 
   // This section contains space for just a single word, and will be used by
   // dyld to cache an address to the image loader it uses.
-  ArrayRef<uint8_t> data{bAlloc.Allocate<uint8_t>(target->wordSize),
-                         target->wordSize};
+  uint8_t *arr = bAlloc.Allocate<uint8_t>(target->wordSize);
+  memset(arr, 0, target->wordSize);
   in.imageLoaderCache = make<ConcatInputSection>(
-      segment_names::data, section_names::data, /*file=*/nullptr, data,
+      segment_names::data, section_names::data, /*file=*/nullptr,
+      ArrayRef<uint8_t>{arr, target->wordSize},
       /*align=*/target->wordSize, /*flags=*/S_REGULAR);
   // References from dyld are not visible to us, so ensure this section is
   // always treated as live.