SPARC: Force %g1 to be zero on process startup even though it normally already should be.
authorGabe Black <gblack@eecs.umich.edu>
Mon, 12 Nov 2007 01:23:22 +0000 (17:23 -0800)
committerGabe Black <gblack@eecs.umich.edu>
Mon, 12 Nov 2007 01:23:22 +0000 (17:23 -0800)
--HG--
extra : convert_revision : 9feb63109e8c955b49c7e96acad1ad7c29a4349f

src/arch/sparc/process.cc

index 1f5d0b07716e218a5cdac260ae9c4c18ded8003c..0c40fe58dd5c1166d74563959e31d97117b1a9a7 100644 (file)
@@ -429,6 +429,10 @@ Sparc64LiveProcess::argsInit(int intSize, int pageSize)
     threadContexts[0]->setIntReg(ArgumentReg[1], argv_array_base);
     threadContexts[0]->setIntReg(StackPointerReg, stack_min - 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.
+    threadContexts[0]->setIntReg(1, 0);
+
     Addr prog_entry = objFile->entryPoint();
     threadContexts[0]->setPC(prog_entry);
     threadContexts[0]->setNextPC(prog_entry + sizeof(MachInst));
@@ -658,6 +662,10 @@ Sparc32LiveProcess::argsInit(int intSize, int pageSize)
     //threadContexts[0]->setIntReg(ArgumentReg[1], argv_array_base);
     threadContexts[0]->setIntReg(StackPointerReg, stack_min);
 
+    // %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.
+    threadContexts[0]->setIntReg(1, 0);
+
     uint32_t prog_entry = objFile->entryPoint();
     threadContexts[0]->setPC(prog_entry);
     threadContexts[0]->setNextPC(prog_entry + sizeof(MachInst));