()
| 46 | } |
| 47 | |
| 48 | func (this *MStack) setupManager() error { |
| 49 | maps := []*manager.Map{} |
| 50 | probes := []*manager.Probe{} |
| 51 | |
| 52 | events_map := &manager.Map{ |
| 53 | Name: "events", |
| 54 | } |
| 55 | maps = append(maps, events_map) |
| 56 | |
| 57 | fork_probe := &manager.Probe{ |
| 58 | Section: "raw_tracepoint/sched_process_fork", |
| 59 | EbpfFuncName: "tracepoint__sched__sched_process_fork", |
| 60 | } |
| 61 | probes = append(probes, fork_probe) |
| 62 | |
| 63 | for i, uprobe_point := range this.mconf.StackUprobeConf.Points { |
| 64 | // stack hook 配置 |
| 65 | sym := uprobe_point.Symbol |
| 66 | var stack_probe *manager.Probe |
| 67 | if sym == "" { |
| 68 | sym = util.RandStringBytes(8) |
| 69 | stack_probe = &manager.Probe{ |
| 70 | Section: fmt.Sprintf("uprobe/stack_%d", i), |
| 71 | EbpfFuncName: fmt.Sprintf("probe_stack_%d", i), |
| 72 | AttachToFuncName: sym, |
| 73 | RealFilePath: uprobe_point.RealFilePath, |
| 74 | BinaryPath: uprobe_point.LibPath, |
| 75 | NonElfOffset: uprobe_point.NonElfOffset, |
| 76 | // 这个是相对于库文件基址的偏移 |
| 77 | UAddress: uprobe_point.Offset, |
| 78 | } |
| 79 | } else { |
| 80 | stack_probe = &manager.Probe{ |
| 81 | Section: fmt.Sprintf("uprobe/stack_%d", i), |
| 82 | EbpfFuncName: fmt.Sprintf("probe_stack_%d", i), |
| 83 | AttachToFuncName: sym, |
| 84 | RealFilePath: uprobe_point.RealFilePath, |
| 85 | BinaryPath: uprobe_point.LibPath, |
| 86 | NonElfOffset: uprobe_point.NonElfOffset, |
| 87 | // 这个是相对于符号的偏移 |
| 88 | UprobeOffset: uprobe_point.Offset, |
| 89 | } |
| 90 | } |
| 91 | this.logger.Printf("idx:%d %s", i, uprobe_point.String()) |
| 92 | probes = append(probes, stack_probe) |
| 93 | } |
| 94 | |
| 95 | this.bpfManager = &manager.Manager{ |
| 96 | Probes: probes, |
| 97 | Maps: maps, |
| 98 | } |
| 99 | return nil |
| 100 | } |
| 101 | |
| 102 | func (this *MStack) setupManagerOptions() { |
| 103 | // 对于没有开启 CONFIG_DEBUG_INFO_BTF 的加载额外的 btf.Spec |
no test coverage detected