code: func (d *addr2Liner) addrInfo(addr uint64) ([]plugin.Frame, error) {
  	stack, err := d.rawAddrInfo(addr)
  	if err != nil {
  		return nil, err
  	}
  
  	// Certain versions of addr2line produce incomplete names due to
  	// https://sourceware.org/bugzilla/show_bug.cgi?id=17541. Attempt to replace
  	// the name with a better one from nm.
  	if len(stack) > 0 && d.nm != nil {
  		nm, err := d.nm.addrInfo(addr)
  		if err == nil && len(nm) > 0 {
  			// Last entry in frame list should match since it is non-inlined. As a
  			// simple heuristic, we only switch to the nm-based name if it is longer
  			// by 2 or more characters. We consider nm names that are longer by 1
  			// character insignificant to avoid replacing foo with _foo on MacOS (for
  			// unknown reasons read2line produces the former and nm produces the
  			// latter on MacOS even though both tools are asked to produce mangled
  			// names).
  			nmName := nm[len(nm)-1].Func
  			a2lName := stack[len(stack)-1].Func
  			if len(nmName) > len(a2lName)+1 {
  				stack[len(stack)-1].Func = nmName
  			}
  		}
  	}
  
  	return stack, nil
  }
docs: // addrInfo returns the stack frame information for a specific program
  // address. It returns nil if the address could not be identified.