From c90df0d293367452d193f04a18c2233d64a10d1a Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 22 Sep 2017 18:49:52 +0000 Subject: [PATCH] debug/xcoff,cmd: add XCOFF support Reviewed-on: https://go-review.googlesource.com/64592 From-SVN: r253105 --- gcc/go/gofrontend/MERGE | 2 +- libgo/Makefile.am | 5 +- libgo/Makefile.in | 5 +- libgo/go/cmd/cgo/gcc.go | 79 ++- libgo/go/cmd/cgo/out.go | 21 +- libgo/go/cmd/go/internal/work/build.go | 18 +- libgo/go/debug/dwarf/open.go | 2 +- libgo/go/debug/xcoff/file.go | 539 +++++++++++++++++++++ libgo/go/debug/xcoff/file_test.go | 150 ++++++ .../debug/xcoff/testdata/gcc-ppc32-aix-dwarf2-exec | Bin 0 -> 54694 bytes libgo/go/debug/xcoff/testdata/gcc-ppc32-aix-exec | Bin 0 -> 63312 bytes .../debug/xcoff/testdata/gcc-ppc64-aix-dwarf2-exec | Bin 0 -> 57152 bytes libgo/go/debug/xcoff/testdata/gcc-ppc64-aix-exec | Bin 0 -> 66618 bytes libgo/go/debug/xcoff/testdata/hello.c | 7 + libgo/go/debug/xcoff/testdata/xlc-ppc32-aix-exec | Bin 0 -> 6529 bytes libgo/go/debug/xcoff/testdata/xlc-ppc64-aix-exec | Bin 0 -> 6112 bytes libgo/go/debug/xcoff/xcoff.go | 262 ++++++++++ libgo/go/go/build/deps_test.go | 3 +- libgo/go/go/internal/gccgoimporter/importer.go | 42 +- 19 files changed, 1113 insertions(+), 22 deletions(-) create mode 100644 libgo/go/debug/xcoff/file.go create mode 100644 libgo/go/debug/xcoff/file_test.go create mode 100644 libgo/go/debug/xcoff/testdata/gcc-ppc32-aix-dwarf2-exec create mode 100644 libgo/go/debug/xcoff/testdata/gcc-ppc32-aix-exec create mode 100644 libgo/go/debug/xcoff/testdata/gcc-ppc64-aix-dwarf2-exec create mode 100644 libgo/go/debug/xcoff/testdata/gcc-ppc64-aix-exec create mode 100644 libgo/go/debug/xcoff/testdata/hello.c create mode 100644 libgo/go/debug/xcoff/testdata/xlc-ppc32-aix-exec create mode 100644 libgo/go/debug/xcoff/testdata/xlc-ppc64-aix-exec create mode 100644 libgo/go/debug/xcoff/xcoff.go diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 5b3206a..dcab046 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -1fcb9bb3cefb97cfab1e623826a1cc3f6aadd5f7 +e0c1f0b645b12a544b484c0f477f8fb6f5980550 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/Makefile.am b/libgo/Makefile.am index 336071d..bd0bbdd 100644 --- a/libgo/Makefile.am +++ b/libgo/Makefile.am @@ -217,7 +217,8 @@ toolexeclibgodebug_DATA = \ debug/gosym.gox \ debug/macho.gox \ debug/pe.gox \ - debug/plan9obj.gox + debug/plan9obj.gox \ + debug/xcoff.gox toolexeclibgoencodingdir = $(toolexeclibgodir)/encoding @@ -722,6 +723,7 @@ PACKAGES = \ debug/macho \ debug/pe \ debug/plan9obj \ + debug/xcoff \ encoding \ encoding/ascii85 \ encoding/asn1 \ @@ -1293,6 +1295,7 @@ TEST_PACKAGES = \ debug/macho/check \ debug/pe/check \ debug/plan9obj/check \ + debug/xcoff/check \ encoding/ascii85/check \ encoding/asn1/check \ encoding/base32/check \ diff --git a/libgo/Makefile.in b/libgo/Makefile.in index 3ace02d..064df58 100644 --- a/libgo/Makefile.in +++ b/libgo/Makefile.in @@ -612,7 +612,8 @@ toolexeclibgodebug_DATA = \ debug/gosym.gox \ debug/macho.gox \ debug/pe.gox \ - debug/plan9obj.gox + debug/plan9obj.gox \ + debug/xcoff.gox toolexeclibgoencodingdir = $(toolexeclibgodir)/encoding toolexeclibgoencoding_DATA = \ @@ -873,6 +874,7 @@ PACKAGES = \ debug/macho \ debug/pe \ debug/plan9obj \ + debug/xcoff \ encoding \ encoding/ascii85 \ encoding/asn1 \ @@ -1298,6 +1300,7 @@ TEST_PACKAGES = \ debug/macho/check \ debug/pe/check \ debug/plan9obj/check \ + debug/xcoff/check \ encoding/ascii85/check \ encoding/asn1/check \ encoding/base32/check \ diff --git a/libgo/go/cmd/cgo/gcc.go b/libgo/go/cmd/cgo/gcc.go index 03239a0..5453d1c 100644 --- a/libgo/go/cmd/cgo/gcc.go +++ b/libgo/go/cmd/cgo/gcc.go @@ -13,6 +13,7 @@ import ( "debug/elf" "debug/macho" "debug/pe" + "debug/xcoff" "encoding/binary" "errors" "flag" @@ -1289,6 +1290,10 @@ func (p *Package) gccMachine() []string { return []string{"-mabi=64"} case "mips", "mipsle": return []string{"-mabi=32"} + case "ppc64": + if goos == "aix" { + return []string{"-maix64"} + } } return nil } @@ -1616,7 +1621,79 @@ func (p *Package) gccDebug(stdin []byte, nnames int) (d *dwarf.Data, ints []int6 return d, ints, floats, strs } - fatalf("cannot parse gcc output %s as ELF, Mach-O, PE object", gccTmp()) + if f, err := xcoff.Open(gccTmp()); err == nil { + defer f.Close() + d, err := f.DWARF() + if err != nil { + fatalf("cannot load DWARF output from %s: %v", gccTmp(), err) + } + bo := binary.BigEndian + for _, s := range f.Symbols { + switch { + case isDebugInts(s.Name): + if i := int(s.SectionNumber) - 1; 0 <= i && i < len(f.Sections) { + sect := f.Sections[i] + if s.Value < sect.Size { + if sdat, err := sect.Data(); err == nil { + data := sdat[s.Value:] + ints = make([]int64, len(data)/8) + for i := range ints { + ints[i] = int64(bo.Uint64(data[i*8:])) + } + } + } + } + case isDebugFloats(s.Name): + if i := int(s.SectionNumber) - 1; 0 <= i && i < len(f.Sections) { + sect := f.Sections[i] + if s.Value < sect.Size { + if sdat, err := sect.Data(); err == nil { + data := sdat[s.Value:] + floats = make([]float64, len(data)/8) + for i := range floats { + floats[i] = math.Float64frombits(bo.Uint64(data[i*8:])) + } + } + } + } + default: + if n := indexOfDebugStr(s.Name); n != -1 { + if i := int(s.SectionNumber) - 1; 0 <= i && i < len(f.Sections) { + sect := f.Sections[i] + if s.Value < sect.Size { + if sdat, err := sect.Data(); err == nil { + data := sdat[s.Value:] + strdata[n] = string(data) + } + } + } + break + } + if n := indexOfDebugStrlen(s.Name); n != -1 { + if i := int(s.SectionNumber) - 1; 0 <= i && i < len(f.Sections) { + sect := f.Sections[i] + if s.Value < sect.Size { + if sdat, err := sect.Data(); err == nil { + data := sdat[s.Value:] + strlen := bo.Uint64(data[:8]) + if strlen > (1<<(uint(p.IntSize*8)-1) - 1) { // greater than MaxInt? + fatalf("string literal too big") + } + strlens[n] = int(strlen) + } + } + } + break + } + } + } + + buildStrings() + + return d, ints, floats, strs + } + + fatalf("cannot parse gcc output %s as ELF, Mach-O, PE, XCOFF object", gccTmp()) panic("not reached") } diff --git a/libgo/go/cmd/cgo/out.go b/libgo/go/cmd/cgo/out.go index c4ff07d..72dd884 100644 --- a/libgo/go/cmd/cgo/out.go +++ b/libgo/go/cmd/cgo/out.go @@ -9,6 +9,7 @@ import ( "debug/elf" "debug/macho" "debug/pe" + "debug/xcoff" "fmt" "go/ast" "go/printer" @@ -324,7 +325,25 @@ func dynimport(obj string) { return } - fatalf("cannot parse %s as ELF, Mach-O or PE", obj) + if f, err := xcoff.Open(obj); err == nil { + sym, err := f.ImportedSymbols() + if err != nil { + fatalf("cannot load imported symbols from XCOFF file %s: %v", obj, err) + } + for _, s := range sym { + fmt.Fprintf(stdout, "//go:cgo_import_dynamic %s %s %q\n", s.Name, s.Name, s.Library) + } + lib, err := f.ImportedLibraries() + if err != nil { + fatalf("cannot load imported libraries from XCOFF file %s: %v", obj, err) + } + for _, l := range lib { + fmt.Fprintf(stdout, "//go:cgo_import_dynamic _ _ %q\n", l) + } + return + } + + fatalf("cannot parse %s as ELF, Mach-O, PE or XCOFF", obj) } // Construct a gcc struct matching the gc argument frame. diff --git a/libgo/go/cmd/go/internal/work/build.go b/libgo/go/cmd/go/internal/work/build.go index de8c493..562730b 100644 --- a/libgo/go/cmd/go/internal/work/build.go +++ b/libgo/go/cmd/go/internal/work/build.go @@ -9,6 +9,7 @@ import ( "bytes" "container/heap" "debug/elf" + "debug/xcoff" "errors" "flag" "fmt" @@ -745,9 +746,13 @@ func (b *Builder) Init() { func readpkglist(shlibpath string) (pkgs []*load.Package) { var stk load.ImportStack if cfg.BuildToolchainName == "gccgo" { - f, _ := elf.Open(shlibpath) - sect := f.Section(".go_export") - data, _ := sect.Data() + var data []byte + if f, err := elf.Open(shlibpath); err == nil { + sect := f.Section(".go_export") + data, _ = sect.Data() + } else if f, err := xcoff.Open(shlibpath); err == nil { + data = f.CSect(".go_export") + } scanner := bufio.NewScanner(bytes.NewBuffer(data)) for scanner.Scan() { t := scanner.Text() @@ -1815,6 +1820,7 @@ func (b *Builder) cover(a *Action, dst, src string, perm os.FileMode, varName st var objectMagic = [][]byte{ {'!', '<', 'a', 'r', 'c', 'h', '>', '\n'}, // Package archive + {'<', 'b', 'i', 'g', 'a', 'f', '>', '\n'}, // Package archive (AIX format) {'\x7F', 'E', 'L', 'F'}, // ELF {0xFE, 0xED, 0xFA, 0xCE}, // Mach-O big-endian 32-bit {0xFE, 0xED, 0xFA, 0xCF}, // Mach-O big-endian 64-bit @@ -1824,6 +1830,8 @@ var objectMagic = [][]byte{ {0x00, 0x00, 0x01, 0xEB}, // Plan 9 i386 {0x00, 0x00, 0x8a, 0x97}, // Plan 9 amd64 {0x00, 0x00, 0x06, 0x47}, // Plan 9 arm + {0x01, 0xDF}, // XCOFF32 + {0x01, 0xF7}, // XCOFF64 } func isObject(s string) bool { @@ -3308,6 +3316,10 @@ func (b *Builder) gccArchArgs() []string { return []string{"-mabi=64"} case "mips", "mipsle": return []string{"-mabi=32", "-march=mips32"} + case "ppc64": + if cfg.Goos == "aix" { + return []string{"-maix64"} + } } return nil } diff --git a/libgo/go/debug/dwarf/open.go b/libgo/go/debug/dwarf/open.go index 0e9c01c..253a43c 100644 --- a/libgo/go/debug/dwarf/open.go +++ b/libgo/go/debug/dwarf/open.go @@ -33,7 +33,7 @@ type Data struct { // New returns a new Data object initialized from the given parameters. // Rather than calling this function directly, clients should typically use // the DWARF method of the File type of the appropriate package debug/elf, -// debug/macho, or debug/pe. +// debug/macho, debug/pe, or debug/xcoff. // // The []byte arguments are the data from the corresponding debug section // in the object file; for example, for an ELF object, abbrev is the contents of diff --git a/libgo/go/debug/xcoff/file.go b/libgo/go/debug/xcoff/file.go new file mode 100644 index 0000000..2958610 --- /dev/null +++ b/libgo/go/debug/xcoff/file.go @@ -0,0 +1,539 @@ +// Copyright 2017 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 xcoff implements access to XCOFF (Extended Common Object File Format) files. +package xcoff + +import ( + "debug/dwarf" + "encoding/binary" + "fmt" + "io" + "os" + "strings" +) + +// Information we store about an XCOFF section header. +type SectionHeader struct { + Name string + VirtualAddress uint64 + Size uint64 + Type uint32 +} +type Section struct { + SectionHeader + io.ReaderAt + sr *io.SectionReader +} + +// Information we store about an XCOFF symbol. +type AuxiliaryCSect struct { + Length int64 + StorageMappingClass int + SymbolType int +} +type Symbol struct { + Name string + Value uint64 + SectionNumber int + StorageClass int + AuxCSect AuxiliaryCSect +} + +// Information we store about an imported XCOFF symbol. +type ImportedSymbol struct { + Name string + Library string +} + +// A File represents an open XCOFF file. +type FileHeader struct { + TargetMachine uint16 +} +type File struct { + FileHeader + Sections []*Section + Symbols []*Symbol + StringTable []byte + LibraryPaths []string + + closer io.Closer +} + +// Open opens the named file using os.Open and prepares it for use as an XCOFF binary. +func Open(name string) (*File, error) { + f, err := os.Open(name) + if err != nil { + return nil, err + } + ff, err := NewFile(f) + if err != nil { + f.Close() + return nil, err + } + ff.closer = f + return ff, nil +} + +// Close closes the File. +// If the File was created using NewFile directly instead of Open, +// Close has no effect. +func (f *File) Close() error { + var err error + if f.closer != nil { + err = f.closer.Close() + f.closer = nil + } + return err +} + +// SectionByType returns the first section in f with the +// given type, or nil if there is no such section. +func (f *File) SectionByType(typ uint32) *Section { + for _, s := range f.Sections { + if s.Type == typ { + return s + } + } + return nil +} + +// cstring converts ASCII byte sequence b to string. +// It stops once it finds 0 or reaches end of b. +func cstring(b []byte) string { + var i int + for i = 0; i < len(b) && b[i] != 0; i++ { + } + return string(b[:i]) +} + +// getString extracts a string from an XCOFF string table. +func getString(st []byte, offset uint32) (string, bool) { + if offset < 4 || int(offset) >= len(st) { + return "", false + } + return cstring(st[offset:]), true +} + +// NewFile creates a new File for accessing an XCOFF binary in an underlying reader. +func NewFile(r io.ReaderAt) (*File, error) { + sr := io.NewSectionReader(r, 0, 1<<63-1) + // Read XCOFF target machine + var magic uint16 + if err := binary.Read(sr, binary.BigEndian, &magic); err != nil { + return nil, err + } + if magic != U802TOCMAGIC && magic != U64_TOCMAGIC { + return nil, fmt.Errorf("unrecognised XCOFF magic", magic) + } + + f := new(File) + f.TargetMachine = magic + + // Read XCOFF file header + sr.Seek(0, io.SeekStart) + var nscns uint16 + var symptr uint64 + var nsyms int32 + var opthdr uint16 + var hdrsz int + switch f.TargetMachine { + case U802TOCMAGIC: + fhdr := new(FileHeader32) + if err := binary.Read(sr, binary.BigEndian, fhdr); err != nil { + return nil, err + } + nscns = fhdr.Fnscns + symptr = uint64(fhdr.Fsymptr) + nsyms = fhdr.Fnsyms + opthdr = fhdr.Fopthdr + hdrsz = FILHSZ_32 + case U64_TOCMAGIC: + fhdr := new(FileHeader64) + if err := binary.Read(sr, binary.BigEndian, fhdr); err != nil { + return nil, err + } + nscns = fhdr.Fnscns + symptr = fhdr.Fsymptr + nsyms = fhdr.Fnsyms + opthdr = fhdr.Fopthdr + hdrsz = FILHSZ_64 + } + + if symptr == 0 || nsyms <= 0 { + return nil, fmt.Errorf("no symbol table") + } + + // Read string table (located right after symbol table). + offset := symptr + uint64(nsyms)*SYMESZ + sr.Seek(int64(offset), io.SeekStart) + // The first 4 bytes contain the length (in bytes). + var l uint32 + binary.Read(sr, binary.BigEndian, &l) + if l > 4 { + sr.Seek(int64(offset), io.SeekStart) + f.StringTable = make([]byte, l) + io.ReadFull(sr, f.StringTable) + } + + // Read section headers + sr.Seek(int64(hdrsz)+int64(opthdr), io.SeekStart) + f.Sections = make([]*Section, nscns) + for i := 0; i < int(nscns); i++ { + var scnptr uint64 + s := new(Section) + switch f.TargetMachine { + case U802TOCMAGIC: + shdr := new(SectionHeader32) + if err := binary.Read(sr, binary.BigEndian, shdr); err != nil { + return nil, err + } + s.Name = cstring(shdr.Sname[:]) + s.VirtualAddress = uint64(shdr.Svaddr) + s.Size = uint64(shdr.Ssize) + scnptr = uint64(shdr.Sscnptr) + s.Type = shdr.Sflags + case U64_TOCMAGIC: + shdr := new(SectionHeader64) + if err := binary.Read(sr, binary.BigEndian, shdr); err != nil { + return nil, err + } + s.Name = cstring(shdr.Sname[:]) + s.VirtualAddress = shdr.Svaddr + s.Size = shdr.Ssize + scnptr = shdr.Sscnptr + s.Type = shdr.Sflags + } + r2 := r + if scnptr == 0 { // .bss must have all 0s + r2 = zeroReaderAt{} + } + s.sr = io.NewSectionReader(r2, int64(scnptr), int64(s.Size)) + s.ReaderAt = s.sr + f.Sections[i] = s + } + + // Read symbol table + sr.Seek(int64(symptr), io.SeekStart) + f.Symbols = make([]*Symbol, 0) + for i := 0; i < int(nsyms); i++ { + var numaux int + var ok bool + sym := new(Symbol) + switch f.TargetMachine { + case U802TOCMAGIC: + se := new(SymEnt32) + if err := binary.Read(sr, binary.BigEndian, se); err != nil { + return nil, err + } + numaux = int(se.Nnumaux) + sym.SectionNumber = int(se.Nscnum) + sym.StorageClass = int(se.Nsclass) + sym.Value = uint64(se.Nvalue) + zeroes := binary.BigEndian.Uint32(se.Nname[:4]) + if zeroes != 0 { + sym.Name = cstring(se.Nname[:]) + } else { + offset := binary.BigEndian.Uint32(se.Nname[4:]) + sym.Name, ok = getString(f.StringTable, offset) + if !ok { + goto skip + } + } + case U64_TOCMAGIC: + se := new(SymEnt64) + if err := binary.Read(sr, binary.BigEndian, se); err != nil { + return nil, err + } + numaux = int(se.Nnumaux) + sym.SectionNumber = int(se.Nscnum) + sym.StorageClass = int(se.Nsclass) + sym.Value = se.Nvalue + sym.Name, ok = getString(f.StringTable, se.Noffset) + if !ok { + goto skip + } + } + if sym.StorageClass != C_EXT && sym.StorageClass != C_WEAKEXT && sym.StorageClass != C_HIDEXT { + goto skip + } + // Must have at least one csect auxiliary entry. + if numaux < 1 || i+numaux >= int(nsyms) { + goto skip + } + if sym.SectionNumber < 1 || sym.SectionNumber > int(nscns) { + goto skip + } + sym.Value -= f.Sections[sym.SectionNumber-1].VirtualAddress + + // Read csect auxiliary entry (by convention, it is the last). + sr.Seek(int64((numaux-1)*SYMESZ), io.SeekCurrent) + i += numaux + numaux = 0 + switch f.TargetMachine { + case U802TOCMAGIC: + aux := new(AuxCSect32) + if err := binary.Read(sr, binary.BigEndian, aux); err != nil { + return nil, err + } + sym.AuxCSect.SymbolType = int(aux.Xsmtyp & 0x7) + sym.AuxCSect.StorageMappingClass = int(aux.Xsmclas) + sym.AuxCSect.Length = int64(aux.Xscnlen) + case U64_TOCMAGIC: + aux := new(AuxCSect64) + if err := binary.Read(sr, binary.BigEndian, aux); err != nil { + return nil, err + } + sym.AuxCSect.SymbolType = int(aux.Xsmtyp & 0x7) + sym.AuxCSect.StorageMappingClass = int(aux.Xsmclas) + sym.AuxCSect.Length = int64(aux.Xscnlenhi)<<32 | int64(aux.Xscnlenlo) + } + + f.Symbols = append(f.Symbols, sym) + skip: + i += numaux // Skip auxiliary entries + sr.Seek(int64(numaux)*SYMESZ, io.SeekCurrent) + } + + return f, nil +} + +// zeroReaderAt is ReaderAt that reads 0s. +type zeroReaderAt struct{} + +// ReadAt writes len(p) 0s into p. +func (w zeroReaderAt) ReadAt(p []byte, off int64) (n int, err error) { + for i := range p { + p[i] = 0 + } + return len(p), nil +} + +// Data reads and returns the contents of the XCOFF section s. +func (s *Section) Data() ([]byte, error) { + dat := make([]byte, s.sr.Size()) + n, err := s.sr.ReadAt(dat, 0) + if n == len(dat) { + err = nil + } + return dat[0:n], err +} + +// CSect reads and returns the contents of a csect. +func (f *File) CSect(name string) []byte { + for _, sym := range f.Symbols { + if sym.Name == name && sym.AuxCSect.SymbolType == XTY_SD { + if i := sym.SectionNumber - 1; 0 <= i && i < len(f.Sections) { + s := f.Sections[i] + if sym.Value+uint64(sym.AuxCSect.Length) <= s.Size { + dat := make([]byte, sym.AuxCSect.Length) + _, err := s.sr.ReadAt(dat, int64(sym.Value)) + if err != nil { + return nil + } + return dat + } + } + break + } + } + return nil +} + +func (f *File) DWARF() (*dwarf.Data, error) { + // There are many other DWARF sections, but these + // are the ones the debug/dwarf package uses. + // Don't bother loading others. + var subtypes = [...]uint32{SSUBTYP_DWABREV, SSUBTYP_DWINFO, SSUBTYP_DWLINE, SSUBTYP_DWARNGE, SSUBTYP_DWSTR} + var dat [len(subtypes)][]byte + for i, subtype := range subtypes { + s := f.SectionByType(STYP_DWARF | subtype) + if s != nil { + b, err := s.Data() + if err != nil && uint64(len(b)) < s.Size { + return nil, err + } + dat[i] = b + } + } + + abbrev, info, line, ranges, str := dat[0], dat[1], dat[2], dat[3], dat[4] + return dwarf.New(abbrev, nil, nil, info, line, nil, ranges, str) +} + +// Read a loader section import file IDs. +func (f *File) readImportIDs(s *Section) ([]string, error) { + // Read loader header + s.sr.Seek(0, io.SeekStart) + var istlen uint32 + var nimpid int32 + var impoff uint64 + switch f.TargetMachine { + case U802TOCMAGIC: + lhdr := new(LoaderHeader32) + if err := binary.Read(s.sr, binary.BigEndian, lhdr); err != nil { + return nil, err + } + istlen = lhdr.Listlen + nimpid = lhdr.Lnimpid + impoff = uint64(lhdr.Limpoff) + case U64_TOCMAGIC: + lhdr := new(LoaderHeader64) + if err := binary.Read(s.sr, binary.BigEndian, lhdr); err != nil { + return nil, err + } + istlen = lhdr.Listlen + nimpid = lhdr.Lnimpid + impoff = lhdr.Limpoff + } + + // Read loader import file ID table + s.sr.Seek(int64(impoff), io.SeekStart) + table := make([]byte, istlen) + io.ReadFull(s.sr, table) + + offset := 0 + // First import file ID is the default LIBPATH value + libpath := cstring(table[offset:]) + f.LibraryPaths = strings.Split(libpath, ":") + offset += len(libpath) + 3 // 3 null bytes + all := make([]string, 0) + for i := 1; i < int(nimpid); i++ { + impidpath := cstring(table[offset:]) + offset += len(impidpath) + 1 + impidbase := cstring(table[offset:]) + offset += len(impidbase) + 1 + impidmem := cstring(table[offset:]) + offset += len(impidmem) + 1 + var path string + if len(impidpath) > 0 { + path = impidpath + "/" + impidbase + } else { + path = impidbase + } + all = append(all, path) + } + + return all, nil +} + +// ImportedSymbols returns the names of all symbols +// referred to by the binary f that are expected to be +// satisfied by other libraries at dynamic load time. +// It does not return weak symbols. +func (f *File) ImportedSymbols() ([]ImportedSymbol, error) { + s := f.SectionByType(STYP_LOADER) + if s == nil { + return nil, nil + } + // Read loader header + s.sr.Seek(0, io.SeekStart) + var stlen uint32 + var stoff uint64 + var nsyms int32 + var symoff uint64 + switch f.TargetMachine { + case U802TOCMAGIC: + lhdr := new(LoaderHeader32) + if err := binary.Read(s.sr, binary.BigEndian, lhdr); err != nil { + return nil, err + } + stlen = lhdr.Lstlen + stoff = uint64(lhdr.Lstoff) + nsyms = lhdr.Lnsyms + symoff = LDHDRSZ_32 + case U64_TOCMAGIC: + lhdr := new(LoaderHeader64) + if err := binary.Read(s.sr, binary.BigEndian, lhdr); err != nil { + return nil, err + } + stlen = lhdr.Lstlen + stoff = lhdr.Lstoff + nsyms = lhdr.Lnsyms + symoff = lhdr.Lsymoff + } + + // Read loader section string table + s.sr.Seek(int64(stoff), io.SeekStart) + st := make([]byte, stlen) + io.ReadFull(s.sr, st) + + // Read imported libraries + libs, err := f.readImportIDs(s) + if err != nil { + return nil, err + } + + // Read loader symbol table + s.sr.Seek(int64(symoff), io.SeekStart) + all := make([]ImportedSymbol, 0) + for i := 0; i < int(nsyms); i++ { + var name string + var ifile int32 + var ok bool + switch f.TargetMachine { + case U802TOCMAGIC: + ldsym := new(LoaderSymbol32) + if err := binary.Read(s.sr, binary.BigEndian, ldsym); err != nil { + return nil, err + } + if ldsym.Lsmtype&0x40 == 0 { + continue // Imported symbols only + } + zeroes := binary.BigEndian.Uint32(ldsym.Lname[:4]) + if zeroes != 0 { + name = cstring(ldsym.Lname[:]) + } else { + offset := binary.BigEndian.Uint32(ldsym.Lname[4:]) + name, ok = getString(st, offset) + if !ok { + continue + } + } + ifile = ldsym.Lifile + case U64_TOCMAGIC: + ldsym := new(LoaderSymbol64) + if err := binary.Read(s.sr, binary.BigEndian, ldsym); err != nil { + return nil, err + } + if ldsym.Lsmtype&0x40 == 0 { + continue // Imported symbols only + } + name, ok = getString(st, ldsym.Loffset) + if !ok { + continue + } + ifile = ldsym.Lifile + } + var sym ImportedSymbol + sym.Name = name + if ifile >= 1 && int(ifile) <= len(libs) { + sym.Library = libs[ifile-1] + } + all = append(all, sym) + } + + return all, nil +} + +// ImportedLibraries returns the names of all libraries +// referred to by the binary f that are expected to be +// linked with the binary at dynamic link time. +func (f *File) ImportedLibraries() ([]string, error) { + s := f.SectionByType(STYP_LOADER) + if s == nil { + return nil, nil + } + all, err := f.readImportIDs(s) + return all, err +} + +// FormatError is unused. +// The type is retained for compatibility. +type FormatError struct { +} + +func (e *FormatError) Error() string { + return "unknown error" +} diff --git a/libgo/go/debug/xcoff/file_test.go b/libgo/go/debug/xcoff/file_test.go new file mode 100644 index 0000000..115ce30 --- /dev/null +++ b/libgo/go/debug/xcoff/file_test.go @@ -0,0 +1,150 @@ +// 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 xcoff + +import ( + "reflect" + "testing" +) + +type fileTest struct { + file string + hdr FileHeader + sections []*SectionHeader + needed []string +} + +var fileTests = []fileTest{ + { + "testdata/gcc-ppc32-aix-exec", + FileHeader{U802TOCMAGIC}, + []*SectionHeader{ + {".text", 0x10000150, 0x00000bbd, STYP_TEXT}, + {".data", 0x20000d0d, 0x0000042b, STYP_DATA}, + {".bss", 0x20001138, 0x00000218, STYP_BSS}, + {".loader", 0x00000000, 0x000004b3, STYP_LOADER}, + {".debug", 0x00000000, 0x0000751e, STYP_DEBUG}, + }, + []string{"libc.a"}, + }, + { + "testdata/gcc-ppc64-aix-exec", + FileHeader{U64_TOCMAGIC}, + []*SectionHeader{ + {".text", 0x10000240, 0x00000afd, STYP_TEXT}, + {".data", 0x20000d3d, 0x000002e3, STYP_DATA}, + {".bss", 0x20001020, 0x00000428, STYP_BSS}, + {".loader", 0x00000000, 0x00000535, STYP_LOADER}, + {".debug", 0x00000000, 0x00008238, STYP_DEBUG}, + }, + []string{"libc.a"}, + }, + { + "testdata/xlc-ppc32-aix-exec", + FileHeader{U802TOCMAGIC}, + []*SectionHeader{ + {".text", 0x10000150, 0x00000372, STYP_TEXT}, + {".data", 0x200004c2, 0x0000032e, STYP_DATA}, + {".bss", 0x200007f0, 0x00000004, STYP_BSS}, + {".loader", 0x00000000, 0x0000029d, STYP_LOADER}, + {".debug", 0x00000000, 0x0000008f, STYP_DEBUG}, + }, + []string{"libc.a"}, + }, + { + "testdata/xlc-ppc64-aix-exec", + FileHeader{U64_TOCMAGIC}, + []*SectionHeader{ + {".text", 0x100000240, 0x00000326, STYP_TEXT}, + {".data", 0x110000566, 0x00000182, STYP_DATA}, + {".bss", 0x1100006e8, 0x00000008, STYP_BSS}, + {".loader", 0x00000000, 0x0000029b, STYP_LOADER}, + {".debug", 0x00000000, 0x000000ea, STYP_DEBUG}, + }, + []string{"libc.a"}, + }, + { + "testdata/gcc-ppc32-aix-dwarf2-exec", + FileHeader{U802TOCMAGIC}, + []*SectionHeader{ + {".text", 0x10000290, 0x00000bbd, STYP_TEXT}, + {".data", 0x20000e4d, 0x00000437, STYP_DATA}, + {".bss", 0x20001284, 0x0000021c, STYP_BSS}, + {".loader", 0x00000000, 0x000004b3, STYP_LOADER}, + {".dwline", 0x00000000, 0x000000df, STYP_DWARF | SSUBTYP_DWLINE}, + {".dwinfo", 0x00000000, 0x00000314, STYP_DWARF | SSUBTYP_DWINFO}, + {".dwabrev", 0x00000000, 0x000000d6, STYP_DWARF | SSUBTYP_DWABREV}, + {".dwarnge", 0x00000000, 0x00000020, STYP_DWARF | SSUBTYP_DWARNGE}, + {".dwloc", 0x00000000, 0x00000074, STYP_DWARF | SSUBTYP_DWLOC}, + {".debug", 0x00000000, 0x00005e4f, STYP_DEBUG}, + }, + []string{"libc.a"}, + }, + { + "testdata/gcc-ppc64-aix-dwarf2-exec", + FileHeader{U64_TOCMAGIC}, + []*SectionHeader{ + {".text", 0x10000480, 0x00000afd, STYP_TEXT}, + {".data", 0x20000f7d, 0x000002f3, STYP_DATA}, + {".bss", 0x20001270, 0x00000428, STYP_BSS}, + {".loader", 0x00000000, 0x00000535, STYP_LOADER}, + {".dwline", 0x00000000, 0x000000b4, STYP_DWARF | SSUBTYP_DWLINE}, + {".dwinfo", 0x00000000, 0x0000036a, STYP_DWARF | SSUBTYP_DWINFO}, + {".dwabrev", 0x00000000, 0x000000b5, STYP_DWARF | SSUBTYP_DWABREV}, + {".dwarnge", 0x00000000, 0x00000040, STYP_DWARF | SSUBTYP_DWARNGE}, + {".dwloc", 0x00000000, 0x00000062, STYP_DWARF | SSUBTYP_DWLOC}, + {".debug", 0x00000000, 0x00006605, STYP_DEBUG}, + }, + []string{"libc.a"}, + }, +} + +func TestOpen(t *testing.T) { + for i := range fileTests { + tt := &fileTests[i] + + f, err := Open(tt.file) + if err != nil { + t.Error(err) + continue + } + if !reflect.DeepEqual(f.FileHeader, tt.hdr) { + t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr) + continue + } + + for i, sh := range f.Sections { + if i >= len(tt.sections) { + break + } + have := &sh.SectionHeader + want := tt.sections[i] + if !reflect.DeepEqual(have, want) { + t.Errorf("open %s, section %d:\n\thave %#v\n\twant %#v\n", tt.file, i, have, want) + } + } + tn := len(tt.sections) + fn := len(f.Sections) + if tn != fn { + t.Errorf("open %s: len(Sections) = %d, want %d", tt.file, fn, tn) + } + tl := tt.needed + fl, err := f.ImportedLibraries() + if err != nil { + t.Error(err) + } + if !reflect.DeepEqual(tl, fl) { + t.Errorf("open %s: loader import = %v, want %v", tt.file, tl, fl) + } + } +} + +func TestOpenFailure(t *testing.T) { + filename := "file.go" // not an XCOFF object file + _, err := Open(filename) // don't crash + if err == nil { + t.Errorf("open %s: succeeded unexpectedly", filename) + } +} diff --git a/libgo/go/debug/xcoff/testdata/gcc-ppc32-aix-dwarf2-exec b/libgo/go/debug/xcoff/testdata/gcc-ppc32-aix-dwarf2-exec new file mode 100644 index 0000000000000000000000000000000000000000..810e21a0dfc78b29f2dfc5afe2bc588763177ea6 GIT binary patch literal 54694 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 z zc90l1tu-Aq{LewdS`Hd*deDdyZZrJhZF9l0#y)KzF9ea>a|U9JJ8xVJ(!9~&{HAb_ z=8&>S-w1F72iNmiA(i}E=O3Sr4qenYy z?v7yy?RDZl?Dh>)Zo$48SA3yA?mS2-iY4A9`X_j?13Qn*N0fN96C6osdij0l5qw`w zxgHR8KGV*48zHAee@XLci_u=B;=?ghGoKcmd2Ac^%PbznUgTa#xrZs2m-)C5p|e4m znU5}uXAaF}-T7WzUnOOxllBMsq`i2JM2h;_t(VMw=g0BAQquV9^^C7xZ1K%ywcLm^ z6%f*E3-Ji*^*HJ^&6La6>$A8&9;_Gh(e=8axg5H>^N;cID(clgF~LkAA?+`VqHJaP zi94a+#V&ctrQx#&il(V_AD=DD^7$P2cx5e5^F&iwe8ObevOIatP2-g{%LINWKsLrSA@=$rNOO;-q0<`pWd#56$ql4@r$=5Sx4>n!N}9mwky~+k zglU*hRq^4mS*G#%7M!Jd#63}__-t&Vx$~cJX8Dn(n!XF?njX|AaKbtl&o(vZmdB85 z6uI0J3xu59KzwEtk%!Fs5u6(g&@kdZjj%H6>TpqJWmm7b;0u~*9xE@MMj)+n*hA{+ z3+gAl-9U`kFMO9lQ!|j02J*0heAGbTMVs3z{1pTFYXkXy5V>?3!QaXeV^$KmC#bQA zF$;)bENO0wh|w08P9ymByaGL|S!0(@Blz`m=`@008<$Qa__cBAG=g6nmrf)2wQ=b* zf?pe#P9ylW(fO~zG56AG1iyYRoks9$`j+WBltCDeIux!OQ#Y1`nhx( z!LN-=rxEVC{u7VDjA9m4q( z`IJJsT1I1!`Et3tw4wjX)cCl7#@u~;JdeuLe230W-@ckYaZVby7I=!4$7ieN6ME|W zwKzwvFYEjlsD)R${{)4*Z5%r5Z+GlicoKRvpYzugPu}uqc=uFG;%VbNG@d+`k58B8 z5qh$ztOXyY34V-g$S<}$j z1L-~BH;|^k;>5zjLcfDl;5W^yZ2lBMD#(i#2WVb5IM}x<|7x4UzmxvF` z+$w4Gb7_bVXr@5($^~dDI8(v$EXQXG&*L~EHTEX;R3-JOEIe`INw+PwsM1%;@BRP{ zYlF`fLRv-R<9xWOEn?uzXJELM1DqxQh)ctq4@q*_C$AnkC+7eSbDmnB^Ai2>bFt+8$m_xR?727x zX_)g&GiUUo-Slj%dIJxH#-sA_kh$4vk>9LNNq({)9(G)+;}uYN&~2$`(_{JtJ&2Cq zwhkii@xiztqv59>JGd~On=AH?-nw)5{)69H6T> z^k98|PPpWz(%ej8k7T(o_M@UTNBpavi}RiTv6S>TG^c~NhO{{v6+R3!ia literal 0 HcmV?d00001 diff --git a/libgo/go/debug/xcoff/testdata/gcc-ppc32-aix-exec b/libgo/go/debug/xcoff/testdata/gcc-ppc32-aix-exec new file mode 100644 index 0000000000000000000000000000000000000000..6e44041b3dfc3ec6c1749714553b095eecccd24e GIT binary patch literal 63312 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 z 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 literal 0 HcmV?d00001 diff --git a/libgo/go/debug/xcoff/testdata/gcc-ppc64-aix-dwarf2-exec b/libgo/go/debug/xcoff/testdata/gcc-ppc64-aix-dwarf2-exec new file mode 100644 index 0000000000000000000000000000000000000000..707d01ebd43487081a620250a213dcdba7a80379 GIT binary patch literal 57152 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 S7C_XD%~zkaY^b%gYX1+A-c`&1 literal 0 HcmV?d00001 diff --git a/libgo/go/debug/xcoff/testdata/gcc-ppc64-aix-exec b/libgo/go/debug/xcoff/testdata/gcc-ppc64-aix-exec new file mode 100644 index 0000000000000000000000000000000000000000..82ffdaf3e4454b4c266369b7ca669acbc30c4ff3 GIT binary patch literal 66618 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 literal 0 HcmV?d00001 diff --git a/libgo/go/debug/xcoff/testdata/hello.c b/libgo/go/debug/xcoff/testdata/hello.c new file mode 100644 index 0000000..34d9ee7 --- /dev/null +++ b/libgo/go/debug/xcoff/testdata/hello.c @@ -0,0 +1,7 @@ +#include + +void +main(int argc, char *argv[]) +{ + printf("hello, world\n"); +} diff --git a/libgo/go/debug/xcoff/testdata/xlc-ppc32-aix-exec b/libgo/go/debug/xcoff/testdata/xlc-ppc32-aix-exec new file mode 100644 index 0000000000000000000000000000000000000000..e076f81621b8686a50b70d392640ce26a91a7524 GIT binary patch literal 6529 zcmeHLU5pdg6+UB|tXUj(H(60aP#6LaWMgJ+#{3v~N`}c;}n%e)rsS?>+Z#v_I0Sqi0WliRkHGBKiSM_WHCnq!IZo{0wjbow{nh zq#e{La0~b<`H=6!zX18Ei~P|ksM;jM&ed%2T$X>*CO_A_KoojN8&IA|H?k=^#X#5( z+>-V3GxVY`yH5NaH`0{~Blz%ue}DmzsDZKOEzx0c@C~)x}ZCsk5 z{`#{-6N?mDSfu#UZRl6~uhri`{s7VbdSG)MnlU&~zel5|?!R3-z3NQuVi(aQX&=2Q zc|DAG*a+6sv~`kvN4d=WLNF-&4(a3KNpz07OtWIAEFKdl)qNBU<7M9>>61k9{dK3o zT#koFq<&g!n)Zy9OJyr&p;Ty?m=F4{UD~{S6YUNzX*5|!o4H*Jc?ycQ?4f|u4)_-e z!{kB+zTyd=`-Nt=N7LJ)DYnt{vj*iivK_Y9Mzg-f&WgGg7HD#GGmW1*>%YeBhJVWL z@&~UkFJG5U*C*=Dez-&Z-hLRL*b_6Os+azQ2lwB*e_H-0`Ywomym96py|R>|nWY6P zj((H+F(xSXYc;)8>7DeR~o9h8VN&rxtsIcz>EP`t@(HHTfjAxN@f@72C4Q zh1pb%_U@X=6^rGtezI&8v)#~OEx3+fo%L#6VAwW|Z`<l zko#%Z)n06)h}o;$++GS`k7X`!Og*zs-WTZ(?4utzdf2++VD;4S#B3+tRbR%>hyR$K zG=OI%XIZ5(USt|yg(vGNS8J~MMB_Z|1fS0rtCbm6aBA{%R-t6)CF|xDgE~1i^`@Dz z?8pg8Q?p)0^vGwEH_dE1WldLfT2&+8Gwi2G&JKru1HYO5RD3pFsirgF&ylaMm7fNG zsSRHOf7#8ezSTCNvw%N@aR+}4?2|m|MpAgbsgY}x;=kqM&$;wVF8-2>|DlV&?BcJu z_}joiWuN`&Quq^>=2PI+ioXNwSNJZl4} znUs~Vw*IGxD!>I6u$pU7LEqafuBg_X^Mw*Ad`4Huj)I zU;yX^fp{*zCvv$(dXHa4e0US7cz;zO_H>w$i1n=kaip&ms1EdHfjG(~$1z?L97nk1 zIKJN!97nh0IJV~nccsB`Tz3nO>qUg4UXJMjfjFW=0&zSehLL+0pem4xWpEtHn4v%% z#~jlb3m#?vWzz8XI{CcoALJT~R8p&qcP(tubW5#wU2L!Mu959Es^);>g2x|Kmv`-K zvC~)?g$1>aw$~gwuv>`GKYYidl;$Wj5BLh_(WrJA`9d)#g$I`(l7HHXVP0#!>F4rQYqGzU(CKS_7 z|0Vfw{{C5Mbm7k{l6Knw^ABjoVMiC^-l8$LzHw;c(B9n`uLoS6&>WR^o>T3TZ}b}6Uw6{D#_OaUFL4_* zI9|L-J1O6rhYE_f$q<%=@sIq5BB)3sX75Z2GibzbIczeFjq&Wkl+ zt7QA!W=Z=EG{?Ahp{dDCZy#zOL6hyI5w)Wj?o3lWzt}@x%R2A9SE;&AtGd+M!kXq? zN@-g56s1x3sz+){nD4k_wbx7+3#H?-$G)$2Mzsy2rQ5irqMx@(5BpR+7%dvnW8YD& zP#Txzca&vy2!Q3r8cwa2TQtJ*`SzBVImz8z9SdOD?&x!iMp%B=YZ-3+-gTLJ#8rxK z)28^Y&WNWaI#>*~jVFeN z67exT7Kvh;*t=_=eq>7Dt>?>@KC$;mSU;SzDur?hpVN$}5iw$Xw()#!Zh2RqT}^Y& zo)H&I(<)bO+$70NSL9W*$<*wEX%`DEx>BXs!kF1i&dii&=Tf#eXCFM9s7~wph>nka f@v+3vD7R$fku8admPCiSDRRCvkT~86u0;O^z%*1h literal 0 HcmV?d00001 diff --git a/libgo/go/debug/xcoff/testdata/xlc-ppc64-aix-exec b/libgo/go/debug/xcoff/testdata/xlc-ppc64-aix-exec new file mode 100644 index 0000000000000000000000000000000000000000..26041dc0d4ee9faf5d748618201175cb973e53bd GIT binary patch literal 6112 zcmcIoU2Idy6+XVP9TQS8U6v9S(HntUh{BC+LSoFi>kx#(Hn7`5X{glRIJT3x7{`0< zuvV8+6SfjkSG%OGs{ZT)TCFHjTZxxes1FrFRmDS9(U%IX`aq+qGP`|gUz*jnq~DpD zJN}C?U8$4YJM*3M&6$~V&K=*mo_~?=?A1$A5~cU=R1O+wUi54vkCbt3B+&K*$u}!& z{}dUJ8~F257j;utcoG_2x;`VDo+Tv;phkaxNK@K0tWu_2k~%%E8Xr>Eu91+Gp1iDk z@1fp-s|%Nji>!3Al;lRkyv6)kq~_(~jqeGjylqkK1lQI~v8XW5zlye7vzXV_sZ^L? ziJm*=-=XQ{yA=3vg`%rtw72>U(by98K3byr)!!q@Hgw&no}$3=0MY6{ zX#1t{@0Cwhy!};hD>D>0gt=5#sPN6dzE-~EyHZ~6CYm76AEzO&tWaVQ81@3-9-SZ~ z$^9-~4#=4FnhDUje4n~)yI4v(DzBte-Kz!#2Th_AOJq(E4WF#I4&wftPNHn3O}1T{ zcQVOz(az?x+SJ8>abvZAZ5itgu6n3a^yhPDsxhQCr2tim+r zzEyC>8#rbYC$|n~FLTg;C);6r>u^F%c3Q@IbeSsAe)#ul*9~4b=BMng{r2-~Yd7W6 z&9O?&4}Yeujebas9gEmu<)x2NvHw2$%i1b@7la=#f3QO3)g;|oy-c^OsITFQev1N# z%~_5wYH!s;*DeOSZeZ?}574(RW@8nP;Zf6=An*BPR_ze&riNUsh}`T&u1!*a{fKy( zg5P`H?Y14ft53rdBOX6;Vm_10Eex8kE;zY#kF>)3#x$B-CsbWU{jrMQU1d}6#NOTe zM#3AyR(QlTi%x22W}!H=SagO`sp3#BJHuCMs4<3CYS3gc@;g0fqQht;WJZS~L!nVK zd>|G&6pPeH7$X}A49n}7;#xf?E{5p;QefXV{}h%nAK%OC@YrJkT)e+qxC~qwTqp+1 zxgL=*`>|Gs{ejDD4J zVw%ElFUa-s92pmya9LsY3G44DEY{0*6=s7xPPDPVKhdP0XwqL-nElNCZ#L;~DU2Om z=x-~G-Be(AJ{uIir}WtUg#Nz5fC4{I*st(Ig?-{#xR6Zoa}X0iG;rgt{1jM8D$YCh z$gs6Q=!T>-mx>kCYyd9A3Sz!qyfHDo*S2RD^C{bo zoe>X{*UAVvGSD~z{qSZHJD_7gL5hKqp<~-BhphP5>QwVKeTSnU}5X)XbYe-*D&RjxXIG8Gas5&U4*R^n1BY{I3pc6oG;!E9L^%U1BY{KM+eSBaGrev z2Wr~Qx3$L~dgi#nC5mf$?QyRmB=EkGfaL3(ogx;$07BuH6BN#|29C(FJwnGra}gZG zD}?qr779*K=%}xjtB9$1Z>q&>UUIh7@`vL-4QWx^5l;xwGt!&oy#> z2+kGFS>Mjv;C!b8X9}EU%~^k}DmXvmexeCs2 zp1|QnIJi{2#3{;3u~Zf}Iu9hQi`PG;M8!+d$&0wt8!qB{SBqp{i)6S(l4y}kwn)C* zBFVH!UTKkBX_36yB6(X&uwZWmtI&B!j8OPn35v=?Zv{`pHj#%a`NS8pG#CYfM`#)s zN?m430ntx+tT!wV&G2w66pbASn~_lXph@`JVopt( z^-MWkDWd~PBx$B#9_~N78Xl5 zw2?hil*hlCq+H6{rChd&moMg;Bz8KLu~Q4@3&~QWhL<$9IA@xpCcd#848;yacuAvA hTv9|VDLg`!_|#<0%#xLvrMX--e@@0wWQL_u