]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: split plan9 and solaris's m fields into new embedded mOS type
authorMatthew Dempsky <mdempsky@google.com>
Wed, 21 Oct 2015 19:48:53 +0000 (12:48 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 22 Oct 2015 00:04:52 +0000 (00:04 +0000)
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 <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
14 files changed:
src/runtime/os_darwin.go
src/runtime/os_dragonfly.go
src/runtime/os_freebsd.go
src/runtime/os_linux.go
src/runtime/os_nacl.go
src/runtime/os_netbsd.go
src/runtime/os_openbsd.go
src/runtime/os_plan9.go
src/runtime/os_solaris.go
src/runtime/os_windows.go
src/runtime/runtime2.go
src/runtime/sys_plan9_386.s
src/runtime/sys_plan9_amd64.s
src/runtime/sys_solaris_amd64.s

index 3deafd5227ec6bb418c7a3abe6bcae7f7a80abca..0fedb707e9fb402c492f60c413944bd511f0f17d 100644 (file)
@@ -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
 
index 62fc56a1f1fed92a11fbf0ed6febdb8b9b3ddb11..d6856f11645b85613d6fdb41ce0abc407d52e0c0 100644 (file)
@@ -6,6 +6,8 @@ package runtime
 
 import "unsafe"
 
+type mOS struct{}
+
 //go:noescape
 func lwp_create(param *lwpparams) int32
 
index bc3394c9ac650e94637c8930f4421508d9523b89..61f8fae15b000889c0be542596570be285aeedc8 100644 (file)
@@ -6,6 +6,8 @@ package runtime
 
 import "unsafe"
 
+type mOS struct{}
+
 //go:noescape
 func thr_new(param *thrparam, size int32)
 
index dc932dbaa0fa57ada433d4af99b1448afad74165..51a7fa0a75b99a3268e8e3204597a956d2bb52b7 100644 (file)
@@ -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
 
index efa8fa12b911fdf7db82b866223a2a8b8c64799f..58330d2810c9a0e81807caf3390dd020cef48060 100644 (file)
@@ -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
index 4fa4a416bdc70aab9d9c3754e7fc052264343181..659ec2d65a517b54e1fee07048578006570cc030 100644 (file)
@@ -6,6 +6,8 @@ package runtime
 
 import "unsafe"
 
+type mOS struct{}
+
 //go:noescape
 func setitimer(mode int32, new, old *itimerval)
 
index 8a97a738f770ece34a450391e7a5af36609bd519..74a838fa416f23bff2a9751a75aa437c1475a42b 100644 (file)
@@ -4,6 +4,8 @@
 
 package runtime
 
+type mOS struct{}
+
 //go:noescape
 func setitimer(mode int32, new, old *itimerval)
 
index 6def35ccadeded25595d0ed390059c4ccc763f0b..3b3e940cbc93d8b72e46519adc32deac7a7d8608 100644 (file)
@@ -6,6 +6,11 @@ package runtime
 
 import "unsafe"
 
+type mOS struct {
+       notesig *int8
+       errstr  *byte
+}
+
 func closefd(fd int32) int32
 
 //go:noescape
index 634e4cf914a07bb1559da7227bfff14bb09f87f5..129653ef19f0561213e36e0f349f18c4de0e5aa3 100644 (file)
@@ -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
index 545b416201ae6891ff75979c2c53418681a26fdf..22f7daad5182b870287c899fb3033969c87fdd74 100644 (file)
@@ -6,6 +6,8 @@ package runtime
 
 import "unsafe"
 
+type mOS struct{}
+
 type stdFunction *byte
 
 //go:linkname os_sigpipe os.sigpipe
index d4e3758678fe91fef9d2592c78b57d32c1c52023..7d6c441ef570017cc1b52156e8606f75307ef987 100644 (file)
@@ -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
@@ -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 {
index cae326ada6343842d4a4d7c8b4d51f10ce151e0e..1af3cb19cd97174b1cf41329223b782925faa983 100644 (file)
@@ -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)
index 6aefe5f125f7352d23753bfa68f13456e9ed9b95..1492ef2fed6059407102f08bf4bd1c2b2509e8a8 100644 (file)
@@ -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)
index e4315645fe04f70eba09e8e3e3d32d6f27fd735f..978c9ffeb4b5bd447a2fb3b83996cf51e5b5504c 100644 (file)
@@ -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);
@@ -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)
@@ -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
@@ -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
@@ -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)
 
@@ -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
@@ -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)