1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| /* Return codes: 1 - ok, 0 - ignore, other - error. */
| static int
| arch_get_scno(struct tcb *tcp)
| {
| /* Retrieve the syscall trap instruction. */
| unsigned long trap;
| errno = 0;
| trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *) sparc_regs.tpc, 0);
| if (errno == 0) {
| trap >>= 32;
| switch (trap) {
| case 0x91d02010:
| /* Linux/SPARC syscall trap. */
| update_personality(tcp, 1);
| break;
| case 0x91d0206d:
| /* Linux/SPARC64 syscall trap. */
| update_personality(tcp, 0);
| break;
| }
| }
|
| tcp->scno = sparc_regs.u_regs[U_REG_G1];
| return 1;
| }
|
|