Patchwork qtest: fix 32-bit build

login
register
mail settings
Submitter Anthony Liguori
Date March 30, 2012, 5:54 p.m.
Message ID <1333130099-25238-1-git-send-email-aliguori@us.ibm.com>
Download mbox | patch
Permalink /patch/149706/
State New
Headers show

Comments

Anthony Liguori - March 30, 2012, 5:54 p.m.
time_t appears to be an unsigned long so use %ld.

Reported-by: Stefan Weil <weil@mail.berlios.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
---
 qtest.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Anthony Liguori - March 30, 2012, 5:59 p.m.
Applied.  Sorry for the breakage.

Regards,

Anthony Liguori

On 03/30/2012 12:54 PM, Anthony Liguori wrote:
> time_t appears to be an unsigned long so use %ld.
>
> Reported-by: Stefan Weil<weil@mail.berlios.de>
> Signed-off-by: Anthony Liguori<aliguori@us.ibm.com>
> ---
>   qtest.c |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/qtest.c b/qtest.c
> index 53e2b79..cd7186c 100644
> --- a/qtest.c
> +++ b/qtest.c
> @@ -34,7 +34,7 @@ static int irq_levels[MAX_IRQ];
>   static struct timeval start_time;
>   static bool qtest_opened;
>
> -#define FMT_timeval "%" PRId64 ".%06" PRId64
> +#define FMT_timeval "%ld.%06ld"
>
>   /**
>    * QTest Protocol
Stefan Weil - March 30, 2012, 6:03 p.m.
Am 30.03.2012 19:59, schrieb Anthony Liguori:
> Applied.  Sorry for the breakage.
>
> Regards,
>
> Anthony Liguori

There is a new breakage:

Now it will fail with w64 (which uses 64 bit time_t and
a 32 bit long).

Regards,
Stefan W.
Anthony Liguori - March 30, 2012, 6:29 p.m.
On 03/30/2012 01:03 PM, Stefan Weil wrote:
> Am 30.03.2012 19:59, schrieb Anthony Liguori:
>> Applied. Sorry for the breakage.
>>
>> Regards,
>>
>> Anthony Liguori
>
> There is a new breakage:
>
> Now it will fail with w64 (which uses 64 bit time_t and
> a 32 bit long).

That's a bug in w64 (it has a broken ABI).

Do we actually build and run on w64??

Regards,

Anthony Liguori

>
> Regards,
> Stefan W.
>
Paolo Bonzini - March 30, 2012, 6:55 p.m.
Il 30/03/2012 20:29, Anthony Liguori ha scritto:
>> Now it will fail with w64 (which uses 64 bit time_t and
>> a 32 bit long).
> 
> That's a bug in w64 (it has a broken ABI).
> 
> Do we actually build and run on w64??

It's actually sensible and x32 does the same.  Not too urgent though.

Paolo
Anthony Liguori - March 30, 2012, 7:06 p.m.
On 03/30/2012 01:55 PM, Paolo Bonzini wrote:
> Il 30/03/2012 20:29, Anthony Liguori ha scritto:
>>> Now it will fail with w64 (which uses 64 bit time_t and
>>> a 32 bit long).
>>
>> That's a bug in w64 (it has a broken ABI).
>>
>> Do we actually build and run on w64??
>
> It's actually sensible and x32 does the same.  Not too urgent though.

I don't understand how making a long 32 bit is sensible but...  I sent a patch 
that should at least address q64.

Am not sure what x32 is though.

Regards,

Anthony Liguori

>
> Paolo
Paolo Bonzini - March 30, 2012, 7:13 p.m.
Il 30/03/2012 21:06, Anthony Liguori ha scritto:
> On 03/30/2012 01:55 PM, Paolo Bonzini wrote:
>> Il 30/03/2012 20:29, Anthony Liguori ha scritto:
>>>> Now it will fail with w64 (which uses 64 bit time_t and
>>>> a 32 bit long).
>>>
>>> That's a bug in w64 (it has a broken ABI).
>>>
>>> Do we actually build and run on w64??
>>
>> It's actually sensible and x32 does the same.  Not too urgent though.
> 
> I don't understand how making a long 32 bit is sensible but...  I sent a
> patch that should at least address q64.
> 
> Am not sure what x32 is though.

x32 is 32-bit ABI (with 32-bit pointers and 4GB address space) with the
x86-64 (64-bit) ISA.

Paolo
Anthony Liguori - March 30, 2012, 7:16 p.m.
On 03/30/2012 02:13 PM, Paolo Bonzini wrote:
> Il 30/03/2012 21:06, Anthony Liguori ha scritto:
>> On 03/30/2012 01:55 PM, Paolo Bonzini wrote:
>>> Il 30/03/2012 20:29, Anthony Liguori ha scritto:
>>>>> Now it will fail with w64 (which uses 64 bit time_t and
>>>>> a 32 bit long).
>>>>
>>>> That's a bug in w64 (it has a broken ABI).
>>>>
>>>> Do we actually build and run on w64??
>>>
>>> It's actually sensible and x32 does the same.  Not too urgent though.
>>
>> I don't understand how making a long 32 bit is sensible but...  I sent a
>> patch that should at least address q64.
>>
>> Am not sure what x32 is though.
>
> x32 is 32-bit ABI (with 32-bit pointers and 4GB address space) with the
> x86-64 (64-bit) ISA.

Wow.  That's..  interesting :-)

In general, violating sizeof(long) >= sizeof(void *) seems like an exceeding bad 
idea to me.

Regards,

Anthony Liguori

>
> Paolo
Stefan Weil - March 30, 2012, 7:23 p.m.
Am 30.03.2012 21:16, schrieb Anthony Liguori:
> On 03/30/2012 02:13 PM, Paolo Bonzini wrote:
>> Il 30/03/2012 21:06, Anthony Liguori ha scritto:
>>> On 03/30/2012 01:55 PM, Paolo Bonzini wrote:
>>>> Il 30/03/2012 20:29, Anthony Liguori ha scritto:
>>>>>> Now it will fail with w64 (which uses 64 bit time_t and
>>>>>> a 32 bit long).
>>>>>
>>>>> That's a bug in w64 (it has a broken ABI).
>>>>>
>>>>> Do we actually build and run on w64??
>>>>
>>>> It's actually sensible and x32 does the same.  Not too urgent though.
>>>
>>> I don't understand how making a long 32 bit is sensible but...  I 
>>> sent a
>>> patch that should at least address q64.
>>>
>>> Am not sure what x32 is though.
>>
>> x32 is 32-bit ABI (with 32-bit pointers and 4GB address space) with the
>> x86-64 (64-bit) ISA.
>
> Wow.  That's..  interesting :-)
>
> In general, violating sizeof(long) >= sizeof(void *) seems like an 
> exceeding bad idea to me.
>
> Regards,
>
> Anthony Liguori

Any 32 bit system will have to use a 64 bit time_t sooner or later
to avoid an overflow. Not only w64 but also w32 supports it.
Future 32 bit Linux versions will also need it.

The size of a long is a different matter.

Regards,
Stefan W.
Anthony Liguori - March 30, 2012, 7:27 p.m.
On 03/30/2012 02:23 PM, Stefan Weil wrote:
> Am 30.03.2012 21:16, schrieb Anthony Liguori:
>> On 03/30/2012 02:13 PM, Paolo Bonzini wrote:
>>> Il 30/03/2012 21:06, Anthony Liguori ha scritto:
>>>> On 03/30/2012 01:55 PM, Paolo Bonzini wrote:
>>>>> Il 30/03/2012 20:29, Anthony Liguori ha scritto:
>>>>>>> Now it will fail with w64 (which uses 64 bit time_t and
>>>>>>> a 32 bit long).
>>>>>>
>>>>>> That's a bug in w64 (it has a broken ABI).
>>>>>>
>>>>>> Do we actually build and run on w64??
>>>>>
>>>>> It's actually sensible and x32 does the same. Not too urgent though.
>>>>
>>>> I don't understand how making a long 32 bit is sensible but... I sent a
>>>> patch that should at least address q64.
>>>>
>>>> Am not sure what x32 is though.
>>>
>>> x32 is 32-bit ABI (with 32-bit pointers and 4GB address space) with the
>>> x86-64 (64-bit) ISA.
>>
>> Wow. That's.. interesting :-)
>>
>> In general, violating sizeof(long) >= sizeof(void *) seems like an exceeding
>> bad idea to me.
>>
>> Regards,
>>
>> Anthony Liguori
>
> Any 32 bit system will have to use a 64 bit time_t sooner or later
> to avoid an overflow. Not only w64 but also w32 supports it.
> Future 32 bit Linux versions will also need it.
>
> The size of a long is a different matter.

Yet another reason that we all should build bunkers for the upcoming Unix epoch 
overflow apocalypse..  that is, if the machines don't revolt before 2038 ;-)

Regards,

Anthony Liguori

> Regards,
> Stefan W.
>
Blue Swirl - March 30, 2012, 7:57 p.m.
On Fri, Mar 30, 2012 at 19:13, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 30/03/2012 21:06, Anthony Liguori ha scritto:
>> On 03/30/2012 01:55 PM, Paolo Bonzini wrote:
>>> Il 30/03/2012 20:29, Anthony Liguori ha scritto:
>>>>> Now it will fail with w64 (which uses 64 bit time_t and
>>>>> a 32 bit long).
>>>>
>>>> That's a bug in w64 (it has a broken ABI).
>>>>
>>>> Do we actually build and run on w64??
>>>
>>> It's actually sensible and x32 does the same.  Not too urgent though.
>>
>> I don't understand how making a long 32 bit is sensible but...  I sent a
>> patch that should at least address q64.
>>
>> Am not sure what x32 is though.
>
> x32 is 32-bit ABI (with 32-bit pointers and 4GB address space) with the
> x86-64 (64-bit) ISA.

By the way, it should be easy to add a user emulator for x32, much
like sparc32plus. Some x86 target_ulongs may need to be changed to
abi_ulongs and wasn't the system call interface different to the 32
bit one?

>
> Paolo
>
Eric Blake - March 30, 2012, 11:19 p.m.
On 03/30/2012 11:54 AM, Anthony Liguori wrote:
> time_t appears to be an unsigned long so use %ld.

Not portable.  POSIX does not guarantee the size of time_t; there are
32-bit platforms where time_t is 64-bit.

The only way to print a time_t value is to cast it through a known-width
type, and seeing as how there are 64-bit time_t on 32-bit platforms,
that pretty much has to be %jd and intmax_t.

Patch

diff --git a/qtest.c b/qtest.c
index 53e2b79..cd7186c 100644
--- a/qtest.c
+++ b/qtest.c
@@ -34,7 +34,7 @@  static int irq_levels[MAX_IRQ];
 static struct timeval start_time;
 static bool qtest_opened;
 
-#define FMT_timeval "%" PRId64 ".%06" PRId64
+#define FMT_timeval "%ld.%06ld"
 
 /**
  * QTest Protocol