bug: rand() not initialized

Jeff Johnston jjohnstn@redhat.com
Thu Oct 2 17:20:00 GMT 2008


Joshua Nekl wrote:
> newlib/libc/stdlib/rand.c 
> 	rand() calls _REENT_CHECK_RAND48
>
> newlib/libc/include/sys/reent.h
> 	_REENT_CHECK_RAND48 calls _REENT_CHECK with _REENT_INIT_RAND48
> 	_REENT_CHECK calls _REENT_INIT_RAND48 after malloc(struct
> _rand48)
> 	_REENT_INIT_RAND48 inits struct _rand48 *_r48 members except
> _next_rand
>
> 	rand() calls _REENT_RAND_NEXT
> 	_REENT_RAND_NEXT returns unnitialized _next_rand
>
> I know an uninitialized pseudo-random number may seem unimportant, but
> ...
>
> 1) repeated runs of the application should return the same pseudo-random
> number
>    in order for test results to be repeatable.
> 2) I'm using a 4-state simulator (verilog). 
>    Since this variable is not initialized, it returns X's in my
> simulation.
>    X's multiplied by X's result in X's, and my simulation barfs.
>
> Workaround -> call srand(1) first.
>
>   
Josh,

  Thanks for catching this.  A fix has been checked in to initialize 
_rand_next to 1.

-- Jeff J.
> Regards, Josh
>   



More information about the Newlib mailing list