(root)/
strace-6.5/
src/
linux/
mips/
raw_syscall.h
       1  /*
       2   * Raw syscalls.
       3   *
       4   * Copyright (c) 2018-2023 The strace developers.
       5   * All rights reserved.
       6   *
       7   * SPDX-License-Identifier: LGPL-2.1-or-later
       8   */
       9  
      10  #ifndef STRACE_RAW_SYSCALL_H
      11  # define STRACE_RAW_SYSCALL_H
      12  
      13  # include "kernel_types.h"
      14  
      15  # if __mips_isa_rev >= 6
      16  #  define SYSCALL_CLOBBERLIST \
      17  	"memory", "$1", "$3", "$8", "$9", \
      18  	"$10", "$11", "$12", "$13", "$14", "$15", \
      19  	"$24", "$25"
      20  # else
      21  #  define SYSCALL_CLOBBERLIST \
      22  	"memory", "hi", "lo", "$1", "$3", "$8", "$9", \
      23  	"$10", "$11", "$12", "$13", "$14", "$15", \
      24  	"$24", "$25"
      25  # endif
      26  
      27  static inline kernel_ulong_t
      28  raw_syscall_0(const kernel_ulong_t nr, kernel_ulong_t *err)
      29  {
      30  	register kernel_ulong_t s0 __asm__("$16") = nr;
      31  	register kernel_ulong_t v0 __asm__("$2");
      32  	register kernel_ulong_t a3 __asm__("$7");
      33  	__asm__ __volatile__(".set noreorder\n\t"
      34  			     "move %0, %2\n\t"
      35  			     "syscall\n\t"
      36  			     ".set reorder"
      37  			     : "=r"(v0), "=r"(a3)
      38  			     : "r"(s0)
      39  			     : SYSCALL_CLOBBERLIST);
      40  	*err = a3;
      41  	return v0;
      42  }
      43  # define raw_syscall_0 raw_syscall_0
      44  
      45  #endif /* !STRACE_RAW_SYSCALL_H */