1dd40c5b4SNicholas Piggin // SPDX-License-Identifier: GPL-2.0+
2dd40c5b4SNicholas Piggin
3dd40c5b4SNicholas Piggin /*
4dd40c5b4SNicholas Piggin * Part of fork context switch microbenchmark.
5dd40c5b4SNicholas Piggin *
6dd40c5b4SNicholas Piggin * Copyright 2018, Anton Blanchard, IBM Corp.
7dd40c5b4SNicholas Piggin */
8dd40c5b4SNicholas Piggin
9c906d2c7SNicholas Piggin #define _GNU_SOURCE
10c906d2c7SNicholas Piggin #include <sys/syscall.h>
11c906d2c7SNicholas Piggin
_start(void)12dd40c5b4SNicholas Piggin void _start(void)
13dd40c5b4SNicholas Piggin {
14*8c9c01ceSMadhavan Srinivasan asm volatile (
15*8c9c01ceSMadhavan Srinivasan "li %%r0, %[sys_exit];"
16*8c9c01ceSMadhavan Srinivasan "li %%r3, 0;"
17*8c9c01ceSMadhavan Srinivasan "sc;"
18*8c9c01ceSMadhavan Srinivasan :
19*8c9c01ceSMadhavan Srinivasan : [sys_exit] "i" (SYS_exit)
20*8c9c01ceSMadhavan Srinivasan /*
21*8c9c01ceSMadhavan Srinivasan * "sc" will clobber r0, r3-r13, cr0, ctr, xer and memory.
22*8c9c01ceSMadhavan Srinivasan * Even though sys_exit never returns, handle clobber
23*8c9c01ceSMadhavan Srinivasan * registers.
24*8c9c01ceSMadhavan Srinivasan */
25*8c9c01ceSMadhavan Srinivasan : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
26*8c9c01ceSMadhavan Srinivasan "r11", "r12", "r13", "cr0", "ctr", "xer", "memory"
27*8c9c01ceSMadhavan Srinivasan );
28dd40c5b4SNicholas Piggin }
29