Ignore stack adjustment for ebp-based variables.
The TargetX8632 class maintains a "current stack adjustment" during a push sequence, so that pushing or otherwise accessing stack locations during a function arg push sequence can use the right esp offset.
This adjustment should only be used for esp-based frames, but it was being used for ebp-based frames as well, causing the wrong stack-based arguments to be pushed.
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3878
R=jvoung@chromium.org
Review URL: https://codereview.chromium.org/331743002
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp
index 81973d0..46a587f 100644
--- a/src/IceTargetLoweringX8632.cpp
+++ b/src/IceTargetLoweringX8632.cpp
@@ -390,7 +390,9 @@
}
Str << InstX8632::getWidthString(Var->getType());
Str << " [" << getRegName(getFrameOrStackReg(), IceType_i32);
- int32_t Offset = Var->getStackOffset() + getStackAdjustment();
+ int32_t Offset = Var->getStackOffset();
+ if (!hasFramePointer())
+ Offset += getStackAdjustment();
if (Offset) {
if (Offset > 0)
Str << "+";