mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-27 12:28:52 +09:00
![Vasili Galka](/assets/img/avatar_default.png)
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>
68 lines
1.9 KiB
C
68 lines
1.9 KiB
C
#ifndef __ASM_NIOS2_POSIX_TYPES_H_
|
|
#define __ASM_NIOS2_POSIX_TYPES_H_
|
|
|
|
/*
|
|
* This file is generally used by user-level software, so you need to
|
|
* be a little careful about namespace pollution etc. Also, we cannot
|
|
* assume GCC is being used.
|
|
*/
|
|
|
|
typedef unsigned short __kernel_dev_t;
|
|
typedef unsigned long __kernel_ino_t;
|
|
typedef unsigned short __kernel_mode_t;
|
|
typedef unsigned short __kernel_nlink_t;
|
|
typedef long __kernel_off_t;
|
|
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;
|
|
typedef long __kernel_suseconds_t;
|
|
typedef long __kernel_clock_t;
|
|
typedef int __kernel_daddr_t;
|
|
typedef char * __kernel_caddr_t;
|
|
typedef unsigned short __kernel_uid16_t;
|
|
typedef unsigned short __kernel_gid16_t;
|
|
typedef unsigned int __kernel_uid32_t;
|
|
typedef unsigned int __kernel_gid32_t;
|
|
|
|
typedef unsigned short __kernel_old_uid_t;
|
|
typedef unsigned short __kernel_old_gid_t;
|
|
|
|
#ifdef __GNUC__
|
|
typedef long long __kernel_loff_t;
|
|
#endif
|
|
|
|
typedef struct {
|
|
#if defined(__KERNEL__) || defined(__USE_ALL)
|
|
int val[2];
|
|
#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
|
|
int __val[2];
|
|
#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
|
|
} __kernel_fsid_t;
|
|
|
|
#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
|
|
|
|
#undef __FD_SET
|
|
#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
|
|
|
|
#undef __FD_CLR
|
|
#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
|
|
|
|
#undef __FD_ISSET
|
|
#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
|
|
|
|
#undef __FD_ZERO
|
|
#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp)))
|
|
|
|
#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
|
|
|
|
#endif /* __ASM_NIOS2_POSIX_TYPES_H_ */
|