[PATCH] D28628: [asan] Don't overalign global metadata.

Evgeniy Stepanov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 12 15:37:19 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL291859: [asan] Don't overalign global metadata. (authored by eugenis).

Changed prior to commit:
  https://reviews.llvm.org/D28628?vs=84185&id=84187#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D28628

Files:
  llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll


Index: llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll
===================================================================
--- llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll
+++ llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll
@@ -16,7 +16,7 @@
 
 
 ; Find the metadata for @global:
-; CHECK: [[METADATA:@.+]] = internal global {{.*}} @global {{.*}} section "__DATA,__asan_globals,regular", align 64
+; CHECK: [[METADATA:@.+]] = internal global {{.*}} @global {{.*}} section "__DATA,__asan_globals,regular"
 
 ; Find the liveness binder for @global and its metadata:
 ; CHECK: @__asan_binder_global = internal global {{.*}} @global {{.*}} [[METADATA]] {{.*}} section "__DATA,__asan_liveness,regular,live_support"
Index: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1609,22 +1609,12 @@
 GlobalVariable *
 AddressSanitizerModule::CreateMetadataGlobal(Module &M, Constant *Initializer,
                                              StringRef OriginalName) {
-  auto &DL = M.getDataLayout();
   GlobalVariable *Metadata =
       new GlobalVariable(M, Initializer->getType(), false,
                          GlobalVariable::InternalLinkage, Initializer,
                          Twine("__asan_global_") +
                              GlobalValue::getRealLinkageName(OriginalName));
   Metadata->setSection(getGlobalMetadataSection());
-
-  // We don't want any padding, but we also need a reasonable alignment.
-  // The MSVC linker always inserts padding when linking incrementally. We
-  // cope with that by aligning each struct to its size, which must be a power
-  // of two.
-  unsigned SizeOfGlobalStruct = DL.getTypeAllocSize(Initializer->getType());
-  assert(isPowerOf2_32(SizeOfGlobalStruct) &&
-         "global metadata will not be padded appropriately");
-  Metadata->setAlignment(SizeOfGlobalStruct);
   return Metadata;
 }
 
@@ -1642,11 +1632,22 @@
     IRBuilder<> &IRB, Module &M, ArrayRef<GlobalVariable *> ExtendedGlobals,
     ArrayRef<Constant *> MetadataInitializers) {
   assert(ExtendedGlobals.size() == MetadataInitializers.size());
+  auto &DL = M.getDataLayout();
 
   for (size_t i = 0; i < ExtendedGlobals.size(); i++) {
+    Constant *Initializer = MetadataInitializers[i];
     GlobalVariable *G = ExtendedGlobals[i];
     GlobalVariable *Metadata =
-        CreateMetadataGlobal(M, MetadataInitializers[i], G->getName());
+        CreateMetadataGlobal(M, Initializer, G->getName());
+
+    // The MSVC linker always inserts padding when linking incrementally. We
+    // cope with that by aligning each struct to its size, which must be a power
+    // of two.
+    unsigned SizeOfGlobalStruct = DL.getTypeAllocSize(Initializer->getType());
+    assert(isPowerOf2_32(SizeOfGlobalStruct) &&
+           "global metadata will not be padded appropriately");
+    Metadata->setAlignment(SizeOfGlobalStruct);
+
     SetComdatForGlobalMetadata(G, Metadata);
   }
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28628.84187.patch
Type: text/x-patch
Size: 3196 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170112/ffaacc4f/attachment.bin>


More information about the llvm-commits mailing list