func (loc *AddrLocationSpec) Find(d *Debugger, scope *proc.EvalScope, locStr string) ([]api.Location, error) { if scope == nil { addr, err := strconv.ParseInt(loc.AddrExpr, 0, 64) if err != nil { return nil, fmt.Errorf("could not determine current location (scope is nil)") } return []api.Location{{PC: uint64(addr)}}, nil } else { v, err := scope.EvalExpression(loc.AddrExpr) if err != nil { return nil, err } if v.Unreadable != nil { return nil, v.Unreadable } switch v.Kind { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: addr, _ := constant.Uint64Val(v.Value) return []api.Location{{PC: addr}}, nil case reflect.Func: pc, err := d.process.FunctionEntryToFirstLine(uint64(v.Base)) if err != nil { return nil, err } return []api.Location{{PC: uint64(pc)}}, nil default: return nil, fmt.Errorf("wrong expression kind: %v", v.Kind) } } }