- if (with_functions)
- {
- const char *name;
- char *alloc = NULL;
-
- name = functionname;
- if (name == NULL || *name == '\0')
- name = "??";
- else if (do_demangle)
- {
- alloc = demangle (abfd, name);
- name = alloc;
- }
-
- printf ("%s\n", name);
-
- if (alloc != NULL)
- free (alloc);
- }
-
- if (base_names && filename != NULL)
- {
- char *h;
-
- h = strrchr (filename, '/');
- if (h != NULL)
- filename = h + 1;
- }
-
- printf ("%s:%u\n", filename ? filename : "??", line);
+ while (1)
+ {
+ if (with_functions)
+ {
+ const char *name;
+ char *alloc = NULL;
+
+ name = functionname;
+ if (name == NULL || *name == '\0')
+ name = "??";
+ else if (do_demangle)
+ {
+ alloc = bfd_demangle (abfd, name, demangle_flags);
+ if (alloc != NULL)
+ name = alloc;
+ }
+
+ printf ("%s", name);
+ if (pretty_print)
+ /* Note for translators: This printf is used to join the
+ function name just printed above to the line number/
+ file name pair that is about to be printed below. Eg:
+
+ foo at 123:bar.c */
+ printf (_(" at "));
+ else
+ printf ("\n");
+
+ free (alloc);
+ }
+
+ if (base_names && filename != NULL)
+ {
+ char *h;
+
+ h = strrchr (filename, '/');
+ if (h != NULL)
+ filename = h + 1;
+ }
+
+ printf ("%s:", filename ? filename : "??");
+ if (line != 0)
+ {
+ if (discriminator != 0)
+ printf ("%u (discriminator %u)\n", line, discriminator);
+ else
+ printf ("%u\n", line);
+ }
+ else
+ printf ("?\n");
+ if (!unwind_inlines)
+ found = FALSE;
+ else
+ found = bfd_find_inliner_info (abfd, &filename, &functionname,
+ &line);
+ if (! found)
+ break;
+ if (pretty_print)
+ /* Note for translators: This printf is used to join the
+ line number/file name pair that has just been printed with
+ the line number/file name pair that is going to be printed
+ by the next iteration of the while loop. Eg:
+
+ 123:bar.c (inlined by) 456:main.c */
+ printf (_(" (inlined by) "));
+ }