From: Brad Fitzpatrick Date: Thu, 1 Mar 2018 22:22:44 +0000 (+0000) Subject: Revert "runtime: use bytes.IndexByte in findnull" X-Git-Tag: go1.11beta1~1380 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1fadbc1a76b2d9a11453ef4e21b77c353493ac2c;p=gostls13.git Revert "runtime: use bytes.IndexByte in findnull" This reverts commit 7365fac2dbd01960268ee051ed03d961258d4ef4. Reason for revert: breaks the build on some architectures, reading unmapped pages? Change-Id: I3a8c02dc0b649269faacea79ecd8213defa97c54 Reviewed-on: https://go-review.googlesource.com/97995 Reviewed-by: Brad Fitzpatrick --- diff --git a/misc/cgo/test/basic.go b/misc/cgo/test/basic.go index 2655a66e38..3ceb4ce847 100644 --- a/misc/cgo/test/basic.go +++ b/misc/cgo/test/basic.go @@ -31,8 +31,6 @@ struct S { int x; }; -const char *cstr = "abcefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890"; - extern enum E myConstFunc(struct S* const ctx, int const id, struct S **const filter); enum E myConstFunc(struct S *const ctx, int const id, struct S **const filter) { return 0; } @@ -151,18 +149,6 @@ func benchCgoCall(b *testing.B) { } } -var sinkString string - -func benchGoString(b *testing.B) { - for i := 0; i < b.N; i++ { - sinkString = C.GoString(C.cstr) - } - const want = "abcefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890" - if sinkString != want { - b.Fatalf("%q != %q", sinkString, want) - } -} - // Issue 2470. func testUnsignedInt(t *testing.T) { a := (int64)(C.UINT32VAL) diff --git a/misc/cgo/test/cgo_test.go b/misc/cgo/test/cgo_test.go index 01ab7eba5e..cfacb9c40d 100644 --- a/misc/cgo/test/cgo_test.go +++ b/misc/cgo/test/cgo_test.go @@ -88,5 +88,4 @@ func Test6907Go(t *testing.T) { test6907Go(t) } func Test21897(t *testing.T) { test21897(t) } func Test22906(t *testing.T) { test22906(t) } -func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) } -func BenchmarkGoString(b *testing.B) { benchGoString(b) } +func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) } diff --git a/src/runtime/error.go b/src/runtime/error.go index 2435f98b7a..e1291e1543 100644 --- a/src/runtime/error.go +++ b/src/runtime/error.go @@ -121,7 +121,6 @@ func printany(i interface{}) { // strings.IndexByte is implemented in runtime/asm_$goarch.s // but amusingly we need go:linkname to get access to it here in the runtime. //go:linkname stringsIndexByte strings.IndexByte -//go:noescape func stringsIndexByte(s string, c byte) int // panicwrap generates a panic for a call to a wrapped value method diff --git a/src/runtime/string.go b/src/runtime/string.go index 0ea162235c..5c83895995 100644 --- a/src/runtime/string.go +++ b/src/runtime/string.go @@ -407,9 +407,12 @@ func findnull(s *byte) int { if s == nil { return 0 } - ss := stringStruct{unsafe.Pointer(s), maxAlloc/2 - 1} - t := *(*string)(unsafe.Pointer(&ss)) - return stringsIndexByte(t, 0) + p := (*[maxAlloc/2 - 1]byte)(unsafe.Pointer(s)) + l := 0 + for p[l] != 0 { + l++ + } + return l } func findnullw(s *uint16) int {