From bc95760a40c19cfa9d8edc14cabefb1cdec8f4b9 Mon Sep 17 00:00:00 2001 From: Weixing Sun Date: Tue, 18 Feb 2020 19:36:52 +0800 Subject: [PATCH 1/7] Update symbol.go compiled --- bcc/symbol.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/bcc/symbol.go b/bcc/symbol.go index e1fe1761..76cebd8c 100644 --- a/bcc/symbol.go +++ b/bcc/symbol.go @@ -59,7 +59,22 @@ type bccSymbolOption struct { checkDebugFileCrc int useSymbolType uint32 } - +//return symbol assigned to the address +func bccSymbolByAddr(addr uint64, pid int) string{ + pidC := C.int(pid) + so := &bccSymbolOption{} + soC := (*C.struct_bcc_symbol_option)(unsafe.Pointer(so)) + cache := C.bcc_symcache_new(pidC, soC) + sym := &bccSymbol{} + symC := (*C.struct_bcc_symbol)(unsafe.Pointer(sym)) + addrC := C.uint64_t(addr) + res := C.bcc_symcache_resolve(cache, addrC, symC) //bcc_symcache_resolve_no_demangle + if res < 0 { + return "" + } + defer C.bcc_symbol_free_demangle_name(symC) + return C.GoString(symC.demangle_name) //symC.name +} // resolveSymbolPath returns the file and offset to locate symname in module func resolveSymbolPath(module string, symname string, addr uint64, pid int) (string, uint64, error) { if pid == -1 { From 8b9b059817444b8d88376f46776a18c287964649 Mon Sep 17 00:00:00 2001 From: Weixing Sun Date: Tue, 18 Feb 2020 19:51:04 +0800 Subject: [PATCH 2/7] Update module.go --- bcc/module.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bcc/module.go b/bcc/module.go index 4eaedd65..3ee0c920 100644 --- a/bcc/module.go +++ b/bcc/module.go @@ -519,6 +519,11 @@ func (bpf *Module) RemoveXDP(devName string) error { return bpf.attachXDP(devName, -1, 0) } +// RemoveXDP removes any xdp from this device. +func (bpf *Module) getSymbol(addr uint64, pid int) error { + return bccSymbolByAddr(addr,pid) +} + func GetSyscallFnName(name string) string { return GetSyscallPrefix() + name } From d1941cd5a4b2db413e652ac9eeaf9890b7b0be90 Mon Sep 17 00:00:00 2001 From: Weixing Sun Date: Tue, 18 Feb 2020 19:55:01 +0800 Subject: [PATCH 3/7] Update module.go --- bcc/module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bcc/module.go b/bcc/module.go index 3ee0c920..4ecc1dab 100644 --- a/bcc/module.go +++ b/bcc/module.go @@ -519,7 +519,7 @@ func (bpf *Module) RemoveXDP(devName string) error { return bpf.attachXDP(devName, -1, 0) } -// RemoveXDP removes any xdp from this device. +// translate address to symbol for specific pid func (bpf *Module) getSymbol(addr uint64, pid int) error { return bccSymbolByAddr(addr,pid) } From 9cb66818d9740164b94399ae18bcc1bd7abe85e5 Mon Sep 17 00:00:00 2001 From: Weixing Sun Date: Tue, 18 Feb 2020 21:15:17 +0800 Subject: [PATCH 4/7] Update module.go --- bcc/module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bcc/module.go b/bcc/module.go index 4ecc1dab..99b901a0 100644 --- a/bcc/module.go +++ b/bcc/module.go @@ -520,7 +520,7 @@ func (bpf *Module) RemoveXDP(devName string) error { } // translate address to symbol for specific pid -func (bpf *Module) getSymbol(addr uint64, pid int) error { +func (bpf *Module) GetSymbol(addr uint64, pid int) error { return bccSymbolByAddr(addr,pid) } From 72b5949f6ab5b9a93ae78003990281143e6851f3 Mon Sep 17 00:00:00 2001 From: Weixing Sun Date: Tue, 18 Feb 2020 21:30:52 +0800 Subject: [PATCH 5/7] Update module.go add GetSymbolByAddr/GetDemangleSymbolByAddr --- bcc/module.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bcc/module.go b/bcc/module.go index 99b901a0..3edf86cf 100644 --- a/bcc/module.go +++ b/bcc/module.go @@ -520,8 +520,11 @@ func (bpf *Module) RemoveXDP(devName string) error { } // translate address to symbol for specific pid -func (bpf *Module) GetSymbol(addr uint64, pid int) error { - return bccSymbolByAddr(addr,pid) +func (bpf *Module) GetSymbolByAddr(addr uint64, pid int) string { + return bccSymbolByAddr(addr,pid,1) +} +func (bpf *Module) GetDemangleSymbolByAddr(addr uint64, pid int) string { + return bccSymbolByAddr(addr,pid,0) } func GetSyscallFnName(name string) string { From 39395a255a35fc14edb2c30bb538081afbec00af Mon Sep 17 00:00:00 2001 From: Weixing Sun Date: Tue, 18 Feb 2020 21:33:54 +0800 Subject: [PATCH 6/7] Update symbol.go bccSymbolByAddr(addr uint64, pid int, demangle int) string --- bcc/symbol.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/bcc/symbol.go b/bcc/symbol.go index 76cebd8c..f0aa6736 100644 --- a/bcc/symbol.go +++ b/bcc/symbol.go @@ -75,6 +75,31 @@ func bccSymbolByAddr(addr uint64, pid int) string{ defer C.bcc_symbol_free_demangle_name(symC) return C.GoString(symC.demangle_name) //symC.name } +func bccSymbolByAddr(addr uint64, pid int, demangle int) string{ + pidC := C.int(pid) + so := &bccSymbolOption{} + soC := (*C.struct_bcc_symbol_option)(unsafe.Pointer(so)) + cache := C.bcc_symcache_new(pidC, soC) + sym := &bccSymbol{} + symC := (*C.struct_bcc_symbol)(unsafe.Pointer(sym)) + addrC := C.uint64_t(addr) + defer C.bcc_symbol_free_demangle_name(symC) + if demangle > 0 { + res := C.bcc_symcache_resolve(cache, addrC, symC) + if res < 0 { + return "" + }else{ + return C.GoString(symC.demangle_name) + } + }else{ + res := C.bcc_symcache_resolve_no_demangle(cache, addrC, symC) + if res < 0 { + return "" + }else{ + return C.GoString(symC.name) //symC.name + } + } +} // resolveSymbolPath returns the file and offset to locate symname in module func resolveSymbolPath(module string, symname string, addr uint64, pid int) (string, uint64, error) { if pid == -1 { From 647d2f8fa1eb5bff0bf4ce8dd191c058fae270dd Mon Sep 17 00:00:00 2001 From: Weixing Sun Date: Wed, 19 Feb 2020 10:37:33 +0800 Subject: [PATCH 7/7] Update symbol.go rm dup --- bcc/symbol.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/bcc/symbol.go b/bcc/symbol.go index f0aa6736..9284a4aa 100644 --- a/bcc/symbol.go +++ b/bcc/symbol.go @@ -60,21 +60,6 @@ type bccSymbolOption struct { useSymbolType uint32 } //return symbol assigned to the address -func bccSymbolByAddr(addr uint64, pid int) string{ - pidC := C.int(pid) - so := &bccSymbolOption{} - soC := (*C.struct_bcc_symbol_option)(unsafe.Pointer(so)) - cache := C.bcc_symcache_new(pidC, soC) - sym := &bccSymbol{} - symC := (*C.struct_bcc_symbol)(unsafe.Pointer(sym)) - addrC := C.uint64_t(addr) - res := C.bcc_symcache_resolve(cache, addrC, symC) //bcc_symcache_resolve_no_demangle - if res < 0 { - return "" - } - defer C.bcc_symbol_free_demangle_name(symC) - return C.GoString(symC.demangle_name) //symC.name -} func bccSymbolByAddr(addr uint64, pid int, demangle int) string{ pidC := C.int(pid) so := &bccSymbolOption{}