-
Notifications
You must be signed in to change notification settings - Fork 11
/
symbol.go
44 lines (36 loc) · 1.08 KB
/
symbol.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package internal
import (
"log/slog"
"strings"
"github.com/Zxilly/go-size-analyzer/internal/entity"
"github.com/Zxilly/go-size-analyzer/internal/utils"
)
func (k *KnownInfo) MarkSymbol(name string, addr, size uint64, typ entity.AddrType) error {
if typ != entity.AddrTypeData {
// todo: support text symbols, cross check with pclntab
// and further work on cgo symbols
return nil
}
var pkg *entity.Package
pkgName := k.ExtractPackageFromSymbol(name)
switch {
case pkgName == "" || strings.HasPrefix(name, "x_cgo"):
// we assume it's a cgo symbol
return nil // todo: implement cgo analysis in the future
case pkgName == "$f64" || pkgName == "$f32":
return nil
default:
var ok bool
pkg, ok = k.Deps.GetPackage(pkgName)
if !ok {
slog.Debug("package not found", "name", pkgName, "symbol", name, "type", typ)
return nil // no package found, skip
}
}
ap := k.KnownAddr.InsertSymbol(addr, size, pkg, typ, entity.SymbolMeta{
SymbolName: utils.Deduplicate(name),
PackageName: utils.Deduplicate(pkgName),
})
pkg.AddSymbol(addr, size, typ, name, ap)
return nil
}