On Wed, 24 Feb 2021 at 11:04, Daniel P. Berrangé <berra...@redhat.com> wrote:
> So from osdep.h I think something like this is likely sufficient:
>
> diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> index ba15be9c56..7a1d83a8b6 100644
> --- a/include/qemu/osdep.h
> +++ b/include/qemu/osdep.h
> @@ -126,6 +126,7 @@ extern int daemon(int, int);
>  #include "glib-compat.h"
>  #include "qemu/typedefs.h"
>
> +extern "C" {

Needs to be protected by #ifdef so it's only relevant for the
C++ compiler, right?

>  /*
>   * For mingw, as of v6.0.0, the function implementing the assert macro is
>   * not marked as noreturn, so the compiler cannot delete code following an
> @@ -722,4 +723,6 @@ static inline int platform_does_not_support_system(const 
> char *command)
>  }
>  #endif /* !HAVE_SYSTEM_FUNCTION */
>
> +}
> +
>  #endif
>
>
> We'll also need to them protect any local headers we use before this point.
>
> $ grep #include ../../../include/qemu/osdep.h  | grep -v '<'
> #include "config-host.h"
> #include CONFIG_TARGET
> #include "exec/poison.h"
> #include "qemu/compiler.h"
> #include "sysemu/os-win32.h"
> #include "sysemu/os-posix.h"
> #include "glib-compat.h"
> #include "qemu/typedefs.h"
>
> and transitively through that list, but I think there's no too many
> more there.

Is there anything we can do to make the compiler complain if we
get this wrong? Otherwise it seems likely that we'll end up
accidentally putting things inside or outside 'extern "C"'
declarations when they shouldn't be, as we make future changes
to our headers.

(The other approach would be to try to get rid of the
C++ in the codebase. We could probably say 'drop vixl
and always use capstone', for instance.)

thanks
-- PMM

Reply via email to