Message ID | 20210416135543.20382-3-peter.maydell@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | extern "C" overhaul for C++ files | expand |
On 4/16/21 6:55 AM, Peter Maydell wrote: > From: Paolo Bonzini<pbonzini@redhat.com> > > System headers may include templates if compiled with a C++ compiler, > which cause the compiler to complain if qemu/osdep.h is included > within a C++ source file's 'extern "C"' block. Add > an 'extern "C"' block directly to qemu/osdep.h, so that > system headers can be kept out of it. > > There is a stray declaration early in qemu/osdep.h, which needs > to be special cased. Add a definition in qemu/compiler.h to > make it look nice. > > config-host.h, CONFIG_TARGET, exec/poison.h and qemu/compiler.h > are included outside the 'extern "C"' block; that is not > an issue because they consist entirely of preprocessor directives. > > This allows us to move the include of osdep.h in our two C++ > source files outside the extern "C" block they were previously > using for it, which in turn means that they compile successfully > against newer versions of glib which insist that glib.h is > *not* inside an extern "C" block. > > Signed-off-by: Paolo Bonzini<pbonzini@redhat.com> > Reviewed-by: Daniel P. Berrangé<berrange@redhat.com> > [PMM: Moved disas/arm-a64.cc osdep.h include out of its extern "C" block; > explained in commit message why we're doing this] > Signed-off-by: Peter Maydell<peter.maydell@linaro.org> > --- > include/qemu/compiler.h | 6 ++++++ > include/qemu/osdep.h | 10 +++++++++- > disas/arm-a64.cc | 2 +- > disas/nanomips.cpp | 2 +- > 4 files changed, 17 insertions(+), 3 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h index cf28bb2bcd7..091c45248b0 100644 --- a/include/qemu/compiler.h +++ b/include/qemu/compiler.h @@ -11,6 +11,12 @@ #define QEMU_STATIC_ANALYSIS 1 #endif +#ifdef __cplusplus +#define QEMU_EXTERN_C extern "C" +#else +#define QEMU_EXTERN_C extern +#endif + #define QEMU_NORETURN __attribute__ ((__noreturn__)) #define QEMU_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index ab84ecc7c1c..6d8562eaf40 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -57,7 +57,7 @@ #define daemon qemu_fake_daemon_function #include <stdlib.h> #undef daemon -extern int daemon(int, int); +QEMU_EXTERN_C int daemon(int, int); #endif #ifdef _WIN32 @@ -118,6 +118,10 @@ extern int daemon(int, int); */ #include "glib-compat.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef _WIN32 #include "sysemu/os-win32.h" #endif @@ -728,4 +732,8 @@ static inline int platform_does_not_support_system(const char *command) } #endif /* !HAVE_SYSTEM_FUNCTION */ +#ifdef __cplusplus +} +#endif + #endif diff --git a/disas/arm-a64.cc b/disas/arm-a64.cc index 9fa779e175e..27613d4b256 100644 --- a/disas/arm-a64.cc +++ b/disas/arm-a64.cc @@ -17,8 +17,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -extern "C" { #include "qemu/osdep.h" +extern "C" { #include "disas/dis-asm.h" } diff --git a/disas/nanomips.cpp b/disas/nanomips.cpp index 2b096552719..8ddef897f0d 100644 --- a/disas/nanomips.cpp +++ b/disas/nanomips.cpp @@ -27,8 +27,8 @@ * Reference Manual", Revision 01.01, April 27, 2018 */ -extern "C" { #include "qemu/osdep.h" +extern "C" { #include "disas/dis-asm.h" }