errCorruptArchive = errors.New("corrupt archive")
errTruncatedArchive = errors.New("truncated archive")
- errNotArchive = errors.New("unrecognized archive format")
-
- errCorruptObject = errors.New("corrupt object file")
- errTruncatedObject = errors.New("truncated object file")
- errNotObject = errors.New("unrecognized object file format")
+ errCorruptObject = errors.New("corrupt object file")
+ errNotObject = errors.New("unrecognized object file format")
)
// An objReader is an object file reader.
return op | i&0x3FFFFFF
}
-func oclass(a *obj.Addr) int {
- return int(a.Class) - 1
-}
-
func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
o1 := uint32(0)
o2 := uint32(0)
{Yxm, Ynone, Yyr, Zvex_rm_v_r, 2},
}
-var yvex_xxmyxm = []ytab{
- {Yxr, Ynone, Yxm, Zvex_r_v_rm, 2},
- {Yyr, Ynone, Yxm, Zvex_r_v_rm, 2},
-}
-
var ymmxmm0f38 = []ytab{
{Ymm, Ynone, Ymr, Zlitm_r, 3},
{Yxm, Ynone, Yxr, Zlitm_r, 5},
}
var spaces_re *regexp.Regexp = regexp.MustCompile("\\s+")
-var marker_re *regexp.Regexp = regexp.MustCompile("MOVQ \\$([0-9]+), AX")
func normalize(s string) string {
return spaces_re.ReplaceAllLiteralString(strings.TrimSpace(s), " ")
text = 0x20
data = 0x40
bss = 0x80
- permX = 0x20000000
- permR = 0x40000000
permW = 0x80000000
)
ch := sect.Characteristics
ld.Addaddr(ld.Ctxt, initarray_entry, initfunc)
}
-func adddynrela(rela *ld.LSym, s *ld.LSym, r *ld.Reloc) {
- ld.Addaddrplus(ld.Ctxt, rela, s, int64(r.Off))
- ld.Adduint64(ld.Ctxt, rela, ld.R_X86_64_RELATIVE)
- ld.Addaddrplus(ld.Ctxt, rela, r.Sym, r.Add) // Addend
-}
-
func adddynrel(s *ld.LSym, r *ld.Reloc) {
targ := r.Sym
ld.Ctxt.Cursym = s
return int32((uint32(a))&0xff000000 | 0x00ffffff&uint32(a+b))
}
-func adddynrela(rel *ld.LSym, s *ld.LSym, r *ld.Reloc) {
- ld.Addaddrplus(ld.Ctxt, rel, s, int64(r.Off))
- ld.Adduint32(ld.Ctxt, rel, ld.R_ARM_RELATIVE)
-}
-
func adddynrel(s *ld.LSym, r *ld.Reloc) {
targ := r.Sym
ld.Ctxt.Cursym = s
ld.Addaddr(ld.Ctxt, initarray_entry, initfunc)
}
-func adddynrela(rel *ld.LSym, s *ld.LSym, r *ld.Reloc) {
- log.Fatalf("adddynrela not implemented")
-}
-
func adddynrel(s *ld.LSym, r *ld.Reloc) {
log.Fatalf("adddynrel not implemented")
}
* Used for the data block.
*/
-func listnextp(s *LSym) **LSym {
- return &s.Next
-}
-
func listsubp(s *LSym) **LSym {
return &s.Sub
}
r [3]*Reloc // R_METHOD relocations to fields of runtime.method
}
-func (m methodref) mtyp() *LSym { return m.r[0].Sym }
-func (m methodref) ifn() *LSym { return m.r[1].Sym }
-func (m methodref) tfn() *LSym { return m.r[2].Sym }
+func (m methodref) ifn() *LSym { return m.r[1].Sym }
func (m methodref) isExported() bool {
for _, r := range m.m {
return uint8(s.P[2*SysArch.PtrSize+7] & obj.KindMask) // 0x13 / 0x1f
}
-// Type.commonType.kind
-func decodetype_noptr(s *LSym) uint8 {
- return uint8(s.P[2*SysArch.PtrSize+7] & obj.KindNoPointers) // 0x13 / 0x1f
-}
-
// Type.commonType.kind
func decodetype_usegcprog(s *LSym) uint8 {
return uint8(s.P[2*SysArch.PtrSize+7] & obj.KindGCProg) // 0x13 / 0x1f
return off
}
-func decodetype_stringptr(s *LSym, off int) string {
- s = decode_reloc_sym(s, int32(off))
- if s == nil {
- return ""
- }
- r := decode_reloc(s, 0) // s has a pointer to the string data at offset 0
- if r == nil { // shouldn't happen.
- return ""
- }
- strlen := int64(decode_inuxi(s.P[SysArch.PtrSize:], SysArch.IntSize))
- return string(r.Sym.P[r.Add : r.Add+strlen])
-}
-
// decodetype_name decodes the name from a reflect.name.
func decodetype_name(s *LSym, off int) string {
r := decode_reloc(s, int32(off))
impby []*Pkg
}
-var (
- // pkgmap records the imported-by relationship between packages.
- // Entries are keyed by package path (e.g., "runtime" or "net/url").
- pkgmap = map[string]*Pkg{}
-
- pkgall []*Pkg
-)
-
-func lookupPkg(path string) *Pkg {
- if p, ok := pkgmap[path]; ok {
- return p
- }
- p := &Pkg{path: path}
- pkgmap[path] = p
- pkgall = append(pkgall, p)
- return p
-}
-
-// imported records that package pkg imports package imp.
-func imported(pkg, imp string) {
- // everyone imports runtime, even runtime.
- if imp == "runtime" {
- return
- }
-
- p := lookupPkg(pkg)
- i := lookupPkg(imp)
- i.impby = append(i.impby, p)
-}
+var pkgall []*Pkg
func (p *Pkg) cycle() *Pkg {
if p.checked {
// and we can assume OS X.
//
// See golang.org/issues/12941.
- const (
- LC_VERSION_MIN_MACOSX = 0x24
- LC_VERSION_MIN_IPHONEOS = 0x25
- LC_VERSION_MIN_WATCHOS = 0x30
- )
+ const LC_VERSION_MIN_MACOSX = 0x24
+
ml := newMachoLoad(LC_VERSION_MIN_MACOSX, 2)
ml.data[0] = 10<<16 | 7<<8 | 0<<0 // OS X version 10.7.0
ml.data[1] = 10<<16 | 7<<8 | 0<<0 // SDK 10.7.0
"unsafe"
)
-var fakedwarf, realdwarf, linkseg *macho.Segment
+var realdwarf, linkseg *macho.Segment
var dwarfstart, linkstart int64
var linkoffset uint32
-var machHeader *macho.FileHeader
-var mappedHeader []byte
const (
LC_ID_DYLIB = 0xd
func gentext() {}
-func adddynrela(rel *ld.LSym, s *ld.LSym, r *ld.Reloc) {
- log.Fatalf("adddynrela not implemented")
-}
-
func adddynrel(s *ld.LSym, r *ld.Reloc) {
log.Fatalf("adddynrel not implemented")
}
ld.Adduint32(ld.Ctxt, stub, 0x4e800420) // bctr
}
-func adddynrela(rel *ld.LSym, s *ld.LSym, r *ld.Reloc) {
- log.Fatalf("adddynrela not implemented")
-}
-
func adddynrel(s *ld.LSym, r *ld.Reloc) {
targ := r.Sym
ld.Ctxt.Cursym = s
ld.Addaddr(ld.Ctxt, initarray_entry, initfunc)
}
-func adddynrela(rela *ld.LSym, s *ld.LSym, r *ld.Reloc) {
- log.Fatalf("adddynrela not implemented")
-}
-
func adddynrel(s *ld.LSym, r *ld.Reloc) {
targ := r.Sym
ld.Ctxt.Cursym = s