Hi Johannes,
That's interesting, I did the sizeof test on my base-hw kernel set up on 17.11 
before I sent that reply.
Bob

Get Outlook for Android<https://aka.ms/ghei36>

________________________________
From: Johannes Kliemann <kliem...@componolit.com>
Sent: Sunday, February 18, 2018 3:59:43 PM
To: genode-main@lists.sourceforge.net
Subject: Re: 32 bit overflow in timer

Hi Bob,

The long is not necessarily defined as 4 bytes. I have checked the GNU
reference manual [1] and it states

> The 32-bit unsigned long int data type can hold integer values in the range 
> of at least 0 to 4,294,967,295. (Depending on your system, this data type 
> might be 64-bit, in which case its range is identical to that of the unsigned 
> long long int data type.) You may also refer to this data type as unsigned 
> long.

So it can be 64bit long. I have tested this on x86_64 Linux and x86_64
Genode on NOVA and in both cases the sizeof(unsigned long) returned 8.
So it is a 64 bit integer type. I also tested this by assigning 2^32
which should yield 0 on a 32 bit type but it didn't.

Regarding this the overflow is most probably happening at some lower
level (I have not checked the exact implementation of the timer).

Regards,
Johannes

[1]:
https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Integer-Types

Am 18.02.2018 um 20:59 schrieb Bob Stewart:
> Johannes,
>
> Unsigned longs are 4 bytes. Unsigned long longs are 8 bytes. One byte
> equals 8 bits.
>
> Bob Stewart
>
>
> Get Outlook for Android <https://aka.ms/ghei36>
>
> ------------------------------------------------------------------------
> *From:* Johannes Kliemann <kliem...@componolit.com>
> *Sent:* Sunday, February 18, 2018 6:01:36 AM
> *To:* Genode OS Framework Mailing List
> *Subject:* 32 bit overflow in timer
>
> Hi all,
>
> I noticed a 32 bit overflow in the Timer::Connection sleep functions and
> triggers.
> Calling usleep or trigger_once with an hour (3 600 000 000 us) works but
> calling it with two hours (7 200 000 000 us) causes something to
> overflow and stop the timer after 2 905 032 704 us which equals 7 200
> 000 000 & (2^32 - 1).
>
> As far as I have checked this these functions use the unsigned long
> which is indeed 64 bit but I think at some point only 32 bit are used.
>
> Is this intended behaviour?
> If so I think it would make sense to give out a warning at least.
>
> Regards,
> Johannes
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> genode-main mailing list
> genode-main@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>
>
>
> _______________________________________________
> genode-main mailing list
> genode-main@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
genode-main mailing list
genode-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
genode-main mailing list
genode-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main

Reply via email to