[gdb/build] Fix C inclusion of nat/x86-cpuid.h
authorTom de Vries <tdevries@suse.de>
Tue, 29 Aug 2023 20:40:36 +0000 (22:40 +0200)
committerTom de Vries <tdevries@suse.de>
Tue, 29 Aug 2023 20:40:36 +0000 (22:40 +0200)
When running test-case gdb.arch/i386-avx512.exp, I run into:
...
 gdb compile failed, In file included from gdb.arch/i386-avx512.c:20:0:
 src/gdb/nat/x86-cpuid.h: In function 'x86_cpuid_count':
 src/gdb/nat/x86-cpuid.h:63:16: error: \
   'nullptr' undeclared (first use in this function)
    if (__eax == nullptr)
                 ^~~~~~~
 src/gdb/nat/x86-cpuid.h:63:16: note: each \
   undeclared identifier is reported only once for each function it appears in

                  === gdb Summary ===

 # of untested testcases         1
...

This is due to commit e85aad4ae76 ("nat/x86-cpuid.h: Add x86_cpuid_count
wrapper around __get_cpuid_count"), which introduced the nullptr check.

The header file gdb/nat/x86-cpuid.h is a file that is included in the build
and compiled as a C++ file, but also in the testsuite and compiled as a C
file.

Fix this by replacing nullptr with (void *)0.

Tested on x86_64-linux.

Co-Authored-By: Kevin Buettner <kevinb@redhat.com>
Approved-by: Kevin Buettner <kevinb@redhat.com>
gdb/nat/x86-cpuid.h

index 517113d45e8842020a8ab83a7614aa5b6e2babcd..e1b0321d5939e1030ace4f43a5767819e074fbaf 100644 (file)
 /* Always include the header for the cpu bit defines.  */
 #include "x86-gcc-cpuid.h"
 
+#ifndef __cplusplus
+/* This header file is also used in C code for some test-cases, so define
+   nullptr in C terms to avoid a compilation error.  */
+#define nullptr ((void *) 0)
+#endif
+
 #if defined(__i386__) || defined(__x86_64__)
 
 /* Return cpuid data for requested cpuid level, as found in returned
@@ -92,4 +98,10 @@ x86_cpuid_count (unsigned int __level, unsigned int __sublevel,
 
 #endif /* i386 && x86_64 */
 
+#ifndef __cplusplus
+/* Avoid leaking this local definition beyond the scope of this header
+   file.  */
+#undef nullptr
+#endif
+
 #endif /* NAT_X86_CPUID_H */