aboutsummaryrefslogtreecommitdiff
path: root/ld/ldmisc.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-08-04 10:12:51 +0930
committerAlan Modra <amodra@gmail.com>2022-08-04 12:00:36 +0930
commit6b9bd54c24dcf08e400e5b79a958e051ccfde30d (patch)
tree04496fb28858235f67ed838814466f863b6babf4 /ld/ldmisc.c
parent94e27e8e69a07d69554ee7598419646d3ee99907 (diff)
downloadgdb-6b9bd54c24dcf08e400e5b79a958e051ccfde30d.zip
gdb-6b9bd54c24dcf08e400e5b79a958e051ccfde30d.tar.gz
gdb-6b9bd54c24dcf08e400e5b79a958e051ccfde30d.tar.bz2
Re: Get rid of fprintf_vma and sprintf_vma
Commit f493c2174e messed the formatting in linker map files, particularly for 32-bit builds where a number of tests using map files regressed. I should have noticed the BFD64 conditional printing of spaces to line up output due to the original %V printing hex vmas with 16 digits when BFD64 and 8 digits when not. Besides that, it is nicer to print 32-bit vmas for 32-bit targets. So change %V back to be target dependent, now using bfd_sprintf_vma. Since minfo doesn't return the number of chars printed, that means some places that currently use %V must instead sprintf to a buffer in order to find the length printed. * ldmisc.h (print_spaces): Declare. (print_space): Change to a macro. * ldmisc.c (vfinfo): Use bfd_sprintf_vma for %V. Tidy %W case. (print_space): Delete. (print_spaces): New function. * emultempl/aix.em (print_symbol): Use print_spaces. * ldctor.c (ldctor_build_sets): Likewise. * ldmain.c (add_archive_element): Likewise. * ldlang.c (print_one_symbol, lang_print_asneeded): Likewise. (print_output_section_statement, print_data_statement): Likewise. (print_reloc_statement, print_padding_statement): Likewise. (print_assignment): Likewise. Also replace %V printing of vmas with printing to a buffer in order to properly format output. (print_input_section, lang_one_common): Likewise.
Diffstat (limited to 'ld/ldmisc.c')
-rw-r--r--ld/ldmisc.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/ld/ldmisc.c b/ld/ldmisc.c
index ee52487..3a02f75 100644
--- a/ld/ldmisc.c
+++ b/ld/ldmisc.c
@@ -47,7 +47,7 @@
%H like %C but in addition emit section+offset
%P print program name
%V hex bfd_vma
- %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
+ %W hex bfd_vma with 0x with no leading zeros taking up 10 spaces
%X no object output, fail return
%d integer, like printf
%ld long, like printf
@@ -241,9 +241,13 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning)
case 'V':
/* hex bfd_vma */
{
- uint64_t value = args[arg_no].v;
+ char buf[32];
+ bfd_vma value;
+
+ value = args[arg_no].v;
++arg_count;
- fprintf (fp, "%016" PRIx64, value);
+ bfd_sprintf_vma (link_info.output_bfd, buf, value);
+ fprintf (fp, "%s", buf);
}
break;
@@ -258,22 +262,15 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning)
case 'W':
/* hex bfd_vma with 0x with no leading zeroes taking up
- 8 spaces. */
+ 10 spaces (including the 0x). */
{
- char buf[100];
+ char buf[32];
uint64_t value;
- int len;
value = args[arg_no].v;
++arg_count;
- sprintf (buf, "%" PRIx64, value);
- len = strlen (buf);
- while (len < 8)
- {
- putc (' ', fp);
- ++len;
- }
- fprintf (fp, "0x%s", buf);
+ sprintf (buf, "0x%" PRIx64, value);
+ fprintf (fp, "%10s", buf);
}
break;
@@ -653,9 +650,9 @@ lfinfo (FILE *file, const char *fmt, ...)
/* Functions to print the link map. */
void
-print_space (void)
+print_spaces (int count)
{
- fprintf (config.map_file, " ");
+ fprintf (config.map_file, "%*s", count, "");
}
void