Message ID | 20210515183531.372925-1-f4bug@amsat.org |
---|---|
State | New |
Headers | show |
Series | disas/libvixl: Protect C system header for C++ compiler | expand |
Forgot to tag as RFC. Cc'ing mjt to have feedback from Debian packaging. On 5/15/21 8:35 PM, Philippe Mathieu-Daudé wrote: > When selecting an ARM target on Debian unstable, we get: > > Compiling C++ object libcommon.fa.p/disas_libvixl_vixl_utils.cc.o > FAILED: libcommon.fa.p/disas_libvixl_vixl_utils.cc.o > c++ -Ilibcommon.fa.p -I. -I.. [...] -o libcommon.fa.p/disas_libvixl_vixl_utils.cc.o -c ../disas/libvixl/vixl/utils.cc > In file included from /home/philmd/qemu/disas/libvixl/vixl/utils.h:30, > from ../disas/libvixl/vixl/utils.cc:27: > /usr/include/string.h:36:43: error: missing binary operator before token "(" > 36 | #if defined __cplusplus && (__GNUC_PREREQ (4, 4) \ > | ^ > /usr/include/string.h:53:62: error: missing binary operator before token "(" > 53 | #if defined __USE_MISC || defined __USE_XOPEN || __GLIBC_USE (ISOC2X) > | ^ > /usr/include/string.h:165:21: error: missing binary operator before token "(" > 165 | || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X)) > | ^ > /usr/include/string.h:174:43: error: missing binary operator before token "(" > 174 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X) > | ^ > /usr/include/string.h:492:19: error: missing binary operator before token "(" > 492 | #if __GNUC_PREREQ (3,4) > | ^ > > Similarly to commit 875df03b221 ('osdep: protect qemu/osdep.h with > extern "C"'), guard the <string.h> system header with 'extern "C"'. > > Relevant information from the host: > > $ lsb_release -d > Description: Debian GNU/Linux 11 (bullseye) > $ gcc --version > gcc (Debian 10.2.1-6) 10.2.1 20210110 > $ dpkg -S /usr/include/string.h > libc6-dev: /usr/include/string.h > $ apt-cache show libc6-dev > Package: libc6-dev > Version: 2.31-11 > > Buglink: https://bugs.launchpad.net/qemu/+bug/1914870 > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > RFC because I've no idea about C++, but this fixes the build for me. > > Quick reproducer: > > $ ../configure --disable-tools --target-list=aarch64-linux-user > > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Daniel P. Berrangé <berrange@redhat.com> > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Richard Henderson <richard.henderson@linaro.org> > Cc: Eric Blake <eblake@redhat.com> > Cc: Thomas Huth <thuth@redhat.com> > --- > disas/libvixl/vixl/utils.h | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/disas/libvixl/vixl/utils.h b/disas/libvixl/vixl/utils.h > index 5ab134e240a..fc28d7456c1 100644 > --- a/disas/libvixl/vixl/utils.h > +++ b/disas/libvixl/vixl/utils.h > @@ -27,8 +27,10 @@ > #ifndef VIXL_UTILS_H > #define VIXL_UTILS_H > > -#include <string.h> > #include <cmath> > +extern "C" { > +#include <string.h> > +} > #include "vixl/globals.h" > #include "vixl/compiler-intrinsics.h" > >
On 15/05/2021 20.35, Philippe Mathieu-Daudé wrote: > When selecting an ARM target on Debian unstable, we get: > > Compiling C++ object libcommon.fa.p/disas_libvixl_vixl_utils.cc.o > FAILED: libcommon.fa.p/disas_libvixl_vixl_utils.cc.o > c++ -Ilibcommon.fa.p -I. -I.. [...] -o libcommon.fa.p/disas_libvixl_vixl_utils.cc.o -c ../disas/libvixl/vixl/utils.cc > In file included from /home/philmd/qemu/disas/libvixl/vixl/utils.h:30, > from ../disas/libvixl/vixl/utils.cc:27: > /usr/include/string.h:36:43: error: missing binary operator before token "(" > 36 | #if defined __cplusplus && (__GNUC_PREREQ (4, 4) \ > | ^ > /usr/include/string.h:53:62: error: missing binary operator before token "(" > 53 | #if defined __USE_MISC || defined __USE_XOPEN || __GLIBC_USE (ISOC2X) > | ^ > /usr/include/string.h:165:21: error: missing binary operator before token "(" > 165 | || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X)) > | ^ > /usr/include/string.h:174:43: error: missing binary operator before token "(" > 174 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X) > | ^ > /usr/include/string.h:492:19: error: missing binary operator before token "(" > 492 | #if __GNUC_PREREQ (3,4) > | ^ > > Similarly to commit 875df03b221 ('osdep: protect qemu/osdep.h with > extern "C"'), guard the <string.h> system header with 'extern "C"'. > > Relevant information from the host: > > $ lsb_release -d > Description: Debian GNU/Linux 11 (bullseye) > $ gcc --version > gcc (Debian 10.2.1-6) 10.2.1 20210110 > $ dpkg -S /usr/include/string.h > libc6-dev: /usr/include/string.h > $ apt-cache show libc6-dev > Package: libc6-dev > Version: 2.31-11 > > Buglink: https://bugs.launchpad.net/qemu/+bug/1914870 > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > RFC because I've no idea about C++, but this fixes the build for me. > > Quick reproducer: > > $ ../configure --disable-tools --target-list=aarch64-linux-user > > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Daniel P. Berrangé <berrange@redhat.com> > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Richard Henderson <richard.henderson@linaro.org> > Cc: Eric Blake <eblake@redhat.com> > Cc: Thomas Huth <thuth@redhat.com> > --- > disas/libvixl/vixl/utils.h | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/disas/libvixl/vixl/utils.h b/disas/libvixl/vixl/utils.h > index 5ab134e240a..fc28d7456c1 100644 > --- a/disas/libvixl/vixl/utils.h > +++ b/disas/libvixl/vixl/utils.h > @@ -27,8 +27,10 @@ > #ifndef VIXL_UTILS_H > #define VIXL_UTILS_H > > -#include <string.h> > #include <cmath> > +extern "C" { > +#include <string.h> > +} Could you please try to backport the upstream patch instead: https://git.linaro.org/arm/vixl.git/commit/?id=78973f258039f6e96 See the changes to utils-vixl.h: diff --git a/src/utils-vixl.h b/src/utils-vixl.h index 06c7551e..b27310db 100644 --- a/src/utils-vixl.h +++ b/src/utils-vixl.h @@ -27,9 +27,8 @@ #ifndef VIXL_UTILS_H #define VIXL_UTILS_H -#include <string.h> - #include <cmath> +#include <cstring> #include <vector> #include "compiler-intrinsics-vixl.h" Thomas
On 5/16/21 2:46 PM, Thomas Huth wrote: > On 15/05/2021 20.35, Philippe Mathieu-Daudé wrote: >> When selecting an ARM target on Debian unstable, we get: >> >> Compiling C++ object libcommon.fa.p/disas_libvixl_vixl_utils.cc.o >> FAILED: libcommon.fa.p/disas_libvixl_vixl_utils.cc.o >> c++ -Ilibcommon.fa.p -I. -I.. [...] -o >> libcommon.fa.p/disas_libvixl_vixl_utils.cc.o -c >> ../disas/libvixl/vixl/utils.cc >> In file included from /home/philmd/qemu/disas/libvixl/vixl/utils.h:30, >> from ../disas/libvixl/vixl/utils.cc:27: >> /usr/include/string.h:36:43: error: missing binary operator before >> token "(" >> 36 | #if defined __cplusplus && (__GNUC_PREREQ (4, 4) \ >> | ^ >> /usr/include/string.h:53:62: error: missing binary operator before >> token "(" >> 53 | #if defined __USE_MISC || defined __USE_XOPEN || >> __GLIBC_USE (ISOC2X) >> | ^ >> /usr/include/string.h:165:21: error: missing binary operator before >> token "(" >> 165 | || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X)) >> | ^ >> /usr/include/string.h:174:43: error: missing binary operator before >> token "(" >> 174 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) || >> __GLIBC_USE (ISOC2X) >> | ^ >> /usr/include/string.h:492:19: error: missing binary operator before >> token "(" >> 492 | #if __GNUC_PREREQ (3,4) >> | ^ >> >> Similarly to commit 875df03b221 ('osdep: protect qemu/osdep.h with >> extern "C"'), guard the <string.h> system header with 'extern "C"'. >> >> Relevant information from the host: >> >> $ lsb_release -d >> Description: Debian GNU/Linux 11 (bullseye) >> $ gcc --version >> gcc (Debian 10.2.1-6) 10.2.1 20210110 >> $ dpkg -S /usr/include/string.h >> libc6-dev: /usr/include/string.h >> $ apt-cache show libc6-dev >> Package: libc6-dev >> Version: 2.31-11 >> >> Buglink: https://bugs.launchpad.net/qemu/+bug/1914870 >> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> >> --- >> RFC because I've no idea about C++, but this fixes the build for me. >> >> Quick reproducer: >> >> $ ../configure --disable-tools --target-list=aarch64-linux-user >> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> Cc: Daniel P. Berrangé <berrange@redhat.com> >> Cc: Peter Maydell <peter.maydell@linaro.org> >> Cc: Richard Henderson <richard.henderson@linaro.org> >> Cc: Eric Blake <eblake@redhat.com> >> Cc: Thomas Huth <thuth@redhat.com> >> --- >> disas/libvixl/vixl/utils.h | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/disas/libvixl/vixl/utils.h b/disas/libvixl/vixl/utils.h >> index 5ab134e240a..fc28d7456c1 100644 >> --- a/disas/libvixl/vixl/utils.h >> +++ b/disas/libvixl/vixl/utils.h >> @@ -27,8 +27,10 @@ >> #ifndef VIXL_UTILS_H >> #define VIXL_UTILS_H >> -#include <string.h> >> #include <cmath> >> +extern "C" { >> +#include <string.h> >> +} > > Could you please try to backport the upstream patch instead: > > https://git.linaro.org/arm/vixl.git/commit/?id=78973f258039f6e96 Yes it works, thanks!
diff --git a/disas/libvixl/vixl/utils.h b/disas/libvixl/vixl/utils.h index 5ab134e240a..fc28d7456c1 100644 --- a/disas/libvixl/vixl/utils.h +++ b/disas/libvixl/vixl/utils.h @@ -27,8 +27,10 @@ #ifndef VIXL_UTILS_H #define VIXL_UTILS_H -#include <string.h> #include <cmath> +extern "C" { +#include <string.h> +} #include "vixl/globals.h" #include "vixl/compiler-intrinsics.h"
When selecting an ARM target on Debian unstable, we get: Compiling C++ object libcommon.fa.p/disas_libvixl_vixl_utils.cc.o FAILED: libcommon.fa.p/disas_libvixl_vixl_utils.cc.o c++ -Ilibcommon.fa.p -I. -I.. [...] -o libcommon.fa.p/disas_libvixl_vixl_utils.cc.o -c ../disas/libvixl/vixl/utils.cc In file included from /home/philmd/qemu/disas/libvixl/vixl/utils.h:30, from ../disas/libvixl/vixl/utils.cc:27: /usr/include/string.h:36:43: error: missing binary operator before token "(" 36 | #if defined __cplusplus && (__GNUC_PREREQ (4, 4) \ | ^ /usr/include/string.h:53:62: error: missing binary operator before token "(" 53 | #if defined __USE_MISC || defined __USE_XOPEN || __GLIBC_USE (ISOC2X) | ^ /usr/include/string.h:165:21: error: missing binary operator before token "(" 165 | || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X)) | ^ /usr/include/string.h:174:43: error: missing binary operator before token "(" 174 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC2X) | ^ /usr/include/string.h:492:19: error: missing binary operator before token "(" 492 | #if __GNUC_PREREQ (3,4) | ^ Similarly to commit 875df03b221 ('osdep: protect qemu/osdep.h with extern "C"'), guard the <string.h> system header with 'extern "C"'. Relevant information from the host: $ lsb_release -d Description: Debian GNU/Linux 11 (bullseye) $ gcc --version gcc (Debian 10.2.1-6) 10.2.1 20210110 $ dpkg -S /usr/include/string.h libc6-dev: /usr/include/string.h $ apt-cache show libc6-dev Package: libc6-dev Version: 2.31-11 Buglink: https://bugs.launchpad.net/qemu/+bug/1914870 Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- RFC because I've no idea about C++, but this fixes the build for me. Quick reproducer: $ ../configure --disable-tools --target-list=aarch64-linux-user Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Daniel P. Berrangé <berrange@redhat.com> Cc: Peter Maydell <peter.maydell@linaro.org> Cc: Richard Henderson <richard.henderson@linaro.org> Cc: Eric Blake <eblake@redhat.com> Cc: Thomas Huth <thuth@redhat.com> --- disas/libvixl/vixl/utils.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)