int printed;
 
        if (cl->ms.sym) {
-               printed = scnprintf(bf, bfsize, "%s", cl->ms.sym->name);
+               if (callchain_param.key == CCKEY_ADDRESS &&
+                   cl->ms.map && !cl->srcline)
+                       cl->srcline = get_srcline(cl->ms.map->dso,
+                                                 map__rip_2objdump(cl->ms.map,
+                                                                   cl->ip));
+               if (cl->srcline)
+                       printed = scnprintf(bf, bfsize, "%s %s",
+                                       cl->ms.sym->name, cl->srcline);
+               else
+                       printed = scnprintf(bf, bfsize, "%s", cl->ms.sym->name);
        } else
                printed = scnprintf(bf, bfsize, "%#" PRIx64, cl->ip);
 
 
        const char *dso_name;
 
        if (!dso->has_srcline)
-               return SRCLINE_UNKNOWN;
+               goto out;
 
        if (dso->symsrc_filename)
                dso_name = dso->symsrc_filename;
                dso->has_srcline = 0;
                dso__free_a2l(dso);
        }
-       return SRCLINE_UNKNOWN;
+       if (asprintf(&srcline, "%s[%lx]", dso->short_name, addr) < 0)
+               return SRCLINE_UNKNOWN;
+       return srcline;
 }
 
 void free_srcline(char *srcline)