diff options
Diffstat (limited to 'llvm/lib/IR/Globals.cpp')
| -rw-r--r-- | llvm/lib/IR/Globals.cpp | 44 |
1 files changed, 1 insertions, 43 deletions
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp index a61b62bd968..6159f93faf8 100644 --- a/llvm/lib/IR/Globals.cpp +++ b/llvm/lib/IR/Globals.cpp @@ -12,12 +12,11 @@ // //===----------------------------------------------------------------------===// +#include "llvm/IR/GlobalValue.h" #include "llvm/ADT/SmallPtrSet.h" -#include "llvm/ADT/Triple.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/GlobalAlias.h" -#include "llvm/IR/GlobalValue.h" #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/Module.h" #include "llvm/IR/Operator.h" @@ -135,47 +134,6 @@ bool GlobalValue::isDeclaration() const { return false; } -bool GlobalValue::canIncreaseAlignment() const { - // Firstly, can only increase the alignment of a global if it - // is a strong definition. - if (!isStrongDefinitionForLinker()) - return false; - - // It also has to either not have a section defined, or, not have - // alignment specified. (If it is assigned a section, the global - // could be densely packed with other objects in the section, and - // increasing the alignment could cause padding issues.) - if (hasSection() && getAlignment() > 0) - return false; - - // On ELF platforms, we're further restricted in that we can't - // increase the alignment of any variable which might be emitted - // into a shared library, and which is exported. If the main - // executable accesses a variable found in a shared-lib, the main - // exe actually allocates memory for and exports the symbol ITSELF, - // overriding the symbol found in the library. That is, at link - // time, the observed alignment of the variable is copied into the - // executable binary. (A COPY relocation is also generated, to copy - // the initial data from the shadowed variable in the shared-lib - // into the location in the main binary, before running code.) - // - // And thus, even though you might think you are defining the - // global, and allocating the memory for the global in your object - // file, and thus should be able to set the alignment arbitrarily, - // that's not actually true. Doing so can cause an ABI breakage; an - // executable might have already been built with the previous - // alignment of the variable, and then assuming an increased - // alignment will be incorrect. - - // Conservatively assume ELF if there's no parent pointer. - bool isELF = - (!Parent || Triple(Parent->getTargetTriple()).isOSBinFormatELF()); - if (isELF && hasDefaultVisibility() && !hasLocalLinkage()) - return false; - - return true; -} - //===----------------------------------------------------------------------===// // GlobalVariable Implementation //===----------------------------------------------------------------------===// |

