20#include "pedigree/kernel/Log.h"
21#include "pedigree/kernel/processor/StackFrame.h"
22#include "pedigree/kernel/processor/state.h"
23#include "pedigree/kernel/processor/types.h"
43 uint64_t* pPtr =
reinterpret_cast<uint64_t*
>(
m_State.rbp + (n - 6) *
sizeof(uint64_t));
49void X64StackFrame::construct(ProcessorState& state, uintptr_t returnAddress,
unsigned int nParams,
53 uintptr_t stack = state.getStackPointer();
55 WARNING(
"StackFrame: given stack was not ABI-compliant, fixing.");
60 uintptr_t* pStack =
reinterpret_cast<uintptr_t*
>(stack);
65 ssize_t nToPush =
static_cast<ssize_t
>(nParams) - 6;
72 uintptr_t* pStackLowWaterMark = pStack;
74 *pStack++ = returnAddress;
77 va_start(list, nParams);
79 for (
size_t i = 0; i < nParams; i++) {
80 uintptr_t arg = va_arg(list, uintptr_t);
108 state.setStackPointer(
reinterpret_cast<uintptr_t
>(pStackLowWaterMark));
const ProcessorState & m_State
virtual uintptr_t getParameter(size_t n)