/* The output format to use. */
static struct output_fns *format = &formats[FORMAT_DEFAULT];
static unsigned int print_format = FORMAT_DEFAULT;
+static const char *print_format_string = NULL;
/* Command options. */
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)
{
else
print_width = 32;
}
+ free ((char *) print_format_string);
+ print_format_string = get_print_format ();
}
static void
}
}
\f
-/* Construct a formatting string for printing symbol values. */
-
-static const char *
-get_print_format (void)
-{
- static const char * saved_format = NULL;
-
- /* See if we have already constructed the format. */
- if (saved_format)
- return saved_format;
-
- 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;
- }
-
- saved_format = concat ("%", padding, length, radix, NULL);
- return saved_format;
-}
-
/* Print a symbol value. */
static void
switch (print_width)
{
case 32:
- printf (get_print_format (), (unsigned long) val);
+ printf (print_format_string, (unsigned long) val);
break;
case 64:
#if BFD_HOST_64BIT_LONG || BFD_HOST_64BIT_LONG_LONG
- printf (get_print_format (), val);
+ printf (print_format_string, val);
#else
/* We have a 64 bit value to print, but the host is only 32 bit. */
if (print_radix == 16)