From bb04b7bcf66e5d00a7abdf5c9a76026aa120e0df Mon Sep 17 00:00:00 2001 From: Justin Swartz Date: Tue, 22 Jul 2025 15:57:17 +0200 Subject: [PATCH] tools: mips-relocs: replace format string introducers The statement that prints the ELF object type value assumes that "%lx" (long unsigned int, hexadecimal) is suitable for printing a uint64_t typed value. While this may seem to work for some machines, ie. amd64, it isn't ideal on a 32-bit system, such as x86 where uint64_t is likely to be equivalent to a long long unsigned int, as indicated by: ../tools/mips-relocs.c:275:34: warning: format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=] 275 | printf("type 0x%lx\n", ehdr_field(e_type)); | ~~^ | | | long unsigned int | %llx As the ehdr_field function-like macro expands to a uint64_t value, it is better to use the PRIx64 macro in place of "%lx" to ensure that the correct format string introducer is specified for the actual type hiding behind uint64_t. A similar issue is also present in the report of .rel section overflow, where "%lx" is used to print a few size_t typed values, and would be better served by "%zx" instead. Signed-off-by: Justin Swartz Fixes: 963014641117 ("MIPS: make size of relocation table fixed but configurable") Fixes: 703ec9ddf965 ("MIPS: Stop building position independent code") Cc: Paul Burton Cc: Daniel Schwierzeck Cc: Masahiro Yamada --- tools/mips-relocs.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/mips-relocs.c b/tools/mips-relocs.c index 5db610f5c77..e9234a74f51 100644 --- a/tools/mips-relocs.c +++ b/tools/mips-relocs.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -272,7 +273,7 @@ int main(int argc, char *argv[]) if (ehdr_field(e_type) != ET_EXEC) { fprintf(stderr, "Input ELF is not an executable\n"); - printf("type 0x%lx\n", ehdr_field(e_type)); + printf("type 0x%" PRIx64 "\n", ehdr_field(e_type)); err = -EINVAL; goto out_free_relocs; } @@ -394,9 +395,9 @@ int main(int argc, char *argv[]) rel_size = shdr_field(i_rel_shdr, sh_size); rel_actual_size = buf - buf_start; if (rel_actual_size > rel_size) { - fprintf(stderr, "Relocations overflow available space of 0x%lx (required 0x%lx)!\n", + fprintf(stderr, "Relocations overflow available space of 0x%zx (required 0x%zx)!\n", rel_size, rel_actual_size); - fprintf(stderr, "Please adjust CONFIG_MIPS_RELOCATION_TABLE_SIZE to at least 0x%lx\n", + fprintf(stderr, "Please adjust CONFIG_MIPS_RELOCATION_TABLE_SIZE to at least 0x%zx\n", (rel_actual_size + 0x100) & ~0xFF); err = -ENOMEM; goto out_free_relocs; -- 2.47.2