Message ID | 20210413113741.214867-3-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | osdep: allow including qemu/osdep.h outside extern "C" | expand |
On Tue, 13 Apr 2021 at 12:37, Paolo Bonzini <pbonzini@redhat.com> wrote: > > 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. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > disas/nanomips.cpp | 2 +- > include/qemu/compiler.h | 6 ++++++ > include/qemu/osdep.h | 10 +++++++++- > 3 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/disas/nanomips.cpp b/disas/nanomips.cpp > index 2b09655271..8ddef897f0 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" > } > > diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h > index cf28bb2bcd..091c45248b 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 b67b0a1e8c..3f8785a471 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 > @@ -113,6 +113,10 @@ extern int daemon(int, int); > > #include "glib-compat.h" > > +#ifdef __cplusplus > +extern "C" { > +#endif > + > #ifdef _WIN32 > #include "sysemu/os-win32.h" > #endif There are some system header includes in osdep.h below this point (sys/shm.h and sys/uio.h) -- don't they need to be moved up to go with the other system includes first ? thanks -- PMM
diff --git a/disas/nanomips.cpp b/disas/nanomips.cpp index 2b09655271..8ddef897f0 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" } diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h index cf28bb2bcd..091c45248b 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 b67b0a1e8c..3f8785a471 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 @@ -113,6 +113,10 @@ extern int daemon(int, int); #include "glib-compat.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef _WIN32 #include "sysemu/os-win32.h" #endif @@ -723,4 +727,8 @@ static inline int platform_does_not_support_system(const char *command) } #endif /* !HAVE_SYSTEM_FUNCTION */ +#ifdef __cplusplus +} +#endif + #endif
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. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- disas/nanomips.cpp | 2 +- include/qemu/compiler.h | 6 ++++++ include/qemu/osdep.h | 10 +++++++++- 3 files changed, 16 insertions(+), 2 deletions(-)