} else
                        evname = __event_name(attr->type, attr->config);
 
-               printf("%s: ", evname ? evname : "(unknown)");
+               printf("%s: ", evname ? evname : "[unknown]");
        }
 }
 
 {
        struct addr_location al;
        u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
-       const char *symname, *dsoname;
 
        printf("%16" PRIx64, sample->addr);
 
                al.sym = map__find_symbol(al.map, al.addr, NULL);
 
        if (PRINT_FIELD(SYM)) {
-               if (al.sym && al.sym->name)
-                       symname = al.sym->name;
-               else
-                       symname = "";
-
-               printf(" %16s", symname);
+               printf(" ");
+               symbol__fprintf_symname(al.sym, stdout);
        }
 
        if (PRINT_FIELD(DSO)) {
-               if (al.map && al.map->dso && al.map->dso->name)
-                       dsoname = al.map->dso->name;
-               else
-                       dsoname = "";
-
-               printf(" (%s)", dsoname);
+               printf(" (");
+               map__fprintf_dsoname(al.map, stdout);
+               printf(")");
        }
 }
 
 
                       self->start, self->end, self->pgoff, self->dso->name);
 }
 
+size_t map__fprintf_dsoname(struct map *map, FILE *fp)
+{
+       const char *dsoname;
+
+       if (map && map->dso && map->dso->name)
+               dsoname = map->dso->name;
+       else
+               dsoname = "[unknown]";
+
+       return fprintf(fp, "%s", dsoname);
+}
+
 /*
  * objdump wants/reports absolute IPs for ET_EXEC, and RIPs for ET_DYN.
  * map->dso->adjust_symbols==1 for ET_EXEC-like cases.
 
 struct map *map__clone(struct map *self);
 int map__overlap(struct map *l, struct map *r);
 size_t map__fprintf(struct map *self, FILE *fp);
+size_t map__fprintf_dsoname(struct map *map, FILE *fp);
 
 int map__load(struct map *self, symbol_filter_t filter);
 struct symbol *map__find_symbol(struct map *self,
 
                          int print_sym, int print_dso)
 {
        struct addr_location al;
-       const char *symname, *dsoname;
        struct callchain_cursor *cursor = &evsel->hists.callchain_cursor;
        struct callchain_cursor_node *node;
 
 
                        printf("\t%16" PRIx64, node->ip);
                        if (print_sym) {
-                               if (node->sym && node->sym->name)
-                                       symname = node->sym->name;
-                               else
-                                       symname = "";
-
-                               printf(" %s", symname);
+                               printf(" ");
+                               symbol__fprintf_symname(node->sym, stdout);
                        }
                        if (print_dso) {
-                               if (node->map && node->map->dso && node->map->dso->name)
-                                       dsoname = node->map->dso->name;
-                               else
-                                       dsoname = "";
-
-                               printf(" (%s)", dsoname);
+                               printf(" (");
+                               map__fprintf_dsoname(al.map, stdout);
+                               printf(")");
                        }
                        printf("\n");
 
        } else {
                printf("%16" PRIx64, sample->ip);
                if (print_sym) {
-                       if (al.sym && al.sym->name)
-                               symname = al.sym->name;
-                       else
-                               symname = "";
-
-                       printf(" %s", symname);
+                       printf(" ");
+                       symbol__fprintf_symname(al.sym, stdout);
                }
 
                if (print_dso) {
-                       if (al.map && al.map->dso && al.map->dso->name)
-                               dsoname = al.map->dso->name;
-                       else
-                               dsoname = "";
-
-                       printf(" (%s)", dsoname);
+                       printf(" (");
+                       map__fprintf_dsoname(al.map, stdout);
+                       printf(")");
                }
        }
 }
 
                       sym->name);
 }
 
+size_t symbol__fprintf_symname(const struct symbol *sym, FILE *fp)
+{
+       const char *symname;
+
+       if (sym && sym->name)
+               symname = sym->name;
+       else
+               symname = "[unknown]";
+
+       return fprintf(fp, "%s", symname);
+}
+
 void dso__set_long_name(struct dso *dso, char *name)
 {
        if (name == NULL)
 
 
 int symbol__init(void);
 void symbol__exit(void);
+size_t symbol__fprintf_symname(const struct symbol *sym, FILE *fp);
 bool symbol_type__is_a(char symbol_type, enum map_type map_type);
 
 size_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp);