// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package obj import ( "fmt" "os" "strings" ) // go-specific code shared across loaders (5l, 6l, 8l). var ( Framepointer_enabled int Fieldtrack_enabled int ) // Toolchain experiments. // These are controlled by the GOEXPERIMENT environment // variable recorded when the toolchain is built. // This list is also known to cmd/gc. var exper = []struct { name string val *int }{ {"fieldtrack", &Fieldtrack_enabled}, {"framepointer", &Framepointer_enabled}, } func addexp(s string) { for i := 0; i < len(exper); i++ { if exper[i].name == s { if exper[i].val != nil { *exper[i].val = 1 } return } } fmt.Printf("unknown experiment %s\n", s) os.Exit(2) } func init() { for _, f := range strings.Split(goexperiment, ",") { if f != "" { addexp(f) } } } func Nopout(p *Prog) { p.As = ANOP p.Scond = 0 p.From = Addr{} p.From3 = nil p.Reg = 0 p.To = Addr{} } func Nocache(p *Prog) { p.Optab = 0 p.From.Class = 0 if p.From3 != nil { p.From3.Class = 0 } p.To.Class = 0 } func Expstring() string { buf := "X" for i := range exper { if *exper[i].val != 0 { buf += "," + exper[i].name } } if buf == "X" { buf += ",none" } return "X:" + buf[2:] }