LCOV - code coverage report
Current view: top level - arch/um/os-Linux - registers.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 11 20 55.0 %
Date: 2023-08-24 13:40:31 Functions: 2 4 50.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : /*
       3             :  * Copyright (C) 2004 PathScale, Inc
       4             :  * Copyright (C) 2004 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
       5             :  */
       6             : 
       7             : #include <errno.h>
       8             : #include <string.h>
       9             : #include <sys/ptrace.h>
      10             : #include <sysdep/ptrace.h>
      11             : #include <sysdep/ptrace_user.h>
      12             : #include <registers.h>
      13             : 
      14           0 : int save_registers(int pid, struct uml_pt_regs *regs)
      15             : {
      16             :         int err;
      17             : 
      18           0 :         err = ptrace(PTRACE_GETREGS, pid, 0, regs->gp);
      19           0 :         if (err < 0)
      20           0 :                 return -errno;
      21             :         return 0;
      22             : }
      23             : 
      24           0 : int restore_pid_registers(int pid, struct uml_pt_regs *regs)
      25             : {
      26             :         int err;
      27             : 
      28           0 :         err = ptrace(PTRACE_SETREGS, pid, 0, regs->gp);
      29           0 :         if (err < 0)
      30           0 :                 return -errno;
      31             :         return 0;
      32             : }
      33             : 
      34             : /* This is set once at boot time and not changed thereafter */
      35             : 
      36             : static unsigned long exec_regs[MAX_REG_NR];
      37             : static unsigned long exec_fp_regs[FP_SIZE];
      38             : 
      39           1 : int init_pid_registers(int pid)
      40             : {
      41             :         int err;
      42             : 
      43           1 :         err = ptrace(PTRACE_GETREGS, pid, 0, exec_regs);
      44           1 :         if (err < 0)
      45           0 :                 return -errno;
      46             : 
      47           1 :         arch_init_registers(pid);
      48           1 :         get_fp_registers(pid, exec_fp_regs);
      49           1 :         return 0;
      50             : }
      51             : 
      52         177 : void get_safe_registers(unsigned long *regs, unsigned long *fp_regs)
      53             : {
      54         177 :         memcpy(regs, exec_regs, sizeof(exec_regs));
      55             : 
      56         177 :         if (fp_regs)
      57         176 :                 memcpy(fp_regs, exec_fp_regs, sizeof(exec_fp_regs));
      58         177 : }

Generated by: LCOV version 1.14