Files
meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0007-mtd-utils-common.c-convert-to-integer-arithmetic.patch
Andrea Adami edbe41f53e ubi-utils-klibc_1.5.2: fix build for qemuarm
Building the recipe with TUNE_FEATURES = "aarch64" and TARGET_FPU = ""
fails. See patch headers for more details.

Patch sent upstream for master, here rebased for 1.5.2.
Tested runtime on armv5.

While there backport one more patch fixing warnings in libmtd.c and
move the patches in their specific dir, preparing for v2.0.1.

Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
2018-02-11 11:50:56 -08:00

65 lines
2.0 KiB
Diff

From 41e7c76b0853bf5241b38b8167dfd57c27fef1eb Mon Sep 17 00:00:00 2001
From: Andrea Adami <andrea.adami@gmail.com>
Date: Sun, 28 Jan 2018 21:47:59 +0100
Subject: [PATCH 7/9] mtd-utils: common.c: convert to integer arithmetic
We use floating point just to print out KiB, MiB, GiB.
Avoid that to be klibc friendly.
Fixes compilation for aarch64 against klibc:
error: '-mgeneral-regs-only' is incompatible with floating-point argument
| printf("%s%.1f GiB", p, (double)bytes / (1024 * 1024 * 1024));
etc.
Note:
* In the KiB case, we could apparently multiply by 100 before dividing
without risking overflow. This code simply avoids multiplications.
Upstream-Status: Submitted
Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
---
ubi-utils/ubiutils-common.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/ubi-utils/ubiutils-common.c b/ubi-utils/ubiutils-common.c
index 6609a6b..0ded2a4 100644
--- a/ubi-utils/ubiutils-common.c
+++ b/ubi-utils/ubiutils-common.c
@@ -107,6 +107,9 @@ long long ubiutils_get_bytes(const char *str)
void ubiutils_print_bytes(long long bytes, int bracket)
{
const char *p;
+ int GiB = 1024 * 1024 * 1024;
+ int MiB = 1024 * 1024;
+ int KiB = 1024;
if (bracket)
p = " (";
@@ -115,12 +118,15 @@ void ubiutils_print_bytes(long long bytes, int bracket)
printf("%lld bytes", bytes);
- if (bytes > 1024 * 1024 * 1024)
- printf("%s%.1f GiB", p, (double)bytes / (1024 * 1024 * 1024));
- else if (bytes > 1024 * 1024)
- printf("%s%.1f MiB", p, (double)bytes / (1024 * 1024));
- else if (bytes > 1024 && bytes != 0)
- printf("%s%.1f KiB", p, (double)bytes / 1024);
+ if (bytes > GiB)
+ printf("%s%lld.%lld GiB", p,
+ bytes / GiB, bytes % GiB / (GiB / 10));
+ else if (bytes > MiB)
+ printf("%s%lld.%lld MiB", p,
+ bytes / MiB, bytes % MiB / (MiB / 10));
+ else if (bytes > KiB && bytes != 0)
+ printf("%s%lld.%lld KiB", p,
+ bytes / KiB, bytes % KiB / (KiB / 10));
else
return;
--
2.7.4