github.com/yanyiwu/go@v0.0.0-20150106053140-03d6637dbb7f/src/cmd/link/layout_test.go (about) 1 // Copyright 2014 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. 4 5 package main 6 7 import ( 8 "bytes" 9 "strings" 10 "testing" 11 ) 12 13 func TestLayout(t *testing.T) { 14 p := Prog{GOOS: "darwin", GOARCH: "amd64", StartSym: "text_start"} 15 p.omitRuntime = true 16 p.Error = func(s string) { t.Error(s) } 17 var buf bytes.Buffer 18 const obj = "testdata/layout.6" 19 p.link(&buf, obj) 20 if p.NumError > 0 { 21 return // already reported 22 } 23 if len(p.Dead) > 0 { 24 t.Errorf("%s: unexpected dead symbols %v", obj, p.Dead) 25 return 26 } 27 28 for _, sym := range p.SymOrder { 29 if p.isAuto(sym.SymID) { 30 continue 31 } 32 if sym.Section == nil { 33 t.Errorf("%s: symbol %s is missing section", obj, sym) 34 continue 35 } 36 i := strings.Index(sym.Name, "_") 37 if i < 0 { 38 t.Errorf("%s: unexpected symbol %s", obj, sym) 39 continue 40 } 41 if sym.Section.Name != sym.Name[:i] { 42 t.Errorf("%s: symbol %s in section %s, want %s", obj, sym, sym.Section.Name, sym.Name[:i]) 43 } 44 } 45 }