summaryrefslogtreecommitdiff
path: root/arch/nios2
diff options
context:
space:
mode:
authorVasili Galka <vvv444@gmail.com>2014-08-14 17:42:05 +0300
committerThomas Chou <thomas@wytron.com.tw>2014-08-24 11:27:31 +0800
commit00a2517fcb5159ed016b25130184638b1dbf2f02 (patch)
tree053a5d5a0674d99458d4f6e437a2b1b53253031b /arch/nios2
parent7f6b8315d18f683c5181d0c3694818c1b2a20dcd (diff)
downloadu-boot-imx-00a2517fcb5159ed016b25130184638b1dbf2f02.zip
u-boot-imx-00a2517fcb5159ed016b25130184638b1dbf2f02.tar.gz
u-boot-imx-00a2517fcb5159ed016b25130184638b1dbf2f02.tar.bz2
nios2: Fix printf size_t format related warnings (again...)
When compiling the current code on GCC 4.8.3, the following warnings appear: warning: format '%zu' expects argument of type 'size_t', but argument 2 has type 'long unsigned int' [-Wformat=] There were many mails about such warnings on different architectures. This patch limits itself to the nios2 architecture. The problem is that for the size_t (%zu, %zd, ...) arguments of printf GCC does not verify the type match to size_t type. It verifies the type match to the compiler-defined __SIZE_TYPE__ type. Thus, if size_t is defined different from __SIZE_TYPE__ - warnings inevitably appear. There is a comment by Thomas Chou to the (rejected) patch: http://patchwork.ozlabs.org/patch/272102/ which explains that the older GCC toolchains (gcc-3.4.6 and gcc-4.1.2) expect size_t to be "unsigned long" and the newer expect it to be "unsigned int". Thus, no matter how we define size_t - either way warnings appear when using some GCC version. By rejecting that patch, a choice was made to prefer older GCC versions and leave the warnings when building with the newer toolchains. Personally, I disagree with this choice... In any case, this patch proposes a way to fix the warnings for any GCC version. Just define size_t using the __SIZE_TYPE__ compiler-defined type and the type verification will pass. I tested that this fixes the warning on GCC 4.8.3. I don't have an older toolchain to test with, but __SIZE_TYPE__ was definitely defined in GCC 3.4.6, so it should work there too. Signed-off-by: Vasili Galka <vvv444@gmail.com> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Diffstat (limited to 'arch/nios2')
-rw-r--r--arch/nios2/include/asm/posix_types.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/nios2/include/asm/posix_types.h b/arch/nios2/include/asm/posix_types.h
index 6733640..6b6c39b 100644
--- a/arch/nios2/include/asm/posix_types.h
+++ b/arch/nios2/include/asm/posix_types.h
@@ -16,7 +16,11 @@ typedef int __kernel_pid_t;
typedef unsigned short __kernel_ipc_pid_t;
typedef unsigned short __kernel_uid_t;
typedef unsigned short __kernel_gid_t;
+#ifdef __GNUC__
+typedef __SIZE_TYPE__ __kernel_size_t;
+#else
typedef unsigned long __kernel_size_t;
+#endif
typedef long __kernel_ssize_t;
typedef int __kernel_ptrdiff_t;
typedef long __kernel_time_t;