Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/um/os-Linux/registers.c
38184 views
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
45