aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2018-03-01 22:22:44 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2018-03-01 22:22:51 +0000
commit1fadbc1a76b2d9a11453ef4e21b77c353493ac2c (patch)
tree8e2b488ca5bb3d6a702523cc6707c4d2c5f0d732 /src/runtime
parentf1fc9da3167e4424935524a1479442d28e9fd72a (diff)
downloadgo-1fadbc1a76b2d9a11453ef4e21b77c353493ac2c.tar.xz
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 <bradfitz@golang.org>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/error.go1
-rw-r--r--src/runtime/string.go9
2 files changed, 6 insertions, 4 deletions
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 {