void compiled_vframe::copy_outgoing_arg(fint argNo, NameDesc* nd2, compiled_vframe* vf, dummy_vframe* dummy, NameDesc* nd, frame* oldBlkHome, OopOopTable* blkValues) { // we're restarting a send (e.g. after recompilation that left most // recent frame invalid); outgoing args were saved by assembly glue // On I386, ReturnTrap asm glue does not save the outgoing arguments. // Used to be: // if (!nd2->isIllegal()) // copyValue(nd, vf, nd2, oldBlkHome, blkValues); // get value from caller if possible // else // copyValueTo(nd, new_string("<unknown outgoing argument>")); Location loc= LocationOfSavedOutgoingArgInSendee(argNo); NameDesc* fromNd = new LocationNameDesc(loc, 0); if (!nd2->isIllegal()) { // verify that args were saved correctly oop val1 = vf->get_contents(nd2, false); oop val2 = dummy->get_contents(fromNd); if (val1 != val2) fatal3("inconsistent outgoing arg %d: %#lx vs. %#lx", argNo, val1, val2); } copyValue(nd, dummy, fromNd, oldBlkHome, blkValues); }
void compiled_vframe::copy_outgoing_arg(fint argNo, NameDesc* nd2, compiled_vframe* vf, dummy_vframe* dummy, NameDesc* nd, frame* oldBlkHome, OopOopTable* blkValues) { // we're restarting a send (e.g. after recompilation that left most // recent frame invalid); outgoing args were saved by assembly glue // Use the value saved by the ReturnTrap asm glue (saved_outregs on SPARC) // But verify it against the expression stack entry of the caller. // For a SIC method, the latter may not be available for verification. // -- dmu 6/99 Location loc= LocationOfSavedOutgoingArgInSendee(argNo); NameDesc* fromNd = new LocationNameDesc(loc, 0); if (!nd2->isIllegal()) { // verify that args were saved correctly oop val1 = vf->get_contents(nd2, false); oop val2 = dummy->get_contents(fromNd); if (val1 != val2) fatal3("inconsistent outgoing arg %d: %#lx vs. %#lx", argNo, val1, val2); } copyValue(nd, dummy, fromNd, oldBlkHome, blkValues); }