Skip to content

Commit ba5045e

Browse files
committed
go.sys/plan9: just jump to syscall.Syscall etc.
Don't re-implement these functions. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/124350045
1 parent 4faa336 commit ba5045e

File tree

2 files changed

+18
-284
lines changed

2 files changed

+18
-284
lines changed

plan9/asm_plan9_386.s

+9-143
Original file line numberDiff line numberDiff line change
@@ -2,163 +2,29 @@
22
// Use of this source code is governed by a BSD-style
33
// license that can be found in the LICENSE file.
44

5-
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
6-
// so that go vet can check that they are correct.
7-
85
#include "textflag.h"
96

107
//
118
// System call support for 386, Plan 9
129
//
1310

14-
//func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string)
15-
//func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string)
16-
//func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
17-
//func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
11+
// Just jump to package syscall's implementation for all these functions.
12+
// The runtime may know about them.
1813

19-
// Trap # in AX, args on stack above caller pc.
2014
TEXT ·Syscall(SB),NOSPLIT,$0-32
21-
CALL runtime·entersyscall(SB)
22-
MOVL 4(SP), AX // syscall entry
23-
// slide args down on top of system call number
24-
LEAL 8(SP), SI
25-
LEAL 4(SP), DI
26-
CLD
27-
MOVSL
28-
MOVSL
29-
MOVSL
30-
INT $64
31-
MOVL AX, r1+20(SP)
32-
MOVL $0, r2+24(SP)
33-
CMPL AX, $-1
34-
JNE ok3
35-
36-
SUBL $8, SP
37-
CALL runtime·errstr(SB)
38-
MOVL SP, SI
39-
ADDL $8, SP
40-
JMP copyresult3
41-
42-
ok3:
43-
LEAL runtime·emptystring(SB), SI
44-
45-
copyresult3:
46-
LEAL err+28(SP), DI
47-
48-
CLD
49-
MOVSL
50-
MOVSL
51-
52-
CALL runtime·exitsyscall(SB)
53-
RET
15+
JMP syscall·Syscall(SB)
5416

5517
TEXT ·Syscall6(SB),NOSPLIT,$0-44
56-
CALL runtime·entersyscall(SB)
57-
MOVL 4(SP), AX // syscall entry
58-
// slide args down on top of system call number
59-
LEAL 8(SP), SI
60-
LEAL 4(SP), DI
61-
CLD
62-
MOVSL
63-
MOVSL
64-
MOVSL
65-
MOVSL
66-
MOVSL
67-
MOVSL
68-
INT $64
69-
MOVL AX, r1+32(SP)
70-
MOVL $0, r2+36(SP)
71-
CMPL AX, $-1
72-
JNE ok4
73-
74-
SUBL $8, SP
75-
CALL runtime·errstr(SB)
76-
MOVL SP, SI
77-
ADDL $8, SP
78-
JMP copyresult4
79-
80-
ok4:
81-
LEAL runtime·emptystring(SB), SI
82-
83-
copyresult4:
84-
LEAL err+40(SP), DI
85-
86-
CLD
87-
MOVSL
88-
MOVSL
89-
90-
CALL runtime·exitsyscall(SB)
91-
RET
18+
JMP syscall·Syscall6(SB)
9219

9320
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
94-
MOVL 4(SP), AX // syscall entry
95-
// slide args down on top of system call number
96-
LEAL 8(SP), SI
97-
LEAL 4(SP), DI
98-
CLD
99-
MOVSL
100-
MOVSL
101-
MOVSL
102-
INT $64
103-
MOVL AX, r1+20(SP)
104-
MOVL AX, r2+24(SP)
105-
MOVL AX, err+28(SP)
106-
RET
21+
JMP syscall·RawSyscall(SB)
10722

108-
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
109-
MOVL 4(SP), AX // syscall entry
110-
// slide args down on top of system call number
111-
LEAL 8(SP), SI
112-
LEAL 4(SP), DI
113-
CLD
114-
MOVSL
115-
MOVSL
116-
MOVSL
117-
MOVSL
118-
MOVSL
119-
MOVSL
120-
INT $64
121-
MOVL AX, r1+32(SP)
122-
MOVL AX, r2+36(SP)
123-
MOVL AX, err+40(SP)
124-
RET
23+
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
24+
JMP syscall·RawSyscall6(SB)
12525

126-
#define SYS_SEEK 39 /* from zsysnum_plan9_386.go */
127-
128-
//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
12926
TEXT ·seek(SB),NOSPLIT,$0-36
130-
LEAL newoffset+24(SP), AX
131-
MOVL AX, placeholder+4(SP)
132-
133-
MOVL $SYS_SEEK, AX // syscall entry
134-
INT $64
135-
136-
CMPL AX, $-1
137-
JNE ok6
138-
MOVL AX, 24(SP) // newoffset low
139-
MOVL AX, 28(SP) // newoffset high
140-
141-
SUBL $8, SP
142-
CALL plan9·errstr(SB)
143-
MOVL SP, SI
144-
ADDL $8, SP
145-
JMP copyresult6
146-
147-
ok6:
148-
LEAL runtime·emptystring(SB), SI
149-
150-
copyresult6:
151-
LEAL err+32(SP), DI
152-
153-
CLD
154-
MOVSL
155-
MOVSL
156-
RET
27+
JMP syscall·seek(SB)
15728

158-
//func exit(code int)
159-
// Import runtime·exit for cleanly exiting.
16029
TEXT ·exit(SB),NOSPLIT,$4-4
161-
MOVL code+0(FP), AX
162-
MOVL AX, 0(SP)
163-
CALL runtime·exit(SB)
164-
RET
30+
JMP syscall·exit(SB)

plan9/asm_plan9_amd64.s

+9-141
Original file line numberDiff line numberDiff line change
@@ -2,161 +2,29 @@
22
// Use of this source code is governed by a BSD-style
33
// license that can be found in the LICENSE file.
44

5-
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
6-
// so that go vet can check that they are correct.
7-
85
#include "textflag.h"
96

107
//
11-
// System call support for Plan 9
8+
// System call support for amd64, Plan 9
129
//
1310

14-
//func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string)
15-
//func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string)
16-
//func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
17-
//func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
11+
// Just jump to package syscall's implementation for all these functions.
12+
// The runtime may know about them.
1813

1914
TEXT ·Syscall(SB),NOSPLIT,$0-64
20-
CALL runtime·entersyscall(SB)
21-
MOVQ 8(SP), BP // syscall entry
22-
// slide args down on top of system call number
23-
LEAQ 16(SP), SI
24-
LEAQ 8(SP), DI
25-
CLD
26-
MOVSQ
27-
MOVSQ
28-
MOVSQ
29-
SYSCALL
30-
MOVQ AX, r1+40(SP)
31-
MOVQ $0, r2+48(SP)
32-
CMPL AX, $-1
33-
JNE ok3
34-
35-
SUBQ $16, SP
36-
CALL runtime·errstr(SB)
37-
MOVQ SP, SI
38-
ADDQ $16, SP
39-
JMP copyresult3
40-
41-
ok3:
42-
LEAQ runtime·emptystring(SB), SI
43-
44-
copyresult3:
45-
LEAQ err+56(SP), DI
46-
47-
CLD
48-
MOVSQ
49-
MOVSQ
50-
51-
CALL runtime·exitsyscall(SB)
52-
RET
15+
JMP syscall·Syscall(SB)
5316

5417
TEXT ·Syscall6(SB),NOSPLIT,$0-88
55-
CALL runtime·entersyscall(SB)
56-
MOVQ 8(SP), BP // syscall entry
57-
// slide args down on top of system call number
58-
LEAQ 16(SP), SI
59-
LEAQ 8(SP), DI
60-
CLD
61-
MOVSQ
62-
MOVSQ
63-
MOVSQ
64-
MOVSQ
65-
MOVSQ
66-
MOVSQ
67-
SYSCALL
68-
MOVQ AX, r1+64(SP)
69-
MOVQ $0, r2+72(SP)
70-
CMPL AX, $-1
71-
JNE ok4
72-
73-
SUBQ $16, SP
74-
CALL runtime·errstr(SB)
75-
MOVQ SP, SI
76-
ADDQ $16, SP
77-
JMP copyresult4
78-
79-
ok4:
80-
LEAQ runtime·emptystring(SB), SI
81-
82-
copyresult4:
83-
LEAQ err+80(SP), DI
84-
85-
CLD
86-
MOVSQ
87-
MOVSQ
88-
89-
CALL runtime·exitsyscall(SB)
90-
RET
18+
JMP syscall·Syscall6(SB)
9119

9220
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
93-
MOVQ 8(SP), BP // syscall entry
94-
// slide args down on top of system call number
95-
LEAQ 16(SP), SI
96-
LEAQ 8(SP), DI
97-
CLD
98-
MOVSQ
99-
MOVSQ
100-
MOVSQ
101-
SYSCALL
102-
MOVQ AX, r1+40(SP)
103-
MOVQ AX, r2+48(SP)
104-
MOVQ AX, err+56(SP)
105-
RET
21+
JMP syscall·RawSyscall(SB)
10622

10723
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
108-
MOVQ 8(SP), BP // syscall entry
109-
// slide args down on top of system call number
110-
LEAQ 16(SP), SI
111-
LEAQ 8(SP), DI
112-
CLD
113-
MOVSQ
114-
MOVSQ
115-
MOVSQ
116-
MOVSQ
117-
MOVSQ
118-
MOVSQ
119-
SYSCALL
120-
MOVQ AX, r1+64(SP)
121-
MOVQ AX, r2+72(SP)
122-
MOVQ AX, err+80(SP)
123-
RET
24+
JMP syscall·RawSyscall6(SB)
12425

125-
#define SYS_SEEK 39 /* from zsysnum_plan9_amd64.go */
126-
127-
//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
12826
TEXT ·seek(SB),NOSPLIT,$0-56
129-
LEAQ newoffset+40(SP), AX
130-
MOVQ AX, placeholder+8(SP)
131-
132-
MOVQ $SYS_SEEK, BP // syscall entry
133-
SYSCALL
134-
135-
CMPL AX, $-1
136-
JNE ok6
137-
MOVQ $-1, newoffset+40(SP)
138-
139-
SUBQ $16, SP
140-
CALL plan9·errstr(SB)
141-
MOVQ SP, SI
142-
ADDQ $16, SP
143-
JMP copyresult6
144-
145-
ok6:
146-
LEAQ runtime·emptystring(SB), SI
147-
148-
copyresult6:
149-
LEAQ err+48(SP), DI
150-
151-
CLD
152-
MOVSQ
153-
MOVSQ
154-
RET
27+
JMP syscall·seek(SB)
15528

156-
//func exit(code int)
157-
// Import runtime·exit for cleanly exiting.
15829
TEXT ·exit(SB),NOSPLIT,$8-8
159-
MOVQ code+0(FP), AX
160-
MOVQ AX, 0(SP)
161-
CALL runtime·exit(SB)
162-
RET
30+
JMP syscall·exit(SB)

0 commit comments

Comments
 (0)