_resumecontext.S revision 1.9
11.9Sskrll/* $NetBSD: _resumecontext.S,v 1.9 2016/08/13 07:49:32 skrll Exp $ */ 21.2Sthorpej 31.2Sthorpej/*- 41.2Sthorpej * Copyright (c) 2001 The NetBSD Foundation, Inc. 51.2Sthorpej * All rights reserved. 61.2Sthorpej * 71.2Sthorpej * This code is derived from software contributed to The NetBSD Foundation 81.2Sthorpej * by Wayne Knowles. 91.2Sthorpej * 101.2Sthorpej * Redistribution and use in source and binary forms, with or without 111.2Sthorpej * modification, are permitted provided that the following conditions 121.2Sthorpej * are met: 131.2Sthorpej * 1. Redistributions of source code must retain the above copyright 141.2Sthorpej * notice, this list of conditions and the following disclaimer. 151.2Sthorpej * 2. Redistributions in binary form must reproduce the above copyright 161.2Sthorpej * notice, this list of conditions and the following disclaimer in the 171.2Sthorpej * documentation and/or other materials provided with the distribution. 181.2Sthorpej * 191.2Sthorpej * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 201.2Sthorpej * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 211.2Sthorpej * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 221.2Sthorpej * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 231.2Sthorpej * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 241.2Sthorpej * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 251.2Sthorpej * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 261.2Sthorpej * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 271.2Sthorpej * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 281.2Sthorpej * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 291.2Sthorpej * POSSIBILITY OF SUCH DAMAGE. 301.2Sthorpej */ 311.2Sthorpej 321.6Smatt#include <machine/asm.h> 331.6Smatt 341.2Sthorpej#include "SYS.h" 351.6Smatt#include "assym.h" 361.2Sthorpej 371.2Sthorpej#if defined(SYSLIBC_SCCS) && !defined(lint) 381.9Sskrll RCSID("$NetBSD: _resumecontext.S,v 1.9 2016/08/13 07:49:32 skrll Exp $") 391.2Sthorpej#endif /* SYSLIBC_SCCS && !lint */ 401.2Sthorpej 411.2Sthorpej .set reorder 421.6Smatt .hidden _C_LABEL(__resumecontext) 431.8Sskrll 441.2SthorpejLEAF_NOPROFILE(__resumecontext) 451.6Smatt /* 461.6Smatt * We get here not by a call through $t9 but thru $ra after the 471.6Smatt * function passed to makecontext returns. 481.6Smatt */ 491.6Smatt PTR_SUBU sp, sp, UCONTEXT_SIZE # get space for ucontext 501.6Smatt move a0, sp # arg0 for getcontext 511.6Smatt PTR_S zero, _OFFSETOF_UC_LINK(a0) # make sure uc_link is 0 521.6Smatt SYSTRAP(getcontext) # get context 531.6Smatt PTR_L a0, _OFFSETOF_UC_LINK(a0) # linked context? 541.6Smatt beq a0, zero, 1f # nope, exit process 551.6Smatt nop 561.9Sskrll SYSTRAP(setcontext) # yes, become it. 571.6Smatt /* NOTREACHED (in theory) */ 581.8Sskrll li a0, -1 # failure, 591.6Smatt1: 601.6Smatt SYSTRAP(exit) # all hope is lost. 611.6Smatt /* NOTREACHED */ 621.2SthorpejEND(__resumecontext) 63