aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/util.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2017-04-18 12:53:25 -0700
committerMatthew Dempsky <mdempsky@google.com>2017-04-19 00:00:09 +0000
commit1e3570ac86f6aeb7f8ce70b5ad236a5dd92ec804 (patch)
tree6bb1e704f068dee9f7e95eb0d1b5ed1829441c8b /src/cmd/internal/obj/util.go
parentf71f32e5e155ae5b7f60005c939746637086f30e (diff)
downloadgo-1e3570ac86f6aeb7f8ce70b5ad236a5dd92ec804.tar.xz
cmd/internal/objabi: extract shared functionality from obj
Now only cmd/asm and cmd/compile depend on cmd/internal/obj. Changing the assembler backends no longer requires reinstalling cmd/link or cmd/addr2line. There's also now one canonical definition of the object file format in cmd/internal/objabi/doc.go, with a warning to update all three implementations. objabi is still something of a grab bag of unrelated code (e.g., flag and environment variable handling probably belong in a separate "tool" package), but this is still progress. Fixes #15165. Fixes #20026. Change-Id: Ic4b92fac7d0d35438e0d20c9579aad4085c5534c Reviewed-on: https://go-review.googlesource.com/40972 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Diffstat (limited to 'src/cmd/internal/obj/util.go')
-rw-r--r--src/cmd/internal/obj/util.go53
1 files changed, 4 insertions, 49 deletions
diff --git a/src/cmd/internal/obj/util.go b/src/cmd/internal/obj/util.go
index e800ea6efb..2e3ba15542 100644
--- a/src/cmd/internal/obj/util.go
+++ b/src/cmd/internal/obj/util.go
@@ -6,58 +6,13 @@ package obj
import (
"bytes"
+ "cmd/internal/objabi"
"fmt"
- "log"
- "os"
"strings"
- "time"
)
const REG_NONE = 0
-var start time.Time
-
-func Cputime() float64 {
- if start.IsZero() {
- start = time.Now()
- }
- return time.Since(start).Seconds()
-}
-
-func envOr(key, value string) string {
- if x := os.Getenv(key); x != "" {
- return x
- }
- return value
-}
-
-var (
- GOROOT = envOr("GOROOT", defaultGOROOT)
- GOARCH = envOr("GOARCH", defaultGOARCH)
- GOOS = envOr("GOOS", defaultGOOS)
- GO386 = envOr("GO386", defaultGO386)
- GOARM = goarm()
- Version = version
-)
-
-func goarm() int {
- switch v := envOr("GOARM", defaultGOARM); v {
- case "5":
- return 5
- case "6":
- return 6
- case "7":
- return 7
- }
- // Fail here, rather than validate at multiple call sites.
- log.Fatalf("Invalid GOARM value. Must be 5, 6, or 7.")
- panic("unreachable")
-}
-
-func Getgoextlinkenabled() string {
- return envOr("GO_EXTLINK_ENABLED", defaultGO_EXTLINK_ENABLED)
-}
-
func (p *Prog) Line() string {
return p.Ctxt.OutermostPos(p.Pos).Format(false)
}
@@ -240,7 +195,7 @@ func Dconv(p *Prog, a *Addr) string {
}
case TYPE_TEXTSIZE:
- if a.Val.(int32) == ArgsSizeUnknown {
+ if a.Val.(int32) == objabi.ArgsSizeUnknown {
str = fmt.Sprintf("$%d", a.Offset)
} else {
str = fmt.Sprintf("$%d-%d", a.Offset, a.Val.(int32))
@@ -263,7 +218,7 @@ func Dconv(p *Prog, a *Addr) string {
case TYPE_SHIFT:
v := int(a.Offset)
ops := "<<>>->@>"
- switch GOARCH {
+ switch objabi.GOARCH {
case "arm":
op := ops[((v>>5)&3)<<1:]
if v&(1<<4) != 0 {
@@ -278,7 +233,7 @@ func Dconv(p *Prog, a *Addr) string {
op := ops[((v>>22)&3)<<1:]
str = fmt.Sprintf("R%d%c%c%d", (v>>16)&31, op[0], op[1], (v>>10)&63)
default:
- panic("TYPE_SHIFT is not supported on " + GOARCH)
+ panic("TYPE_SHIFT is not supported on " + objabi.GOARCH)
}
case TYPE_REGREG: