| // 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]) | |
| } | |
| } | |
| } |