mirror of https://github.com/golang/go.git
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
// 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])
|
|
}
|
|
}
|
|
}
|