Hopefully a good crack at making debugging work on intel -disable-fp-elim.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31830 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Laskey 2006-11-17 21:19:15 +00:00
parent 7d689e8b62
commit 9dea41d9e1
3 changed files with 22 additions and 3 deletions

View File

@ -112,6 +112,14 @@ class MachineFrameInfo {
/// ///
unsigned StackSize; unsigned StackSize;
/// OffsetAdjustment - The amount that a frame offset needs to be adjusted to
/// have the actual offset from the stack/frame pointer. The calculation is
/// MFI->getObjectOffset(Index) + StackSize - TFI.getOffsetOfLocalArea() +
/// OffsetAdjustment. If OffsetAdjustment is zero (default) then offsets are
/// away from TOS. If OffsetAdjustment == StackSize then offsets are toward
/// TOS.
int OffsetAdjustment;
/// MaxAlignment - The prolog/epilog code inserter may process objects /// MaxAlignment - The prolog/epilog code inserter may process objects
/// that require greater alignment than the default alignment the target /// that require greater alignment than the default alignment the target
/// provides. To handle this, MaxAlignment is set to the maximum alignment /// provides. To handle this, MaxAlignment is set to the maximum alignment
@ -148,7 +156,7 @@ class MachineFrameInfo {
public: public:
MachineFrameInfo() { MachineFrameInfo() {
NumFixedObjects = StackSize = MaxAlignment = 0; NumFixedObjects = StackSize = OffsetAdjustment = MaxAlignment = 0;
HasVarSizedObjects = false; HasVarSizedObjects = false;
HasCalls = false; HasCalls = false;
MaxCallFrameSize = 0; MaxCallFrameSize = 0;
@ -212,6 +220,14 @@ public:
/// setStackSize - Set the size of the stack... /// setStackSize - Set the size of the stack...
/// ///
void setStackSize(unsigned Size) { StackSize = Size; } void setStackSize(unsigned Size) { StackSize = Size; }
/// getOffsetAdjustment - Return the correction for frame offsets.
///
int getOffsetAdjustment() const { return OffsetAdjustment; }
/// setOffsetAdjustment - Set the correction for frame offsets.
///
void setOffsetAdjustment(int Adj) { OffsetAdjustment = Adj; }
/// getMaxAlignment - Return the alignment in bytes that this function must be /// getMaxAlignment - Return the alignment in bytes that this function must be
/// aligned to, which is greater than the default stack alignment provided by /// aligned to, which is greater than the default stack alignment provided by

View File

@ -57,7 +57,8 @@ void MRegisterInfo::getLocation(MachineFunction &MF, unsigned Index,
ML.set(getFrameRegister(MF), ML.set(getFrameRegister(MF),
MFI->getObjectOffset(Index) + MFI->getObjectOffset(Index) +
MFI->getStackSize() - MFI->getStackSize() -
TFI.getOffsetOfLocalArea()); TFI.getOffsetOfLocalArea() +
MFI->getOffsetAdjustment());
} }
/// getInitialFrameState - Returns a list of machine moves that are assumed /// getInitialFrameState - Returns a list of machine moves that are assumed

View File

@ -1029,7 +1029,9 @@ void X86RegisterInfo::emitPrologue(MachineFunction &MF) const {
// Get the offset of the stack slot for the EBP register... which is // Get the offset of the stack slot for the EBP register... which is
// guaranteed to be the last slot by processFunctionBeforeFrameFinalized. // guaranteed to be the last slot by processFunctionBeforeFrameFinalized.
int EBPOffset = MFI->getObjectOffset(MFI->getObjectIndexBegin())+SlotSize; int EBPOffset = MFI->getObjectOffset(MFI->getObjectIndexBegin())+SlotSize;
// Update the frame offset adjustment.
MFI->setOffsetAdjustment(SlotSize-NumBytes);
// Save EBP into the appropriate stack slot... // Save EBP into the appropriate stack slot...
// mov [ESP-<offset>], EBP // mov [ESP-<offset>], EBP
MI = addRegOffset(BuildMI(TII, Is64Bit ? X86::MOV64mr : X86::MOV32mr, 5), MI = addRegOffset(BuildMI(TII, Is64Bit ? X86::MOV64mr : X86::MOV32mr, 5),