All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32)
@ 2014-02-15 17:34 Michael Tokarev
  2014-02-15 18:12 ` Peter Maydell
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Tokarev @ 2014-02-15 17:34 UTC (permalink / raw)
  To: qemu-devel, Claudio Fontana, Peter Maydell

[-- Attachment #1: Type: text/plain, Size: 2065 bytes --]

Since this commit:

commit 999b53ec8794f203964db3ecf939a3da5c4bc843
Author: Claudio Fontana <claudio.fontana@linaro.org>
Date:   Wed Feb 5 17:27:28 2014 +0000

    disas: Implement disassembly output for A64

    Use libvixl to implement disassembly output in debug
    logs for A64, for use with both AArch64 hosts and targets.

    Signed-off-by: Claudio Fontana <claudio.fontana@linaro.org>
    [PMM:
     * added support for target disassembly
     * switched to custom QEMUDisassembler so the output format
       matches what QEMU expects
     * make sure we correctly fall back to "just print hex"
       if we didn't build the AArch64 disassembler because of
       lack of a C++ compiler
     * rename from 'aarch64' to 'arm-a64' because this is a
       disassembler for the A64 instruction set
     * merge aarch64.c and aarch64-cxx.cc into one C++ file
     * simplify the aarch64.c<->aarch64-cxx.cc interface]
    Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Qemu does not build on mingw32 anymore, with the following error
messages:

  CXX   disas/libvixl/utils.o
disas/libvixl/utils.cc:98: error: integer constant is too large for 'unsigned long' type
disas/libvixl/utils.cc:111: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:111: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:112: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:112: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:113: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:113: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:114: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:114: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:115: error: integer constant is too large for 'long' type
disas/libvixl/utils.cc:115: error: integer constant is too large for 'long' type
make: *** [disas/libvixl/utils.o] Error 1

Attached patch fixes this.

/mjt

[-- Attachment #2: libvixl-fix-64bit-constants.diff --]
[-- Type: text/x-patch, Size: 4188 bytes --]

From: Michael Tokarev <mjt@tls.msk.ru>
Subject: libvixl: fix 64bit constants usage

Since commit 999b53ec8794f203964db3ecf939a3da5c4bc843:
 Author: Claudio Fontana <claudio.fontana@linaro.org>
 Date:   Wed Feb 5 17:27:28 2014 +0000

    disas: Implement disassembly output for A64
    
    Use libvixl to implement disassembly output in debug
    logs for A64, for use with both AArch64 hosts and targets.

disas/libvixl/ contains functions which uses 64bit constants
without using appropriate suffixes, which fails on 32bits.

Fix this by using ULL suffix.

Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>

diff --git a/disas/libvixl/a64/disasm-a64.cc b/disas/libvixl/a64/disasm-a64.cc
index 4a49748..5c6b898 100644
--- a/disas/libvixl/a64/disasm-a64.cc
+++ b/disas/libvixl/a64/disasm-a64.cc
@@ -269,19 +269,19 @@ bool Disassembler::IsMovzMovnImm(unsigned reg_size, uint64_t value) {
          ((reg_size == kWRegSize) && (value <= 0xffffffff)));
 
   // Test for movz: 16 bits set at positions 0, 16, 32 or 48.
-  if (((value & 0xffffffffffff0000UL) == 0UL) ||
-      ((value & 0xffffffff0000ffffUL) == 0UL) ||
-      ((value & 0xffff0000ffffffffUL) == 0UL) ||
-      ((value & 0x0000ffffffffffffUL) == 0UL)) {
+  if (((value & 0xffffffffffff0000ULL) == 0ULL) ||
+      ((value & 0xffffffff0000ffffULL) == 0ULL) ||
+      ((value & 0xffff0000ffffffffULL) == 0ULL) ||
+      ((value & 0x0000ffffffffffffULL) == 0ULL)) {
     return true;
   }
 
   // Test for movn: NOT(16 bits set at positions 0, 16, 32 or 48).
   if ((reg_size == kXRegSize) &&
-      (((value & 0xffffffffffff0000UL) == 0xffffffffffff0000UL) ||
-       ((value & 0xffffffff0000ffffUL) == 0xffffffff0000ffffUL) ||
-       ((value & 0xffff0000ffffffffUL) == 0xffff0000ffffffffUL) ||
-       ((value & 0x0000ffffffffffffUL) == 0x0000ffffffffffffUL))) {
+      (((value & 0xffffffffffff0000ULL) == 0xffffffffffff0000ULL) ||
+       ((value & 0xffffffff0000ffffULL) == 0xffffffff0000ffffULL) ||
+       ((value & 0xffff0000ffffffffULL) == 0xffff0000ffffffffULL) ||
+       ((value & 0x0000ffffffffffffULL) == 0x0000ffffffffffffULL))) {
     return true;
   }
   if ((reg_size == kWRegSize) &&
diff --git a/disas/libvixl/utils.cc b/disas/libvixl/utils.cc
index 6f85e61..a45fb95 100644
--- a/disas/libvixl/utils.cc
+++ b/disas/libvixl/utils.cc
@@ -95,7 +95,7 @@ int CountSetBits(uint64_t value, int width) {
   ASSERT((width == 32) || (width == 64));
 
   // Mask out unused bits to ensure that they are not counted.
-  value &= (0xffffffffffffffffUL >> (64-width));
+  value &= (0xffffffffffffffffULL >> (64-width));
 
   // Add up the set bits.
   // The algorithm works by adding pairs of bit fields together iteratively,
@@ -108,12 +108,18 @@ int CountSetBits(uint64_t value, int width) {
   // value =   h+g+f+e     d+c+b+a
   //                  \          |
   // value =       h+g+f+e+d+c+b+a
-  value = ((value >> 1) & 0x5555555555555555) + (value & 0x5555555555555555);
-  value = ((value >> 2) & 0x3333333333333333) + (value & 0x3333333333333333);
-  value = ((value >> 4) & 0x0f0f0f0f0f0f0f0f) + (value & 0x0f0f0f0f0f0f0f0f);
-  value = ((value >> 8) & 0x00ff00ff00ff00ff) + (value & 0x00ff00ff00ff00ff);
-  value = ((value >> 16) & 0x0000ffff0000ffff) + (value & 0x0000ffff0000ffff);
-  value = ((value >> 32) & 0x00000000ffffffff) + (value & 0x00000000ffffffff);
+  value = ((value >> 1) & 0x5555555555555555ULL) +
+           (value & 0x5555555555555555ULL);
+  value = ((value >> 2) & 0x3333333333333333ULL) +
+           (value & 0x3333333333333333ULL);
+  value = ((value >> 4) & 0x0f0f0f0f0f0f0f0fULL) +
+           (value & 0x0f0f0f0f0f0f0f0fULL);
+  value = ((value >> 8) & 0x00ff00ff00ff00ffULL) +
+           (value & 0x00ff00ff00ff00ffULL);
+  value = ((value >> 16) & 0x0000ffff0000ffffULL) +
+           (value & 0x0000ffff0000ffffULL);
+  value = ((value >> 32) & 0x00000000ffffffffULL) +
+           (value & 0x00000000ffffffffULL);
 
   return value;
 }
diff --git a/roms/seabios b/roms/seabios
index 96917a8..31b8b4e 160000
--- a/roms/seabios
+++ b/roms/seabios
@@ -1 +1 @@
-Subproject commit 96917a8ed761f017fc8c72ba3b9181fbac03ac59
+Subproject commit 31b8b4eea9d9ad58a73b22a6060d3ac1c419c26d

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32)
  2014-02-15 17:34 [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32) Michael Tokarev
@ 2014-02-15 18:12 ` Peter Maydell
  2014-02-15 18:53   ` Peter Maydell
  0 siblings, 1 reply; 7+ messages in thread
From: Peter Maydell @ 2014-02-15 18:12 UTC (permalink / raw)
  To: Michael Tokarev; +Cc: Claudio Fontana, qemu-devel

On 15 February 2014 17:34, Michael Tokarev <mjt@tls.msk.ru> wrote:
> Since this commit:
>
> commit 999b53ec8794f203964db3ecf939a3da5c4bc843
> Author: Claudio Fontana <claudio.fontana@linaro.org>
> Date:   Wed Feb 5 17:27:28 2014 +0000
>
>     disas: Implement disassembly output for A64
>
>     Use libvixl to implement disassembly output in debug
>     logs for A64, for use with both AArch64 hosts and targets.
>
>     Signed-off-by: Claudio Fontana <claudio.fontana@linaro.org>
>     [PMM:
>      * added support for target disassembly
>      * switched to custom QEMUDisassembler so the output format
>        matches what QEMU expects
>      * make sure we correctly fall back to "just print hex"
>        if we didn't build the AArch64 disassembler because of
>        lack of a C++ compiler
>      * rename from 'aarch64' to 'arm-a64' because this is a
>        disassembler for the A64 instruction set
>      * merge aarch64.c and aarch64-cxx.cc into one C++ file
>      * simplify the aarch64.c<->aarch64-cxx.cc interface]
>     Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>
> Qemu does not build on mingw32 anymore, with the following error
> messages:
>
>   CXX   disas/libvixl/utils.o
> disas/libvixl/utils.cc:98: error: integer constant is too large for 'unsigned long' type
> disas/libvixl/utils.cc:111: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:111: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:112: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:112: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:113: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:113: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:114: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:114: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:115: error: integer constant is too large for 'long' type
> disas/libvixl/utils.cc:115: error: integer constant is too large for 'long' type
> make: *** [disas/libvixl/utils.o] Error 1
>
> Attached patch fixes this.

Ugh, sorry about that. I thought I'd caught them but obviously the Windows
32 bit build is pickier than the Linux one (it's clearly right though).

PS: your patch has a stray roms/seabios update hunk in it. Other than that
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
and I'll apply it directly shortly since it's a build-breakage.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32)
  2014-02-15 18:12 ` Peter Maydell
@ 2014-02-15 18:53   ` Peter Maydell
  2014-02-15 19:01     ` Michael Tokarev
  0 siblings, 1 reply; 7+ messages in thread
From: Peter Maydell @ 2014-02-15 18:53 UTC (permalink / raw)
  To: Michael Tokarev; +Cc: Claudio Fontana, qemu-devel

On 15 February 2014 18:12, Peter Maydell <peter.maydell@linaro.org> wrote:
> Ugh, sorry about that. I thought I'd caught them but obviously the Windows
> 32 bit build is pickier than the Linux one (it's clearly right though).

Incidentally if you have a simple recipe for setting up a windows
mingw build environment on Ubuntu (preferably not bleeding-edge
Ubuntu) then I'm happy to add "compile-test for win32" to my
pullreq application checklist.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32)
  2014-02-15 18:53   ` Peter Maydell
@ 2014-02-15 19:01     ` Michael Tokarev
  2014-02-15 19:05       ` Peter Maydell
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Tokarev @ 2014-02-15 19:01 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Claudio Fontana, qemu-devel

15.02.2014 22:53, Peter Maydell wrote:
> Incidentally if you have a simple recipe for setting up a windows
> mingw build environment on Ubuntu (preferably not bleeding-edge
> Ubuntu) then I'm happy to add "compile-test for win32" to my
> pullreq application checklist.

Hm.  I've never did that before, but it appeared quite easy to do.

 apt-get install mingw32

grabbed a few -dev binaries from http://www.gtk.org/download/win32.php,
namely:

 glib
 zlib
 gettext-runtime
 libpng
 pixman

and extracted them into a common directory (say, $mingwhome).

Next, created /usr/local/bin/i586-mingw32msvc-pkg-config with the following:

--- cut ---
#!/bin/sh
prefix=$mingwhome
PKG_CONFIG_LIBDIR=$prefix/lib/pkgconfig
export PKG_CONFIG_LIBDIR
exec pkg-config --define-variable=prefix=$prefix $@
--- cut ---

Now I can build qemu like this:

 ./configure --cross-prefix=i586-mingw32msvc- \
    --extra-cflags=-I$mingwhome/include \
    --extra-ldflags=-I$mingwhome/lib

That's basically all.

This works on debian wheezy.

Similar setup should work for w64 too, except in
this case mingw-w64 is needed, and libs from
http://www.gtk.org/download/win64.php .

Initially I followed http://wiki.qemu.org/Hosts/W32 .

BTW, current debian wheezy catches these constants
in 32bits too.  I mean, when the host is 32bits.

Thanks,

/mjt

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32)
  2014-02-15 19:01     ` Michael Tokarev
@ 2014-02-15 19:05       ` Peter Maydell
  2014-02-15 19:08         ` Michael Tokarev
  2014-02-15 21:01         ` Peter Maydell
  0 siblings, 2 replies; 7+ messages in thread
From: Peter Maydell @ 2014-02-15 19:05 UTC (permalink / raw)
  To: Michael Tokarev; +Cc: Claudio Fontana, qemu-devel

On 15 February 2014 19:01, Michael Tokarev <mjt@tls.msk.ru> wrote:
> 15.02.2014 22:53, Peter Maydell wrote:
>> Incidentally if you have a simple recipe for setting up a windows
>> mingw build environment on Ubuntu (preferably not bleeding-edge
>> Ubuntu) then I'm happy to add "compile-test for win32" to my
>> pullreq application checklist.
>
> Hm.  I've never did that before, but it appeared quite easy to do.

Thanks for the instructions; I'll get that set up.

> BTW, current debian wheezy catches these constants
> in 32bits too.  I mean, when the host is 32bits.

Must be a new-gcc thing, then, maybe? My test 32 bit
Linux host has gcc-4.6.3-1ubuntu5 and that builds fine
(it did complain about some of the constants which is
why I caught and fixed those).

thanks
-- PMM

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32)
  2014-02-15 19:05       ` Peter Maydell
@ 2014-02-15 19:08         ` Michael Tokarev
  2014-02-15 21:01         ` Peter Maydell
  1 sibling, 0 replies; 7+ messages in thread
From: Michael Tokarev @ 2014-02-15 19:08 UTC (permalink / raw)
  To: Peter Maydell; +Cc: qemu-devel

15.02.2014 23:05, Peter Maydell wrote:
> On 15 February 2014 19:01, Michael Tokarev <mjt@tls.msk.ru> wrote:

>> BTW, current debian wheezy catches these constants
>> in 32bits too.  I mean, when the host is 32bits.
> 
> Must be a new-gcc thing, then, maybe? My test 32 bit
> Linux host has gcc-4.6.3-1ubuntu5 and that builds fine
> (it did complain about some of the constants which is
> why I caught and fixed those).

gcc-4.7.2 (which is the version on debian wheezy) complains
about these.  It is actually the same compiler I used to
build mingw32 stuff.

/mjt

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32)
  2014-02-15 19:05       ` Peter Maydell
  2014-02-15 19:08         ` Michael Tokarev
@ 2014-02-15 21:01         ` Peter Maydell
  1 sibling, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2014-02-15 21:01 UTC (permalink / raw)
  To: Michael Tokarev; +Cc: Claudio Fontana, qemu-devel

On 15 February 2014 19:05, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 15 February 2014 19:01, Michael Tokarev <mjt@tls.msk.ru> wrote:
>> 15.02.2014 22:53, Peter Maydell wrote:
>>> Incidentally if you have a simple recipe for setting up a windows
>>> mingw build environment on Ubuntu (preferably not bleeding-edge
>>> Ubuntu) then I'm happy to add "compile-test for win32" to my
>>> pullreq application checklist.
>>
>> Hm.  I've never did that before, but it appeared quite easy to do.
>
> Thanks for the instructions; I'll get that set up.

OK, I've set up the win32 cross-compiler, confirmed that it doesn't
build and that this patch fixes the problem, and pushed the fix
to master (without the stray seabios update hunk).

thanks
-- PMM

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-02-15 21:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-15 17:34 [Qemu-devel] qemu git does not build on 32bits anymore (incl mingw32) Michael Tokarev
2014-02-15 18:12 ` Peter Maydell
2014-02-15 18:53   ` Peter Maydell
2014-02-15 19:01     ` Michael Tokarev
2014-02-15 19:05       ` Peter Maydell
2014-02-15 19:08         ` Michael Tokarev
2014-02-15 21:01         ` Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.