Message ID | 1273592297-18370-1-git-send-email-agraf@suse.de |
---|---|
State | New |
Headers | show |
Alexander Graf wrote: > Commit 213acd2e introduced leul_to_cpu with a special code path for big endian > hosts. Unfortunately that code used preprocessor magic that didn't work. > > This patch replaces the explicit ##s by glue() which is proven to work reliably, > enabling me to compile qemu on ppc again. > Ping? Alex
On Tue, May 11, 2010 at 05:38:17PM +0200, Alexander Graf wrote: > Commit 213acd2e introduced leul_to_cpu with a special code path for big endian > hosts. Unfortunately that code used preprocessor magic that didn't work. > > This patch replaces the explicit ##s by glue() which is proven to work reliably, > enabling me to compile qemu on ppc again. > > Signed-off-by: Alexander Graf <agraf@suse.de> > --- > bswap.h | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/bswap.h b/bswap.h > index 956f3fa..20caae6 100644 > --- a/bswap.h > +++ b/bswap.h > @@ -205,7 +205,7 @@ static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) > > #ifdef HOST_WORDS_BIGENDIAN > #define cpu_to_32wu cpu_to_be32wu > -#define leul_to_cpu(v) le ## HOST_LONG_BITS ## _to_cpu(v) > +#define leul_to_cpu(v) glue(glue(le,HOST_LONG_BITS),_to_cpu)(v) > #else > #define cpu_to_32wu cpu_to_le32wu > #define leul_to_cpu(v) (v) While the patch looks correct, I am not able to reproduce the issue. Do you have more details about it?
Aurelien Jarno wrote: > On Tue, May 11, 2010 at 05:38:17PM +0200, Alexander Graf wrote: > >> Commit 213acd2e introduced leul_to_cpu with a special code path for big endian >> hosts. Unfortunately that code used preprocessor magic that didn't work. >> >> This patch replaces the explicit ##s by glue() which is proven to work reliably, >> enabling me to compile qemu on ppc again. >> >> Signed-off-by: Alexander Graf <agraf@suse.de> >> --- >> bswap.h | 2 +- >> 1 files changed, 1 insertions(+), 1 deletions(-) >> >> diff --git a/bswap.h b/bswap.h >> index 956f3fa..20caae6 100644 >> --- a/bswap.h >> +++ b/bswap.h >> @@ -205,7 +205,7 @@ static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) >> >> #ifdef HOST_WORDS_BIGENDIAN >> #define cpu_to_32wu cpu_to_be32wu >> -#define leul_to_cpu(v) le ## HOST_LONG_BITS ## _to_cpu(v) >> +#define leul_to_cpu(v) glue(glue(le,HOST_LONG_BITS),_to_cpu)(v) >> #else >> #define cpu_to_32wu cpu_to_le32wu >> #define leul_to_cpu(v) (v) >> > > While the patch looks correct, I am not able to reproduce the issue. Do > you have more details about it? > When building on a KVM capable PPC host (or S390 for that matter), I get the following: cc1: warnings being treated as errors /home/agraf/release/qemu/kvm-all.c: In function ‘kvm_get_dirty_pages_log_range’: /home/agraf/release/qemu/kvm-all.c:305: error: implicit declaration of function ‘leHOST_LONG_BITS_to_cpu’ make[1]: *** [kvm-all.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [subdir-ppc64-softmmu] Error 2 Alex
On Mon, May 31, 2010 at 08:44:55PM +0200, Alexander Graf wrote: > Aurelien Jarno wrote: > > On Tue, May 11, 2010 at 05:38:17PM +0200, Alexander Graf wrote: > > > >> Commit 213acd2e introduced leul_to_cpu with a special code path for big endian > >> hosts. Unfortunately that code used preprocessor magic that didn't work. > >> > >> This patch replaces the explicit ##s by glue() which is proven to work reliably, > >> enabling me to compile qemu on ppc again. > >> > >> Signed-off-by: Alexander Graf <agraf@suse.de> > >> --- > >> bswap.h | 2 +- > >> 1 files changed, 1 insertions(+), 1 deletions(-) > >> > >> diff --git a/bswap.h b/bswap.h > >> index 956f3fa..20caae6 100644 > >> --- a/bswap.h > >> +++ b/bswap.h > >> @@ -205,7 +205,7 @@ static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) > >> > >> #ifdef HOST_WORDS_BIGENDIAN > >> #define cpu_to_32wu cpu_to_be32wu > >> -#define leul_to_cpu(v) le ## HOST_LONG_BITS ## _to_cpu(v) > >> +#define leul_to_cpu(v) glue(glue(le,HOST_LONG_BITS),_to_cpu)(v) > >> #else > >> #define cpu_to_32wu cpu_to_le32wu > >> #define leul_to_cpu(v) (v) > >> > > > > While the patch looks correct, I am not able to reproduce the issue. Do > > you have more details about it? > > > > When building on a KVM capable PPC host (or S390 for that matter), I get > the following: > > cc1: warnings being treated as errors > /home/agraf/release/qemu/kvm-all.c: In function > ‘kvm_get_dirty_pages_log_range’: > /home/agraf/release/qemu/kvm-all.c:305: error: implicit declaration of > function ‘leHOST_LONG_BITS_to_cpu’ > make[1]: *** [kvm-all.o] Error 1 > make[1]: *** Waiting for unfinished jobs.... > make: *** [subdir-ppc64-softmmu] Error 2 > Ok, that make sense now. I have tried to build on a big endian host, but KVM was not enabled. Strangely this function is also used at other places, so I was expecting the build to fail. Applied now.
diff --git a/bswap.h b/bswap.h index 956f3fa..20caae6 100644 --- a/bswap.h +++ b/bswap.h @@ -205,7 +205,7 @@ static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) #ifdef HOST_WORDS_BIGENDIAN #define cpu_to_32wu cpu_to_be32wu -#define leul_to_cpu(v) le ## HOST_LONG_BITS ## _to_cpu(v) +#define leul_to_cpu(v) glue(glue(le,HOST_LONG_BITS),_to_cpu)(v) #else #define cpu_to_32wu cpu_to_le32wu #define leul_to_cpu(v) (v)
Commit 213acd2e introduced leul_to_cpu with a special code path for big endian hosts. Unfortunately that code used preprocessor magic that didn't work. This patch replaces the explicit ##s by glue() which is proven to work reliably, enabling me to compile qemu on ppc again. Signed-off-by: Alexander Graf <agraf@suse.de> --- bswap.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)