scripts/dtc: fix '%zx' warning
authorRussell King <>
Thu, 31 Aug 2017 23:15:36 +0000 (16:15 -0700)
committerLinus Torvalds <>
Thu, 31 Aug 2017 23:33:15 +0000 (16:33 -0700)
dtc uses an incorrect format specifier for printing a uint64_t value.
uint64_t may be either 'unsigned long' or 'unsigned long long' depending
on the host architecture.

Fix this by using %llx and casting to unsigned long long, which ensures
that we always have a wide enough variable to print 64 bits of hex.

    HOSTCC  scripts/dtc/checks.o
  scripts/dtc/checks.c: In function 'check_simple_bus_reg':
  scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=]
    snprintf(unit_addr, sizeof(unit_addr), "%zx", reg);
  scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=]

Fixes: 828d4cdd012c ("dtc: check.c fix compile error")
Signed-off-by: Russell King <>
Cc: Rob Herring <>
Cc: Frank Rowand <>
Cc: Shuah Khan <>
Cc: David Gibson <>
Cc: Michal Marek <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>

index 4b72b530c84f1f4b4e98d8342d9d62fefe8d34d6..62ea8f83d4a023a9780c6dc219d8f29ba244c506 100644 (file)
@@ -873,7 +873,7 @@ static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct no
        while (size--)
                reg = (reg << 32) | fdt32_to_cpu(*(cells++));
-       snprintf(unit_addr, sizeof(unit_addr), "%zx", reg);
+       snprintf(unit_addr, sizeof(unit_addr), "%llx", (unsigned long long)reg);
        if (!streq(unitname, unit_addr))
                FAIL(c, dti, "Node %s simple-bus unit address format error, expected \"%s\"",
                     node->fullpath, unit_addr);