mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 05:22:04 +00:00
fix PR6921 a different way. Intead of increasing the
alignment of globals with a specified alignment, we fix common variables to obey their alignment. Add a comment explaining why this behavior is important. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102365 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -228,7 +228,15 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
|
||||
|
||||
const TargetData *TD = TM.getTargetData();
|
||||
unsigned Size = TD->getTypeAllocSize(GV->getType()->getElementType());
|
||||
unsigned AlignLog = TD->getPreferredAlignmentLog(GV);
|
||||
|
||||
// If the alignment is specified, we *must* obey it. Overaligning a global
|
||||
// with a specified alignment is a prompt way to break globals emitted to
|
||||
// sections and expected to be contiguous (e.g. ObjC metadata).
|
||||
unsigned AlignLog;
|
||||
if (unsigned GVAlign = GV->getAlignment())
|
||||
AlignLog = Log2_32(GVAlign);
|
||||
else
|
||||
AlignLog = TD->getPreferredAlignmentLog(GV);
|
||||
|
||||
// Handle common and BSS local symbols (.lcomm).
|
||||
if (GVKind.isCommon() || GVKind.isBSSLocal()) {
|
||||
|
||||
Reference in New Issue
Block a user