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;
/// 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
/// that require greater alignment than the default alignment the target
/// provides. To handle this, MaxAlignment is set to the maximum alignment
@ -148,7 +156,7 @@ class MachineFrameInfo {
public:
MachineFrameInfo() {
NumFixedObjects = StackSize = MaxAlignment = 0;
NumFixedObjects = StackSize = OffsetAdjustment = MaxAlignment = 0;
HasVarSizedObjects = false;
HasCalls = false;
MaxCallFrameSize = 0;
@ -212,6 +220,14 @@ public:
/// setStackSize - Set the size of the stack...
///
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
/// 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),
MFI->getObjectOffset(Index) +
MFI->getStackSize() -
TFI.getOffsetOfLocalArea());
TFI.getOffsetOfLocalArea() +
MFI->getOffsetAdjustment());
}
/// 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
// guaranteed to be the last slot by processFunctionBeforeFrameFinalized.
int EBPOffset = MFI->getObjectOffset(MFI->getObjectIndexBegin())+SlotSize;
// Update the frame offset adjustment.
MFI->setOffsetAdjustment(SlotSize-NumBytes);
// Save EBP into the appropriate stack slot...
// mov [ESP-<offset>], EBP
MI = addRegOffset(BuildMI(TII, Is64Bit ? X86::MOV64mr : X86::MOV32mr, 5),