mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-21 21:11:36 +00:00
Create a constant pool symbol for the GOT in the ARMCGBR the same way we
do in the SDag when lowering references to the GOT: use ARMConstantPoolSymbol rather than creating a dummy global variable. The computation of the alignment still feels weird (it uses IR types and datalayout) but it preserves the exact previous behavior. This change fixes the memory leak of the global variable detected on the valgrind leak checking bot. Thanks to Benjamin Kramer for pointing me at ARMConstantPoolSymbol to handle this use case. llvm-svn: 187303
This commit is contained in:
parent
36e7c40816
commit
4602399982
@ -106,13 +106,14 @@ namespace {
|
||||
if (TM->getRelocationModel() != Reloc::PIC_)
|
||||
return false;
|
||||
|
||||
LLVMContext* Context = &MF.getFunction()->getContext();
|
||||
GlobalValue *GV = new GlobalVariable(Type::getInt32Ty(*Context), false,
|
||||
GlobalValue::ExternalLinkage, 0,
|
||||
"_GLOBAL_OFFSET_TABLE_");
|
||||
unsigned Id = AFI->createPICLabelUId();
|
||||
ARMConstantPoolValue *CPV = ARMConstantPoolConstant::Create(GV, Id);
|
||||
unsigned Align = TM->getDataLayout()->getPrefTypeAlignment(GV->getType());
|
||||
LLVMContext *Context = &MF.getFunction()->getContext();
|
||||
unsigned ARMPCLabelIndex = AFI->createPICLabelUId();
|
||||
unsigned PCAdj = TM->getSubtarget<ARMSubtarget>().isThumb() ? 4 : 8;
|
||||
ARMConstantPoolValue *CPV = ARMConstantPoolSymbol::Create(
|
||||
*Context, "_GLOBAL_OFFSET_TABLE_", ARMPCLabelIndex, PCAdj);
|
||||
|
||||
unsigned Align = TM->getDataLayout()
|
||||
->getPrefTypeAlignment(Type::getInt32PtrTy(*Context));
|
||||
unsigned Idx = MF.getConstantPool()->getConstantPoolIndex(CPV, Align);
|
||||
|
||||
MachineBasicBlock &FirstMBB = MF.front();
|
||||
|
Loading…
x
Reference in New Issue
Block a user