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 }