mirror of https://github.com/xemu-project/xemu.git
bsd-user: Move PRAGMA_DISABLE_PACKED_WARNING etc to qemu.h
For the moment, move PRAGMA_DISABLE_PACKED_WARNING and PRAGMA_ENABLE_PACKED_WARNING back to bsd-user/qemu.h. Of course, these should be in compiler.h, but that interferes with too many things at the moment, so take one step back to unbreak clang linux-user builds first. Use the exact same version that's in linux-user/qemu.h since that's what should be in compiler.h. Signed-off-by: Warner Losh <imp@bsdimp.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
813bac3d8d
commit
8a45962be3
|
@ -273,6 +273,33 @@ static inline bool access_ok(int type, abi_ulong addr, abi_ulong size)
|
||||||
* These are usually used to access struct data members once the struct has been
|
* These are usually used to access struct data members once the struct has been
|
||||||
* locked - usually with lock_user_struct().
|
* locked - usually with lock_user_struct().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tricky points:
|
||||||
|
* - Use __builtin_choose_expr to avoid type promotion from ?:,
|
||||||
|
* - Invalid sizes result in a compile time error stemming from
|
||||||
|
* the fact that abort has no parameters.
|
||||||
|
* - It's easier to use the endian-specific unaligned load/store
|
||||||
|
* functions than host-endian unaligned load/store plus tswapN.
|
||||||
|
* - The pragmas are necessary only to silence a clang false-positive
|
||||||
|
* warning: see https://bugs.llvm.org/show_bug.cgi?id=39113 .
|
||||||
|
* - gcc has bugs in its _Pragma() support in some versions, eg
|
||||||
|
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83256 -- so we only
|
||||||
|
* include the warning-suppression pragmas for clang
|
||||||
|
*/
|
||||||
|
#if defined(__clang__) && __has_warning("-Waddress-of-packed-member")
|
||||||
|
#define PRAGMA_DISABLE_PACKED_WARNING \
|
||||||
|
_Pragma("GCC diagnostic push"); \
|
||||||
|
_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")
|
||||||
|
|
||||||
|
#define PRAGMA_REENABLE_PACKED_WARNING \
|
||||||
|
_Pragma("GCC diagnostic pop")
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define PRAGMA_DISABLE_PACKED_WARNING
|
||||||
|
#define PRAGMA_REENABLE_PACKED_WARNING
|
||||||
|
#endif
|
||||||
|
|
||||||
#define __put_user_e(x, hptr, e) \
|
#define __put_user_e(x, hptr, e) \
|
||||||
do { \
|
do { \
|
||||||
PRAGMA_DISABLE_PACKED_WARNING; \
|
PRAGMA_DISABLE_PACKED_WARNING; \
|
||||||
|
|
|
@ -22,36 +22,6 @@
|
||||||
#define QEMU_EXTERN_C extern
|
#define QEMU_EXTERN_C extern
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Tricky points:
|
|
||||||
* - Use __builtin_choose_expr to avoid type promotion from ?:,
|
|
||||||
* - Invalid sizes result in a compile time error stemming from
|
|
||||||
* the fact that abort has no parameters.
|
|
||||||
* - It's easier to use the endian-specific unaligned load/store
|
|
||||||
* functions than host-endian unaligned load/store plus tswapN.
|
|
||||||
* - The pragmas are necessary only to silence a clang false-positive
|
|
||||||
* warning: see https://bugs.llvm.org/show_bug.cgi?id=39113 .
|
|
||||||
* - We have to disable -Wpragmas warnings to avoid a complaint about
|
|
||||||
* an unknown warning type from older compilers that don't know about
|
|
||||||
* -Waddress-of-packed-member.
|
|
||||||
* - gcc has bugs in its _Pragma() support in some versions, eg
|
|
||||||
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83256 -- so we only
|
|
||||||
* include the warning-suppression pragmas for clang
|
|
||||||
*/
|
|
||||||
#ifdef __clang__
|
|
||||||
#define PRAGMA_DISABLE_PACKED_WARNING \
|
|
||||||
_Pragma("GCC diagnostic push"); \
|
|
||||||
_Pragma("GCC diagnostic ignored \"-Wpragmas\""); \
|
|
||||||
_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")
|
|
||||||
|
|
||||||
#define PRAGMA_REENABLE_PACKED_WARNING \
|
|
||||||
_Pragma("GCC diagnostic pop")
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define PRAGMA_DISABLE_PACKED_WARNING
|
|
||||||
#define PRAGMA_REENABLE_PACKED_WARNING
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_WIN32) && (defined(__x86_64__) || defined(__i386__))
|
#if defined(_WIN32) && (defined(__x86_64__) || defined(__i386__))
|
||||||
# define QEMU_PACKED __attribute__((gcc_struct, packed))
|
# define QEMU_PACKED __attribute__((gcc_struct, packed))
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue