Skip to content

Commit

Permalink
runtime: split plan9 and solaris's m fields into new embedded mOS type
Browse files Browse the repository at this point in the history
Reduces the size of m by ~8% on linux/amd64 (1040 bytes -> 960 bytes).

There are also windows-specific fields, but they're currently
referenced in OS-independent source files (but only when
GOOS=="windows").

Change-Id: I13e1471ff585ccced1271f74209f8ed6df14c202
Reviewed-on: https://go-review.googlesource.com/16173
Run-TryBot: Matthew Dempsky <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Ian Lance Taylor <[email protected]>
  • Loading branch information
mdempsky committed Oct 22, 2015
1 parent 029c760 commit 58e3ae2
Show file tree
Hide file tree
Showing 14 changed files with 49 additions and 30 deletions.
2 changes: 2 additions & 0 deletions src/runtime/os_darwin.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package runtime

import "unsafe"

type mOS struct{}

func bsdthread_create(stk, arg unsafe.Pointer, fn uintptr) int32
func bsdthread_register() int32

Expand Down
2 changes: 2 additions & 0 deletions src/runtime/os_dragonfly.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package runtime

import "unsafe"

type mOS struct{}

//go:noescape
func lwp_create(param *lwpparams) int32

Expand Down
2 changes: 2 additions & 0 deletions src/runtime/os_freebsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package runtime

import "unsafe"

type mOS struct{}

//go:noescape
func thr_new(param *thrparam, size int32)

Expand Down
2 changes: 2 additions & 0 deletions src/runtime/os_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package runtime

import "unsafe"

type mOS struct{}

//go:noescape
func futex(addr unsafe.Pointer, op int32, val uint32, ts, addr2 unsafe.Pointer, val3 uint32) int32

Expand Down
2 changes: 2 additions & 0 deletions src/runtime/os_nacl.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package runtime

import "unsafe"

type mOS struct{}

func nacl_exception_stack(p uintptr, size int32) int32
func nacl_exception_handler(fn uintptr, arg unsafe.Pointer) int32
func nacl_sem_create(flag int32) int32
Expand Down
2 changes: 2 additions & 0 deletions src/runtime/os_netbsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package runtime

import "unsafe"

type mOS struct{}

//go:noescape
func setitimer(mode int32, new, old *itimerval)

Expand Down
2 changes: 2 additions & 0 deletions src/runtime/os_openbsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

package runtime

type mOS struct{}

//go:noescape
func setitimer(mode int32, new, old *itimerval)

Expand Down
5 changes: 5 additions & 0 deletions src/runtime/os_plan9.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ package runtime

import "unsafe"

type mOS struct {
notesig *int8
errstr *byte
}

func closefd(fd int32) int32

//go:noescape
Expand Down
18 changes: 18 additions & 0 deletions src/runtime/os_solaris.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,24 @@ package runtime

import "unsafe"

type mts struct {
tv_sec int64
tv_nsec int64
}

type mscratch struct {
v [6]uintptr
}

type mOS struct {
perrno *int32 // pointer to tls errno
// these are here because they are too large to be on the stack
// of low-level NOSPLIT functions.
//LibCall libcall;
ts mts
scratch mscratch
}

type libcFunc uintptr

var asmsysvicall6 libcFunc
Expand Down
2 changes: 2 additions & 0 deletions src/runtime/os_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package runtime

import "unsafe"

type mOS struct{}

type stdFunction *byte

//go:linkname os_sigpipe os.sigpipe
Expand Down
22 changes: 1 addition & 21 deletions src/runtime/runtime2.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,15 +269,6 @@ type g struct {
gcAssistBytes int64
}

type mts struct {
tv_sec int64
tv_nsec int64
}

type mscratch struct {
v [6]uintptr
}

type m struct {
g0 *g // goroutine with scheduling stack
morebuf gobuf // gobuf arg to morestack
Expand Down Expand Up @@ -343,18 +334,7 @@ type m struct {
libcallg guintptr
syscall libcall // stores syscall parameters on windows
//#endif
//#ifdef GOOS_solaris
perrno *int32 // pointer to tls errno
// these are here because they are too large to be on the stack
// of low-level NOSPLIT functions.
//LibCall libcall;
ts mts
scratch mscratch
//#endif
//#ifdef GOOS_plan9
notesig *int8
errstr *byte
//#endif
mOS
}

type p struct {
Expand Down
2 changes: 1 addition & 1 deletion src/runtime/sys_plan9_386.s
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ TEXT runtime·errstr(SB),NOSPLIT,$8-8
get_tls(AX)
MOVL g(AX), BX
MOVL g_m(BX), BX
MOVL m_errstr(BX), CX
MOVL (m_mOS+mOS_errstr)(BX), CX
MOVL CX, 0(SP)
MOVL $ERRMAX, 4(SP)
CALL errstr<>(SB)
Expand Down
2 changes: 1 addition & 1 deletion src/runtime/sys_plan9_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ TEXT runtime·errstr(SB),NOSPLIT,$16-16
get_tls(AX)
MOVQ g(AX), BX
MOVQ g_m(BX), BX
MOVQ m_errstr(BX), CX
MOVQ (m_mOS+mOS_errstr)(BX), CX
MOVQ CX, 0(SP)
MOVQ $ERRMAX, 8(SP)
CALL errstr<>(SB)
Expand Down
14 changes: 7 additions & 7 deletions src/runtime/sys_solaris_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ TEXT runtime·miniterrno(SB),NOSPLIT,$0
get_tls(CX)
MOVQ g(CX), BX
MOVQ g_m(BX), BX
MOVQ AX, m_perrno(BX)
MOVQ AX, (m_mOS+mOS_perrno)(BX)
RET

// int64 runtime·nanotime1(void);
Expand Down Expand Up @@ -81,7 +81,7 @@ TEXT runtime·asmsysvicall6(SB),NOSPLIT,$0
get_tls(CX)
MOVQ g(CX), BX
MOVQ g_m(BX), BX
MOVQ m_perrno(BX), DX
MOVQ (m_mOS+mOS_perrno)(BX), DX
CMPQ DX, $0
JEQ skiperrno1
MOVL $0, 0(DX)
Expand Down Expand Up @@ -109,7 +109,7 @@ skipargs:
get_tls(CX)
MOVQ g(CX), BX
MOVQ g_m(BX), BX
MOVQ m_perrno(BX), AX
MOVQ (m_mOS+mOS_perrno)(BX), AX
CMPQ AX, $0
JEQ skiperrno2
MOVL 0(AX), AX
Expand Down Expand Up @@ -196,7 +196,7 @@ allgood:
MOVQ R10, 176(SP)

// save m->scratch
LEAQ m_scratch(BP), R11
LEAQ (m_mOS+mOS_scratch)(BP), R11
MOVQ 0(R11), R10
MOVQ R10, 112(SP)
MOVQ 8(R11), R10
Expand All @@ -211,7 +211,7 @@ allgood:
MOVQ R10, 152(SP)

// save errno, it might be EINTR; stuff we do here might reset it.
MOVQ m_perrno(BP), R10
MOVQ (m_mOS+mOS_perrno)(BP), R10
MOVL 0(R10), R10
MOVQ R10, 160(SP)

Expand Down Expand Up @@ -244,7 +244,7 @@ allgood:
MOVQ R10, libcall_r2(R11)

// restore scratch
LEAQ m_scratch(BP), R11
LEAQ (m_mOS+mOS_scratch)(BP), R11
MOVQ 112(SP), R10
MOVQ R10, 0(R11)
MOVQ 120(SP), R10
Expand All @@ -259,7 +259,7 @@ allgood:
MOVQ R10, 40(R11)

// restore errno
MOVQ m_perrno(BP), R11
MOVQ (m_mOS+mOS_perrno)(BP), R11
MOVQ 160(SP), R10
MOVL R10, 0(R11)

Expand Down

0 comments on commit 58e3ae2

Please sign in to comment.