On Tue, 13 Apr 2021 at 12:37, Paolo Bonzini <pbonz...@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 <pbonz...@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