Skip to content

Commit 119a032

Browse files
committed
add ReadDependPkg function
1 parent 5a849b2 commit 119a032

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

Diff for: readobj.go

+34
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,37 @@ func ReadObjs(files []string, pkgPaths []string) (*Linker, error) {
7878
}
7979
return linker, nil
8080
}
81+
82+
func (linker *Linker) ReadDependPkg(file, pkgPath string, symbolNames []string) error {
83+
if linker.AdaptedOffset {
84+
return fmt.Errorf("already adapted symbol offset, don't add new symbols")
85+
}
86+
//only add unresolved symbol in ObjSymbolMap. use temporary map store read symbols
87+
objSymbolMap := linker.ObjSymbolMap
88+
linker.ObjSymbolMap = make(map[string]*obj.ObjSymbol)
89+
if err := linker.readObj(file, pkgPath); err != nil {
90+
return err
91+
}
92+
initFuncName := getInitFuncName(pkgPath)
93+
if _, ok := linker.ObjSymbolMap[initFuncName]; ok {
94+
if _, err := linker.addSymbol(initFuncName); err != nil {
95+
return err
96+
}
97+
}
98+
for _, name := range symbolNames {
99+
if _, ok := linker.ObjSymbolMap[name]; ok {
100+
delete(linker.SymMap, name)
101+
_, err := linker.addSymbol(name)
102+
if err != nil {
103+
return err
104+
}
105+
}
106+
}
107+
for name, sym := range linker.ObjSymbolMap {
108+
if _, ok := linker.SymMap[name]; ok {
109+
objSymbolMap[name] = sym
110+
}
111+
}
112+
linker.ObjSymbolMap = objSymbolMap
113+
return nil
114+
}

0 commit comments

Comments
 (0)