xref: /openbsd-src/lib/libc/arch/aarch64/sys/tfork_thread.S (revision ff25319c393a2dcaf4b059c8970d8b604c7605a1)
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