| // Copyright 2014 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 main |
| |
| import ( |
| "bytes" |
| "strings" |
| "testing" |
| ) |
| |
| func TestLayout(t *testing.T) { |
| p := Prog{GOOS: "darwin", GOARCH: "amd64", StartSym: "text_start"} |
| p.omitRuntime = true |
| p.Error = func(s string) { t.Error(s) } |
| var buf bytes.Buffer |
| const obj = "testdata/layout.6" |
| p.link(&buf, obj) |
| if p.NumError > 0 { |
| return // already reported |
| } |
| if len(p.Dead) > 0 { |
| t.Errorf("%s: unexpected dead symbols %v", obj, p.Dead) |
| return |
| } |
| |
| for _, sym := range p.SymOrder { |
| if p.isAuto(sym.SymID) { |
| continue |
| } |
| if sym.Section == nil { |
| t.Errorf("%s: symbol %s is missing section", obj, sym) |
| continue |
| } |
| i := strings.Index(sym.Name, "_") |
| if i < 0 { |
| t.Errorf("%s: unexpected symbol %s", obj, sym) |
| continue |
| } |
| if sym.Section.Name != sym.Name[:i] { |
| t.Errorf("%s: symbol %s in section %s, want %s", obj, sym, sym.Section.Name, sym.Name[:i]) |
| } |
| } |
| } |