code: func matchSymbol(names []string, start, end uint64, r *regexp.Regexp, address uint64) []string {
  	if address != 0 && address >= start && address <= end {
  		return names
  	}
  	for _, name := range names {
  		if r == nil || r.MatchString(name) {
  			return []string{name}
  		}
  
  		// Match all possible demangled versions of the name.
  		for _, o := range [][]demangle.Option{
  			{demangle.NoClones},
  			{demangle.NoParams},
  			{demangle.NoParams, demangle.NoTemplateParams},
  		} {
  			if demangled, err := demangle.ToString(name, o...); err == nil && r.MatchString(demangled) {
  				return []string{demangled}
  			}
  		}
  	}
  	return nil
  }
docs: // matchSymbol checks if a symbol is to be selected by checking its
  // name to the regexp and optionally its address. It returns the name(s)
  // to be used for the matched symbol, or nil if no match