]> Git Repo - qemu.git/commitdiff
osdep: protect qemu/osdep.h with extern "C"
authorPaolo Bonzini <[email protected]>
Fri, 16 Apr 2021 13:55:39 +0000 (14:55 +0100)
committerPeter Maydell <[email protected]>
Sat, 17 Apr 2021 17:44:30 +0000 (18:44 +0100)
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 <[email protected]>
Reviewed-by: Daniel P. BerrangĂ© <[email protected]>
Acked-by: Paolo Bonzini <[email protected]>
Signed-off-by: Peter Maydell <[email protected]>
Reviewed-by: Richard Henderson <[email protected]>
Message-id: 20210416135543[email protected]
[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 <[email protected]>
disas/arm-a64.cc
disas/nanomips.cpp
include/qemu/compiler.h
include/qemu/osdep.h

index 9fa779e175e763d561546d65a9c7d0c4b1b09605..27613d4b256897a488a5fe88308d586914fc0235 100644 (file)
@@ -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"
 }
 
index 2b096552719450b40949bbe70b436a9daad48819..8ddef897f0dec6c0aa18e8903880f7469a802739 100644 (file)
@@ -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"
 }
 
index cf28bb2bcd78df154a5b8ad198c8f4ca27bb3306..091c45248b04944e2a9354c182722be19f66fb3e 100644 (file)
 #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))
index ab84ecc7c1c074fb779913be63bd38ac85a744a7..6d8562eaf40c207efa57e915ec0080eee8800100 100644 (file)
@@ -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
This page took 0.074783 seconds and 4 git commands to generate.