mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 19:29:31 +00:00
Move ReturnAddrIndex variable to X86MachineFunctionInfo structure. This fixed
hard to catch bugs with retaddr lowering git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41104 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d42b8be3da
commit
a2780e11ef
@ -781,12 +781,11 @@ SDOperand X86TargetLowering::LowerCCCArguments(SDOperand Op, SelectionDAG &DAG,
|
||||
|
||||
BytesCallerReserves = StackSize;
|
||||
}
|
||||
|
||||
|
||||
RegSaveFrameIndex = 0xAAAAAAA; // X86-64 only.
|
||||
ReturnAddrIndex = 0; // No return address slot generated yet.
|
||||
|
||||
MF.getInfo<X86MachineFunctionInfo>()
|
||||
->setBytesToPopOnReturn(BytesToPopOnReturn);
|
||||
X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
|
||||
FuncInfo->setBytesToPopOnReturn(BytesToPopOnReturn);
|
||||
|
||||
// Return the new list of results.
|
||||
return DAG.getNode(ISD::MERGE_VALUES, Op.Val->getVTList(),
|
||||
@ -1027,12 +1026,11 @@ X86TargetLowering::LowerFastCCArguments(SDOperand Op, SelectionDAG &DAG) {
|
||||
|
||||
VarArgsFrameIndex = 0xAAAAAAA; // fastcc functions can't have varargs.
|
||||
RegSaveFrameIndex = 0xAAAAAAA; // X86-64 only.
|
||||
ReturnAddrIndex = 0; // No return address slot generated yet.
|
||||
BytesToPopOnReturn = StackSize; // Callee pops all stack arguments.
|
||||
BytesCallerReserves = 0;
|
||||
|
||||
MF.getInfo<X86MachineFunctionInfo>()
|
||||
->setBytesToPopOnReturn(BytesToPopOnReturn);
|
||||
X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
|
||||
FuncInfo->setBytesToPopOnReturn(BytesToPopOnReturn);
|
||||
|
||||
// Return the new list of results.
|
||||
return DAG.getNode(ISD::MERGE_VALUES, Op.Val->getVTList(),
|
||||
@ -1319,10 +1317,12 @@ X86TargetLowering::LowerX86_64CCCArguments(SDOperand Op, SelectionDAG &DAG) {
|
||||
|
||||
ArgValues.push_back(Root);
|
||||
|
||||
ReturnAddrIndex = 0; // No return address slot generated yet.
|
||||
BytesToPopOnReturn = 0; // Callee pops nothing.
|
||||
BytesCallerReserves = StackSize;
|
||||
|
||||
X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
|
||||
FuncInfo->setBytesToPopOnReturn(BytesToPopOnReturn);
|
||||
|
||||
// Return the new list of results.
|
||||
return DAG.getNode(ISD::MERGE_VALUES, Op.Val->getVTList(),
|
||||
&ArgValues[0], ArgValues.size()).getValue(Op.ResNo);
|
||||
@ -1471,13 +1471,18 @@ X86TargetLowering::LowerX86_64CCCCallTo(SDOperand Op, SelectionDAG &DAG,
|
||||
|
||||
|
||||
SDOperand X86TargetLowering::getReturnAddressFrameIndex(SelectionDAG &DAG) {
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
|
||||
int ReturnAddrIndex = FuncInfo->getRAIndex();
|
||||
|
||||
if (ReturnAddrIndex == 0) {
|
||||
// Set up a frame object for the return address.
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
if (Subtarget->is64Bit())
|
||||
ReturnAddrIndex = MF.getFrameInfo()->CreateFixedObject(8, -8);
|
||||
else
|
||||
ReturnAddrIndex = MF.getFrameInfo()->CreateFixedObject(4, -4);
|
||||
|
||||
FuncInfo->setRAIndex(ReturnAddrIndex);
|
||||
}
|
||||
|
||||
return DAG.getFrameIndex(ReturnAddrIndex, getPointerTy());
|
||||
|
@ -282,7 +282,6 @@ namespace llvm {
|
||||
int RegSaveFrameIndex; // X86-64 vararg func register save area.
|
||||
unsigned VarArgsGPOffset; // X86-64 vararg func int reg offset.
|
||||
unsigned VarArgsFPOffset; // X86-64 vararg func fp reg offset.
|
||||
int ReturnAddrIndex; // FrameIndex for return slot.
|
||||
int BytesToPopOnReturn; // Number of arg bytes ret should pop.
|
||||
int BytesCallerReserves; // Number of arg bytes caller makes.
|
||||
public:
|
||||
|
@ -44,17 +44,21 @@ class X86MachineFunctionInfo : public MachineFunctionInfo {
|
||||
/// If the function requires additional name decoration, DecorationStyle holds
|
||||
/// the right way to do so.
|
||||
NameDecorationStyle DecorationStyle;
|
||||
|
||||
|
||||
// FrameIndex for return slot.
|
||||
int ReturnAddrIndex;
|
||||
public:
|
||||
X86MachineFunctionInfo() : ForceFramePointer(false),
|
||||
CalleeSavedFrameSize(0),
|
||||
BytesToPopOnReturn(0),
|
||||
DecorationStyle(None) {}
|
||||
DecorationStyle(None),
|
||||
ReturnAddrIndex(0) {}
|
||||
|
||||
X86MachineFunctionInfo(MachineFunction &MF) : ForceFramePointer(false),
|
||||
CalleeSavedFrameSize(0),
|
||||
BytesToPopOnReturn(0),
|
||||
DecorationStyle(None) {}
|
||||
DecorationStyle(None),
|
||||
ReturnAddrIndex(0) {}
|
||||
|
||||
bool getForceFramePointer() const { return ForceFramePointer;}
|
||||
void setForceFramePointer(bool forceFP) { ForceFramePointer = forceFP; }
|
||||
@ -67,7 +71,9 @@ public:
|
||||
|
||||
NameDecorationStyle getDecorationStyle() const { return DecorationStyle; }
|
||||
void setDecorationStyle(NameDecorationStyle style) { DecorationStyle = style;}
|
||||
|
||||
|
||||
int getRAIndex() const { return ReturnAddrIndex; }
|
||||
void setRAIndex(int Index) { ReturnAddrIndex = Index; }
|
||||
};
|
||||
} // End llvm namespace
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user