mirror of https://github.com/golang/go.git
internal/runtime/maps: enable race for map functions in internal/runtime/maps
For #54766. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest-swissmap Change-Id: Iebc7f5482299cb7c4ecccc4c2eb46b4bc42c5fc3 Reviewed-on: https://go-review.googlesource.com/c/go/+/616459 Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
e25b913127
commit
3a6795554d
|
|
@ -7,6 +7,7 @@
|
||||||
package race
|
package race
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"internal/abi"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -30,9 +31,21 @@ func Enable() {
|
||||||
func Read(addr unsafe.Pointer) {
|
func Read(addr unsafe.Pointer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ReadPC(addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadObjectPC(t *abi.Type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
}
|
||||||
|
|
||||||
func Write(addr unsafe.Pointer) {
|
func Write(addr unsafe.Pointer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WritePC(addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func WriteObjectPC(t *abi.Type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
}
|
||||||
|
|
||||||
func ReadRange(addr unsafe.Pointer, len int) {
|
func ReadRange(addr unsafe.Pointer, len int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
package race
|
package race
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"internal/abi"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -32,9 +33,21 @@ func Enable()
|
||||||
//go:linkname Read
|
//go:linkname Read
|
||||||
func Read(addr unsafe.Pointer)
|
func Read(addr unsafe.Pointer)
|
||||||
|
|
||||||
|
//go:linkname ReadPC
|
||||||
|
func ReadPC(addr unsafe.Pointer, callerpc, pc uintptr)
|
||||||
|
|
||||||
|
//go:linkname ReadObjectPC
|
||||||
|
func ReadObjectPC(t *abi.Type, addr unsafe.Pointer, callerpc, pc uintptr)
|
||||||
|
|
||||||
//go:linkname Write
|
//go:linkname Write
|
||||||
func Write(addr unsafe.Pointer)
|
func Write(addr unsafe.Pointer)
|
||||||
|
|
||||||
|
//go:linkname WritePC
|
||||||
|
func WritePC(addr unsafe.Pointer, callerpc, pc uintptr)
|
||||||
|
|
||||||
|
//go:linkname WriteObjectPC
|
||||||
|
func WriteObjectPC(t *abi.Type, addr unsafe.Pointer, callerpc, pc uintptr)
|
||||||
|
|
||||||
//go:linkname ReadRange
|
//go:linkname ReadRange
|
||||||
func ReadRange(addr unsafe.Pointer, len int)
|
func ReadRange(addr unsafe.Pointer, len int)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/asan"
|
"internal/asan"
|
||||||
"internal/msan"
|
"internal/msan"
|
||||||
//"internal/runtime/sys"
|
"internal/race"
|
||||||
|
"internal/runtime/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -41,12 +42,12 @@ var zeroVal [abi.ZeroValSize]byte
|
||||||
//go:linkname runtime_mapaccess1 runtime.mapaccess1
|
//go:linkname runtime_mapaccess1 runtime.mapaccess1
|
||||||
func runtime_mapaccess1(typ *abi.SwissMapType, m *Map, key unsafe.Pointer) unsafe.Pointer {
|
func runtime_mapaccess1(typ *abi.SwissMapType, m *Map, key unsafe.Pointer) unsafe.Pointer {
|
||||||
// TODO: concurrent checks.
|
// TODO: concurrent checks.
|
||||||
//if raceenabled && m != nil {
|
if race.Enabled && m != nil {
|
||||||
// callerpc := sys.GetCallerPC()
|
callerpc := sys.GetCallerPC()
|
||||||
// pc := abi.FuncPCABIInternal(mapaccess1)
|
pc := abi.FuncPCABIInternal(runtime_mapaccess1)
|
||||||
// racereadpc(unsafe.Pointer(m), callerpc, pc)
|
race.ReadPC(unsafe.Pointer(m), callerpc, pc)
|
||||||
// raceReadObjectPC(t.Key, key, callerpc, pc)
|
race.ReadObjectPC(typ.Key, key, callerpc, pc)
|
||||||
//}
|
}
|
||||||
if msan.Enabled && m != nil {
|
if msan.Enabled && m != nil {
|
||||||
msan.Read(key, typ.Key.Size_)
|
msan.Read(key, typ.Key.Size_)
|
||||||
}
|
}
|
||||||
|
|
@ -107,12 +108,12 @@ func runtime_mapassign(typ *abi.SwissMapType, m *Map, key unsafe.Pointer) unsafe
|
||||||
if m == nil {
|
if m == nil {
|
||||||
panic(errNilAssign)
|
panic(errNilAssign)
|
||||||
}
|
}
|
||||||
//if raceenabled {
|
if race.Enabled {
|
||||||
// callerpc := sys.GetCallerPC()
|
callerpc := sys.GetCallerPC()
|
||||||
// pc := abi.FuncPCABIInternal(mapassign)
|
pc := abi.FuncPCABIInternal(runtime_mapassign)
|
||||||
// racewritepc(unsafe.Pointer(m), callerpc, pc)
|
race.WritePC(unsafe.Pointer(m), callerpc, pc)
|
||||||
// raceReadObjectPC(t.Key, key, callerpc, pc)
|
race.ReadObjectPC(typ.Key, key, callerpc, pc)
|
||||||
//}
|
}
|
||||||
if msan.Enabled {
|
if msan.Enabled {
|
||||||
msan.Read(key, typ.Key.Size_)
|
msan.Read(key, typ.Key.Size_)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,11 @@ func raceReadObjectPC(t *_type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:linkname race_ReadObjectPC internal/race.ReadObjectPC
|
||||||
|
func race_ReadObjectPC(t *abi.Type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
raceReadObjectPC(t, addr, callerpc, pc)
|
||||||
|
}
|
||||||
|
|
||||||
func raceWriteObjectPC(t *_type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
func raceWriteObjectPC(t *_type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
kind := t.Kind_ & abi.KindMask
|
kind := t.Kind_ & abi.KindMask
|
||||||
if kind == abi.Array || kind == abi.Struct {
|
if kind == abi.Array || kind == abi.Struct {
|
||||||
|
|
@ -181,12 +186,27 @@ func raceWriteObjectPC(t *_type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:linkname race_WriteObjectPC internal/race.WriteObjectPC
|
||||||
|
func race_WriteObjectPC(t *abi.Type, addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
raceWriteObjectPC(t, addr, callerpc, pc)
|
||||||
|
}
|
||||||
|
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func racereadpc(addr unsafe.Pointer, callpc, pc uintptr)
|
func racereadpc(addr unsafe.Pointer, callpc, pc uintptr)
|
||||||
|
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func racewritepc(addr unsafe.Pointer, callpc, pc uintptr)
|
func racewritepc(addr unsafe.Pointer, callpc, pc uintptr)
|
||||||
|
|
||||||
|
//go:linkname race_ReadPC internal/race.ReadPC
|
||||||
|
func race_ReadPC(addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
racereadpc(addr, callerpc, pc)
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:linkname race_WritePC internal/race.WritePC
|
||||||
|
func race_WritePC(addr unsafe.Pointer, callerpc, pc uintptr) {
|
||||||
|
racewritepc(addr, callerpc, pc)
|
||||||
|
}
|
||||||
|
|
||||||
type symbolizeCodeContext struct {
|
type symbolizeCodeContext struct {
|
||||||
pc uintptr
|
pc uintptr
|
||||||
fn *byte
|
fn *byte
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue