Denys Vlasenko | 430143b | 2015-03-24 19:39:47 +0100 | [diff] [blame^] | 1 | #ifdef SPARC64 |
Dmitry V. Levin | d70d1c4 | 2015-03-22 22:13:55 +0000 | [diff] [blame] | 2 | /* Retrieve the syscall trap instruction. */ |
| 3 | unsigned long trap; |
Dmitry V. Levin | d70d1c4 | 2015-03-22 22:13:55 +0000 | [diff] [blame] | 4 | errno = 0; |
Dmitry V. Levin | d70d1c4 | 2015-03-22 22:13:55 +0000 | [diff] [blame] | 5 | trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)sparc_regs.tpc, 0); |
Dmitry V. Levin | d70d1c4 | 2015-03-22 22:13:55 +0000 | [diff] [blame] | 6 | if (errno) |
| 7 | return -1; |
Denys Vlasenko | 430143b | 2015-03-24 19:39:47 +0100 | [diff] [blame^] | 8 | trap >>= 32; |
Dmitry V. Levin | d70d1c4 | 2015-03-22 22:13:55 +0000 | [diff] [blame] | 9 | switch (trap) { |
| 10 | case 0x91d02010: |
| 11 | /* Linux/SPARC syscall trap. */ |
| 12 | update_personality(tcp, 0); |
| 13 | break; |
| 14 | case 0x91d0206d: |
| 15 | /* Linux/SPARC64 syscall trap. */ |
| 16 | update_personality(tcp, 2); |
| 17 | break; |
Denys Vlasenko | 430143b | 2015-03-24 19:39:47 +0100 | [diff] [blame^] | 18 | } |
Dmitry V. Levin | d70d1c4 | 2015-03-22 22:13:55 +0000 | [diff] [blame] | 19 | #endif |
Dmitry V. Levin | d70d1c4 | 2015-03-22 22:13:55 +0000 | [diff] [blame] | 20 | |
Denys Vlasenko | 430143b | 2015-03-24 19:39:47 +0100 | [diff] [blame^] | 21 | scno = sparc_regs.u_regs[U_REG_G1]; |