+ free (symsizes);
+}
+
+/* Construct a formatting string for printing symbol values. */
+
+static const char *
+get_print_format (void)
+{
+ const char * padding;
+ if (print_format == FORMAT_POSIX)
+ {
+ /* POSIX compatible output does not have any padding. */
+ padding = "";
+ }
+ else if (print_width == 32)
+ {
+ padding ="08";
+ }
+ else /* print_width == 64 */
+ {
+ padding = "016";
+ }
+
+ const char * length = "l";
+ if (print_width == 64)
+ {
+#if BFD_HOST_64BIT_LONG
+ ;
+#elif BFD_HOST_64BIT_LONG_LONG
+#ifndef __MSVCRT__
+ length = "ll";
+#else
+ length = "I64";
+#endif
+#endif
+ }
+
+ const char * radix = NULL;
+ switch (print_radix)
+ {
+ case 8: radix = "o"; break;
+ case 10: radix = "d"; break;
+ case 16: radix = "x"; break;
+ }
+
+ return concat ("%", padding, length, radix, NULL);
+}
+
+static void
+set_print_width (bfd *file)
+{
+ print_width = bfd_get_arch_size (file);
+
+ if (print_width == -1)
+ {
+ /* PR binutils/4292
+ Guess the target's bitsize based on its name.
+ We assume here than any 64-bit format will include
+ "64" somewhere in its name. The only known exception
+ is the MMO object file format. */
+ if (strstr (bfd_get_target (file), "64") != NULL
+ || strcmp (bfd_get_target (file), "mmo") == 0)
+ print_width = 64;
+ else
+ print_width = 32;
+ }
+ free ((char *) print_format_string);
+ print_format_string = get_print_format ();