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 #include <stdlib.h> 14 15 /* This is set once at boot time and not changed thereafter */ 16 17 unsigned long exec_regs[MAX_REG_NR]; 18 unsigned long *exec_fp_regs; 19 20 int init_pid_registers(int pid) 21 { 22 int err; 23 24 err = ptrace(PTRACE_GETREGS, pid, 0, exec_regs); 25 if (err < 0) 26 return -errno; 27 28 err = arch_init_registers(pid); 29 if (err < 0) 30 return err; 31 32 exec_fp_regs = malloc(host_fp_size); 33 get_fp_registers(pid, exec_fp_regs); 34 return 0; 35 } 36 37 void get_safe_registers(unsigned long *regs, unsigned long *fp_regs) 38 { 39 memcpy(regs, exec_regs, sizeof(exec_regs)); 40 41 if (fp_regs) 42 memcpy(fp_regs, exec_fp_regs, host_fp_size); 43 } 44