Skip to content
Snippets Groups Projects
layout_test.go 1.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • // 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])
    		}
    	}
    }