Skip to content
Snippets Groups Projects
loader.go 27.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	}
    	e := bytes.IndexByte(s.P, 0)
    	if e == -1 {
    		return
    	}
    	p := bytes.Index(s.P[:e], emptyPkg)
    	if p == -1 {
    		return
    	}
    	pkgprefix := []byte(r.pkgprefix)
    	patched := bytes.Replace(s.P[:e], emptyPkg, pkgprefix, -1)
    
    	s.P = append(patched, s.P[e:]...)
    	s.Attr.Set(sym.AttrReadOnly, false)
    	delta := int64(len(s.P)) - s.Size
    	s.Size = int64(len(s.P))
    	for i := range s.R {
    		r := &s.R[i]
    		if r.Off > int32(e) {
    			r.Off += int32(delta)
    		}
    	}
    }
    
    
    // For debugging.
    func (l *Loader) Dump() {
    	fmt.Println("objs")
    	for _, obj := range l.objs {
    		if obj.r != nil {
    			fmt.Println(obj.i, obj.r.unit.Lib)
    		}
    	}
    	fmt.Println("syms")
    	for i, s := range l.Syms {
    		if i == 0 {
    			continue
    		}
    		if s != nil {
    			fmt.Println(i, s, s.Type)
    		} else {
    			fmt.Println(i, l.SymName(Sym(i)), "<not loaded>")
    		}
    	}
    	fmt.Println("overwrite:", l.overwrite)
    	fmt.Println("symsByName")
    
    	for name, i := range l.symsByName[0] {
    		fmt.Println(i, name, 0)
    	}
    	for name, i := range l.symsByName[1] {
    		fmt.Println(i, name, 1)