1*ff25319cSkettenis/* $OpenBSD: tfork_thread.S,v 1.8 2022/12/24 10:47:22 kettenis Exp $ */ 2c7933ddeSpatrick/* 3c7933ddeSpatrick * Copyright (c) 2005 Dale Rahn <drahn@openbsd.org> 4c7933ddeSpatrick * 5c7933ddeSpatrick * Permission to use, copy, modify, and distribute this software for any 6c7933ddeSpatrick * purpose with or without fee is hereby granted, provided that the above 7c7933ddeSpatrick * copyright notice and this permission notice appear in all copies. 8c7933ddeSpatrick * 9c7933ddeSpatrick * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10c7933ddeSpatrick * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11c7933ddeSpatrick * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12c7933ddeSpatrick * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13c7933ddeSpatrick * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14c7933ddeSpatrick * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15c7933ddeSpatrick * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16c7933ddeSpatrick */ 17f8da6794Sguenther 18c7933ddeSpatrick#include "SYS.h" 19c7933ddeSpatrick 20c7933ddeSpatrick/* 21c7933ddeSpatrick * r0 r1 r2 r3 22c7933ddeSpatrick * __tfork_thread(param, psize, start_fnc, start_arg); 23c7933ddeSpatrick */ 24c7933ddeSpatrick 25c7933ddeSpatrickENTRY(__tfork_thread) 267e6b5442Sguenther .cfi_startproc 27c03461ecSmortimer RETGUARD_SETUP(__tfork_thread, x15) 28c7933ddeSpatrick SYSTRAP(__tfork) 297e6b5442Sguenther .cfi_endproc 30c7933ddeSpatrick bcs CERROR 31c7933ddeSpatrick 32c7933ddeSpatrick /* check if we are parent or child */ 330d5f1b6aSpatrick cbz x0, 1f 34c03461ecSmortimer RETGUARD_CHECK(__tfork_thread, x15) 35c7933ddeSpatrick ret 36c7933ddeSpatrick 37c7933ddeSpatrick1: 387e6b5442Sguenther .cfi_startproc 397e6b5442Sguenther .cfi_undefined lr 40c7933ddeSpatrick /* child */ 41*ff25319cSkettenis mov fp, #0 42c7933ddeSpatrick mov x0, x3 43c7933ddeSpatrick blr x2 44c7933ddeSpatrick SYSTRAP(__threxit) 455bbf8832Snaddy udf #0 467e6b5442Sguenther .cfi_endproc 47c7933ddeSpatrickEND(__tfork_thread) 48