summaryrefslogtreecommitdiff
path: root/src/arch/sparc/process.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/sparc/process.cc')
-rw-r--r--src/arch/sparc/process.cc31
1 files changed, 11 insertions, 20 deletions
diff --git a/src/arch/sparc/process.cc b/src/arch/sparc/process.cc
index a64bc587f..d8384b470 100644
--- a/src/arch/sparc/process.cc
+++ b/src/arch/sparc/process.cc
@@ -57,15 +57,6 @@ SparcProcess::SparcProcess(ProcessParams * params, ObjectFile *objFile,
Addr _StackBias)
: Process(params, objFile), StackBias(_StackBias)
{
-
- // XXX all the below need to be updated for SPARC - Ali
- memState->brkPoint = objFile->dataBase() + objFile->dataSize() +
- objFile->bssSize();
- memState->brkPoint = roundUp(memState->brkPoint, PageBytes);
-
- // Set pointer for next thread stack. Reserve 8M for main stack.
- memState->nextThreadStackBase = memState->stackBase - (8 * 1024 * 1024);
-
// Initialize these to 0s
fillStart = 0;
spillStart = 0;
@@ -325,16 +316,16 @@ SparcProcess::argsInit(int pageSize)
aux_padding +
frame_size;
- memState->stackMin = memState->stackBase - space_needed;
- memState->stackMin = roundDown(memState->stackMin, align);
- memState->stackSize = memState->stackBase - memState->stackMin;
+ memState->setStackMin(memState->getStackBase() - space_needed);
+ memState->setStackMin(roundDown(memState->getStackMin(), align));
+ memState->setStackSize(memState->getStackBase() - memState->getStackMin());
// Allocate space for the stack
- allocateMem(roundDown(memState->stackMin, pageSize),
- roundUp(memState->stackSize, pageSize));
+ allocateMem(roundDown(memState->getStackMin(), pageSize),
+ roundUp(memState->getStackSize(), pageSize));
// map out initial stack contents
- IntType sentry_base = memState->stackBase - sentry_size;
+ IntType sentry_base = memState->getStackBase() - sentry_size;
IntType file_name_base = sentry_base - file_name_size;
IntType env_data_base = file_name_base - env_data_size;
IntType arg_data_base = env_data_base - arg_data_size;
@@ -358,9 +349,9 @@ SparcProcess::argsInit(int pageSize)
DPRINTF(Stack, "%#x - argv array\n", argv_array_base);
DPRINTF(Stack, "%#x - argc \n", argc_base);
DPRINTF(Stack, "%#x - window save\n", window_save_base);
- DPRINTF(Stack, "%#x - stack min\n", memState->stackMin);
+ DPRINTF(Stack, "%#x - stack min\n", memState->getStackMin());
- assert(window_save_base == memState->stackMin);
+ assert(window_save_base == memState->getStackMin());
// write contents to stack
@@ -399,7 +390,7 @@ SparcProcess::argsInit(int pageSize)
// Set up space for the trap handlers into the processes address space.
// Since the stack grows down and there is reserved address space abov
// it, we can put stuff above it and stay out of the way.
- fillStart = memState->stackBase;
+ fillStart = memState->getStackBase();
spillStart = fillStart + sizeof(MachInst) * numFillInsts;
ThreadContext *tc = system->getThreadContext(contextIds[0]);
@@ -407,7 +398,7 @@ SparcProcess::argsInit(int pageSize)
// assert(NumArgumentRegs >= 2);
// tc->setIntReg(ArgumentReg[0], argc);
// tc->setIntReg(ArgumentReg[1], argv_array_base);
- tc->setIntReg(StackPointerReg, memState->stackMin - StackBias);
+ tc->setIntReg(StackPointerReg, memState->getStackMin() - StackBias);
// %g1 is a pointer to a function that should be run at exit. Since we
// don't have anything like that, it should be set to 0.
@@ -416,7 +407,7 @@ SparcProcess::argsInit(int pageSize)
tc->pcState(getStartPC());
// Align the "stack_min" to a page boundary.
- memState->stackMin = roundDown(memState->stackMin, pageSize);
+ memState->setStackMin(roundDown(memState->getStackMin(), pageSize));
}
void