github.com/guyezi/gofrontend@v0.0.0-20200228202240-7a62a49e62c0/libgo/go/debug/xcoff/file_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 xcoff
     6  
     7  import (
     8  	"reflect"
     9  	"testing"
    10  )
    11  
    12  type fileTest struct {
    13  	file     string
    14  	hdr      FileHeader
    15  	sections []*SectionHeader
    16  	needed   []string
    17  }
    18  
    19  var fileTests = []fileTest{
    20  	{
    21  		"testdata/gcc-ppc32-aix-exec",
    22  		FileHeader{U802TOCMAGIC},
    23  		[]*SectionHeader{
    24  			{".text", 0x10000150, 0x00000bbd, STYP_TEXT},
    25  			{".data", 0x20000d0d, 0x0000042b, STYP_DATA},
    26  			{".bss", 0x20001138, 0x00000218, STYP_BSS},
    27  			{".loader", 0x00000000, 0x000004b3, STYP_LOADER},
    28  			{".debug", 0x00000000, 0x0000751e, STYP_DEBUG},
    29  		},
    30  		[]string{"libc.a"},
    31  	},
    32  	{
    33  		"testdata/gcc-ppc64-aix-exec",
    34  		FileHeader{U64_TOCMAGIC},
    35  		[]*SectionHeader{
    36  			{".text", 0x10000240, 0x00000afd, STYP_TEXT},
    37  			{".data", 0x20000d3d, 0x000002e3, STYP_DATA},
    38  			{".bss", 0x20001020, 0x00000428, STYP_BSS},
    39  			{".loader", 0x00000000, 0x00000535, STYP_LOADER},
    40  			{".debug", 0x00000000, 0x00008238, STYP_DEBUG},
    41  		},
    42  		[]string{"libc.a"},
    43  	},
    44  	{
    45  		"testdata/xlc-ppc32-aix-exec",
    46  		FileHeader{U802TOCMAGIC},
    47  		[]*SectionHeader{
    48  			{".text", 0x10000150, 0x00000372, STYP_TEXT},
    49  			{".data", 0x200004c2, 0x0000032e, STYP_DATA},
    50  			{".bss", 0x200007f0, 0x00000004, STYP_BSS},
    51  			{".loader", 0x00000000, 0x0000029d, STYP_LOADER},
    52  			{".debug", 0x00000000, 0x0000008f, STYP_DEBUG},
    53  		},
    54  		[]string{"libc.a"},
    55  	},
    56  	{
    57  		"testdata/xlc-ppc64-aix-exec",
    58  		FileHeader{U64_TOCMAGIC},
    59  		[]*SectionHeader{
    60  			{".text", 0x100000240, 0x00000326, STYP_TEXT},
    61  			{".data", 0x110000566, 0x00000182, STYP_DATA},
    62  			{".bss", 0x1100006e8, 0x00000008, STYP_BSS},
    63  			{".loader", 0x00000000, 0x0000029b, STYP_LOADER},
    64  			{".debug", 0x00000000, 0x000000ea, STYP_DEBUG},
    65  		},
    66  		[]string{"libc.a"},
    67  	},
    68  	{
    69  		"testdata/gcc-ppc32-aix-dwarf2-exec",
    70  		FileHeader{U802TOCMAGIC},
    71  		[]*SectionHeader{
    72  			{".text", 0x10000290, 0x00000bbd, STYP_TEXT},
    73  			{".data", 0x20000e4d, 0x00000437, STYP_DATA},
    74  			{".bss", 0x20001284, 0x0000021c, STYP_BSS},
    75  			{".loader", 0x00000000, 0x000004b3, STYP_LOADER},
    76  			{".dwline", 0x00000000, 0x000000df, STYP_DWARF | SSUBTYP_DWLINE},
    77  			{".dwinfo", 0x00000000, 0x00000314, STYP_DWARF | SSUBTYP_DWINFO},
    78  			{".dwabrev", 0x00000000, 0x000000d6, STYP_DWARF | SSUBTYP_DWABREV},
    79  			{".dwarnge", 0x00000000, 0x00000020, STYP_DWARF | SSUBTYP_DWARNGE},
    80  			{".dwloc", 0x00000000, 0x00000074, STYP_DWARF | SSUBTYP_DWLOC},
    81  			{".debug", 0x00000000, 0x00005e4f, STYP_DEBUG},
    82  		},
    83  		[]string{"libc.a"},
    84  	},
    85  	{
    86  		"testdata/gcc-ppc64-aix-dwarf2-exec",
    87  		FileHeader{U64_TOCMAGIC},
    88  		[]*SectionHeader{
    89  			{".text", 0x10000480, 0x00000afd, STYP_TEXT},
    90  			{".data", 0x20000f7d, 0x000002f3, STYP_DATA},
    91  			{".bss", 0x20001270, 0x00000428, STYP_BSS},
    92  			{".loader", 0x00000000, 0x00000535, STYP_LOADER},
    93  			{".dwline", 0x00000000, 0x000000b4, STYP_DWARF | SSUBTYP_DWLINE},
    94  			{".dwinfo", 0x00000000, 0x0000036a, STYP_DWARF | SSUBTYP_DWINFO},
    95  			{".dwabrev", 0x00000000, 0x000000b5, STYP_DWARF | SSUBTYP_DWABREV},
    96  			{".dwarnge", 0x00000000, 0x00000040, STYP_DWARF | SSUBTYP_DWARNGE},
    97  			{".dwloc", 0x00000000, 0x00000062, STYP_DWARF | SSUBTYP_DWLOC},
    98  			{".debug", 0x00000000, 0x00006605, STYP_DEBUG},
    99  		},
   100  		[]string{"libc.a"},
   101  	},
   102  }
   103  
   104  func TestOpen(t *testing.T) {
   105  	for i := range fileTests {
   106  		tt := &fileTests[i]
   107  
   108  		f, err := Open(tt.file)
   109  		if err != nil {
   110  			t.Error(err)
   111  			continue
   112  		}
   113  		if !reflect.DeepEqual(f.FileHeader, tt.hdr) {
   114  			t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr)
   115  			continue
   116  		}
   117  
   118  		for i, sh := range f.Sections {
   119  			if i >= len(tt.sections) {
   120  				break
   121  			}
   122  			have := &sh.SectionHeader
   123  			want := tt.sections[i]
   124  			if !reflect.DeepEqual(have, want) {
   125  				t.Errorf("open %s, section %d:\n\thave %#v\n\twant %#v\n", tt.file, i, have, want)
   126  			}
   127  		}
   128  		tn := len(tt.sections)
   129  		fn := len(f.Sections)
   130  		if tn != fn {
   131  			t.Errorf("open %s: len(Sections) = %d, want %d", tt.file, fn, tn)
   132  		}
   133  		tl := tt.needed
   134  		fl, err := f.ImportedLibraries()
   135  		if err != nil {
   136  			t.Error(err)
   137  		}
   138  		if !reflect.DeepEqual(tl, fl) {
   139  			t.Errorf("open %s: loader import = %v, want %v", tt.file, tl, fl)
   140  		}
   141  	}
   142  }
   143  
   144  func TestOpenFailure(t *testing.T) {
   145  	filename := "file.go"    // not an XCOFF object file
   146  	_, err := Open(filename) // don't crash
   147  	if err == nil {
   148  		t.Errorf("open %s: succeeded unexpectedly", filename)
   149  	}
   150  }