openmp: Fix max_vf testcases with -march=cascadelake
[official-gcc.git] / libgo / go / cmd / internal / objabi / path.go
blobaacab9a0ca7fa920d980e5dd940a7669cf7ac61a
1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package objabi
7 import "strings"
9 // PathToPrefix converts raw string to the prefix that will be used in the
10 // symbol table. All control characters, space, '%' and '"', as well as
11 // non-7-bit clean bytes turn into %xx. The period needs escaping only in the
12 // last segment of the path, and it makes for happier users if we escape that as
13 // little as possible.
14 func PathToPrefix(s string) string {
15 slash := strings.LastIndex(s, "/")
16 // check for chars that need escaping
17 n := 0
18 for r := 0; r < len(s); r++ {
19 if c := s[r]; c <= ' ' || (c == '.' && r > slash) || c == '%' || c == '"' || c >= 0x7F {
20 n++
24 // quick exit
25 if n == 0 {
26 return s
29 // escape
30 const hex = "0123456789abcdef"
31 p := make([]byte, 0, len(s)+2*n)
32 for r := 0; r < len(s); r++ {
33 if c := s[r]; c <= ' ' || (c == '.' && r > slash) || c == '%' || c == '"' || c >= 0x7F {
34 p = append(p, '%', hex[c>>4], hex[c&0xF])
35 } else {
36 p = append(p, c)
40 return string(p)
43 // IsRuntimePackagePath examines 'pkgpath' and returns TRUE if it
44 // belongs to the collection of "runtime-related" packages, including
45 // "runtime" itself, "reflect", "syscall", and the
46 // "runtime/internal/*" packages. The compiler and/or assembler in
47 // some cases need to be aware of when they are building such a
48 // package, for example to enable features such as ABI selectors in
49 // assembly sources.
51 // Keep in sync with cmd/dist/build.go:IsRuntimePackagePath.
52 func IsRuntimePackagePath(pkgpath string) bool {
53 rval := false
54 switch pkgpath {
55 case "runtime":
56 rval = true
57 case "reflect":
58 rval = true
59 case "syscall":
60 rval = true
61 case "internal/bytealg":
62 rval = true
63 default:
64 rval = strings.HasPrefix(pkgpath, "runtime/internal")
66 return rval