From f493c2174ef99a43c0a5d89179122f857955d738 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 1 Aug 2022 11:33:46 +0930 Subject: Get rid of fprintf_vma and sprintf_vma These two macros print either a 16 digit hex number or an 8 digit hex number. Unfortunately they depend on both target and host, which means that the output for 32-bit targets may be either 8 or 16 hex digits. Replace them in most cases with code that prints a bfd_vma using PRIx64. In some cases, deliberately lose the leading zeros. This change some output, notably in base/offset fields of m68k disassembly which I think looks better that way, and in error messages. I've kept leading zeros in symbol dumps (objdump -t) and in PE header dumps. bfd/ * bfd-in.h (fprintf_vma, sprintf_vma, printf_vma): Delete. * bfd-in2.h: Regenerate. * bfd.c (bfd_sprintf_vma): Don't use sprintf_vma. (bfd_fprintf_vma): Don't use fprintf_vma. * coff-rs6000.c (xcoff_reloc_type_tls): Don't use sprintf_vma. Instead use PRIx64 to print bfd_vma values. (xcoff_ppc_relocate_section): Likewise. * cofflink.c (_bfd_coff_write_global_sym): Likewise. * mmo.c (mmo_write_symbols_and_terminator): Likewise. * srec.c (srec_write_symbols): Likewise. * elf32-xtensa.c (print_r_reloc): Similarly for fprintf_vma. * pei-x86_64.c (pex64_dump_xdata): Likewise. (pex64_bfd_print_pdata_section): Likewise. * som.c (som_print_symbol): Likewise. * ecoff.c (_bfd_ecoff_print_symbol): Use bfd_fprintf_vma. opcodes/ * dis-buf.c (perror_memory, generic_print_address): Don't use sprintf_vma. Instead use PRIx64 to print bfd_vma values. * i386-dis.c (print_operand_value, print_displacement): Likewise. * m68k-dis.c (print_base, print_indexed): Likewise. * ns32k-dis.c (print_insn_arg): Likewise. * ia64-gen.c (_opcode_int64_low, _opcode_int64_high): Delete. (opcode_fprintf_vma): Delete. (print_main_table): Use PRIx64 to print opcode. binutils/ * od-macho.c: Replace all uses of printf_vma with bfd_printf_vma. * objcopy.c (copy_object): Don't use sprintf_vma. Instead use PRIx64 to print bfd_vma values. (copy_main): Likewise. * readelf.c (CHECK_ENTSIZE_VALUES): Likewise. (dynamic_section_mips_val): Likewise. (print_vma): Don't use printf_vma. Instead use PRIx64 to print bfd_vma values. (dump_ia64_vms_dynamic_fixups): Likewise. (process_version_sections): Likewise. * rddbg.c (stab_context): Likewise. gas/ * config/tc-i386.c (offset_in_range): Don't use sprintf_vma. Instead use PRIx64 to print bfd_vma values. (md_assemble): Likewise. * config/tc-mips.c (load_register, macro): Likewise. * messages.c (as_internal_value_out_of_range): Likewise. * read.c (emit_expr_with_reloc): Likewise. * config/tc-ia64.c (note_register_values): Don't use fprintf_vma. Instead use PRIx64 to print bfd_vma values. (print_dependency): Likewise. * listing.c (list_symbol_table): Use bfd_sprintf_vma. * symbols.c (print_symbol_value_1): Use %p to print pointers. (print_binary): Likewise. (print_expr_1): Use PRIx64 to print bfd_vma values. * write.c (print_fixup): Use %p to print pointers. Don't use fprintf_vma. * testsuite/gas/all/overflow.l: Update expected output. * testsuite/gas/m68k/mcf-mov3q.d: Likewise. * testsuite/gas/m68k/operands.d: Likewise. * testsuite/gas/s12z/truncated.d: Likewise. ld/ * deffilep.y (def_file_print): Don't use fprintf_vma. Instead use PRIx64 to print bfd_vma values. * emultempl/armelf.em (gld${EMULATION_NAME}_finish): Don't use sprintf_vma. Instead use PRIx64 to print bfd_vma values. * emultempl/pe.em (gld${EMULATION_NAME}_finish): Likewise. * ldlang.c (lang_map): Use %V to print region origin. (lang_one_common): Don't use sprintf_vma. * ldmisc.c (vfinfo): Don't use fprintf_vma or sprintf_vma. * pe-dll.c (pe_dll_generate_def_file): Likewise. gdb/ * remote.c (remote_target::trace_set_readonly_regions): Replace uses of sprintf_vma with bfd_sprintf_vma. --- gas/messages.c | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) (limited to 'gas/messages.c') diff --git a/gas/messages.c b/gas/messages.c index 3b34466..e43b2db 100644 --- a/gas/messages.c +++ b/gas/messages.c @@ -369,12 +369,6 @@ as_internal_value_out_of_range (const char *prefix, bool bad) { const char * err; - /* These buffer sizes are excessive, but better to be safe than sorry. - Note - these buffers are used in order to make the error message - string translateable. */ - char val_buf [128]; - char min_buf [128]; - char max_buf [128]; if (prefix == NULL) prefix = ""; @@ -386,16 +380,14 @@ as_internal_value_out_of_range (const char *prefix, if (max <= 1) abort (); - sprintf (val_buf, "%" BFD_VMA_FMT "d", val); - sprintf (min_buf, "%" BFD_VMA_FMT "d", right); - /* xgettext:c-format */ - err = _("%s out of domain (%s is not a multiple of %s)"); + err = _("%s out of domain (%" PRId64 + " is not a multiple of %" PRId64 ")"); if (bad) - as_bad_where (file, line, err, prefix, val_buf, min_buf); + as_bad_where (file, line, err, prefix, (int64_t) val, (int64_t) right); else - as_warn_where (file, line, err, prefix, val_buf, min_buf); + as_warn_where (file, line, err, prefix, (int64_t) val, (int64_t) right); } else if ( val < HEX_MAX_THRESHOLD && min < HEX_MAX_THRESHOLD @@ -404,31 +396,29 @@ as_internal_value_out_of_range (const char *prefix, && min > HEX_MIN_THRESHOLD && max > HEX_MIN_THRESHOLD) { - sprintf (val_buf, "%" BFD_VMA_FMT "d", val); - sprintf (min_buf, "%" BFD_VMA_FMT "d", min); - sprintf (max_buf, "%" BFD_VMA_FMT "d", max); - /* xgettext:c-format. */ - err = _("%s out of range (%s is not between %s and %s)"); + err = _("%s out of range (%" PRId64 + " is not between %" PRId64 " and %" PRId64 ")"); if (bad) - as_bad_where (file, line, err, prefix, val_buf, min_buf, max_buf); + as_bad_where (file, line, err, prefix, + (int64_t) val, (int64_t) min, (int64_t) max); else - as_warn_where (file, line, err, prefix, val_buf, min_buf, max_buf); + as_warn_where (file, line, err, prefix, + (int64_t) val, (int64_t) min, (int64_t) max); } else { - sprintf_vma (val_buf, (bfd_vma) val); - sprintf_vma (min_buf, (bfd_vma) min); - sprintf_vma (max_buf, (bfd_vma) max); - /* xgettext:c-format. */ - err = _("%s out of range (0x%s is not between 0x%s and 0x%s)"); + err = _("%s out of range (0x%" PRIx64 + " is not between 0x%" PRIx64 " and 0x%" PRIx64 ")"); if (bad) - as_bad_where (file, line, err, prefix, val_buf, min_buf, max_buf); + as_bad_where (file, line, err, prefix, + (int64_t) val, (int64_t) min, (int64_t) max); else - as_warn_where (file, line, err, prefix, val_buf, min_buf, max_buf); + as_warn_where (file, line, err, prefix, + (int64_t) val, (int64_t) min, (int64_t) max); } } -- cgit v1.1