1
- /* Disassemble the syscall trap. */
1
+ #ifdef SPARC64
2
2
/* Retrieve the syscall trap instruction. */
3
3
unsigned long trap ;
4
-
5
4
errno = 0 ;
6
-
7
- #ifdef SPARC64
8
5
trap = ptrace (PTRACE_PEEKTEXT , tcp -> pid , (char * )sparc_regs .tpc , 0 );
9
- trap >>= 32 ;
10
- #else
11
- trap = ptrace (PTRACE_PEEKTEXT , tcp -> pid , (char * )sparc_regs .pc , 0 );
12
- #endif
13
-
14
6
if (errno )
15
7
return -1 ;
16
-
17
- /* Disassemble the trap to see what personality to use. */
8
+ trap >>= 32 ;
18
9
switch (trap ) {
19
10
case 0x91d02010 :
20
11
/* Linux/SPARC syscall trap. */
@@ -24,39 +15,7 @@ case 0x91d0206d:
24
15
/* Linux/SPARC64 syscall trap. */
25
16
update_personality (tcp , 2 );
26
17
break ;
27
- case 0x91d02000 :
28
- /* SunOS syscall trap. (pers 1) */
29
- fprintf (stderr , "syscall: SunOS no support\n" );
30
- return -1 ;
31
- case 0x91d02008 :
32
- /* Solaris 2.x syscall trap. (per 2) */
33
- update_personality (tcp , 1 );
34
- break ;
35
- case 0x91d02009 :
36
- /* NetBSD/FreeBSD syscall trap. */
37
- fprintf (stderr , "syscall: NetBSD/FreeBSD not supported\n" );
38
- return -1 ;
39
- case 0x91d02027 :
40
- /* Solaris 2.x gettimeofday */
41
- update_personality (tcp , 1 );
42
- break ;
43
- default :
44
- #ifdef SPARC64
45
- fprintf (stderr , "syscall: unknown syscall trap %08lx %016lx\n" , trap , sparc_regs .tpc );
46
- #else
47
- fprintf (stderr , "syscall: unknown syscall trap %08lx %08lx\n" , trap , sparc_regs .pc );
48
- #endif
49
- return -1 ;
50
- }
51
-
52
- /* Extract the system call number from the registers. */
53
- if (trap == 0x91d02027 ) {
54
- scno = 156 ;
55
- } else {
56
- scno = sparc_regs .u_regs [U_REG_G1 ];
57
18
}
19
+ #endif
58
20
59
- if (scno == 0 ) {
60
- scno = sparc_regs .u_regs [U_REG_O0 ];
61
- memmove (& sparc_regs .u_regs [U_REG_O0 ], & sparc_regs .u_regs [U_REG_O1 ], 7 * sizeof (sparc_regs .u_regs [0 ]));
62
- }
21
+ scno = sparc_regs .u_regs [U_REG_G1 ];
0 commit comments