On Mon, 24 Oct 2022 12:22:13 -0500 Dirk Eddelbuettel <e...@debian.org> wrote:
|    diehard_birthdays|   0|       100|     100|0.99449351|  PASSED
| ###CUT OUT BY ME###
|             sts_runs|   2|    100000|     100|0.93620636|  PASSED
| ###AND THEN MANY EMPTY LINES APPEARING EVERY ~30 SEC###

Darn. Would you have a moment to maybe jump into the code for sts_runs and
see what may be wrong now with its convergence criterion or count or ... ?

The upstream code is pretty 'dead' and I am being forced to update the code
every now and then for better compliance with update compilers so it could be
that I swapped in a size_t for another loop variable type and maybe created a
signed / unsigned bug?

Otherwise the only fix may be to take sts_run out of the set for 'all' tests.

Dirk



Hello Dirk,
but is the problem not the test following the passed sts_run, the test 
sts_serial?

I could reproduce it inside a VM with a current bookworm/testing installation.

The blank lines look like produced by output_table_line, output.c:527,
unfortunately with variable tflag=0, therefore no actual test information is 
printed.

As far as I see the tflag gets overwritten because the neighbour variable 
tsamples
got 4 bytes of memory reserved in global.c, but unfortunately in
sts_serial it gets written with a size of 8 bytes, therefore tflag gets a value 
of 0.
And therefore the following tests do execute but just output the "new line".

In the build log there are a few "warning: useless type name in empty 
declaration".
This I guess is the result of the semicolon, which makes the compiler see
the "unsigned int;" and the "tsamples;" separately
and, I guess, makes tsamples default to integer, therefore just the 4 bytes.

   globals.c:22      #define off_t unsigned int;

Because this define seems kind of dangerous and "unsigned int" would
still not be right I think it should get removed
and maybe sys/types.h get included. (See at the bottom)
A package with this change prints also the tests below sts_run.

Kind regards,
Bernhard




$ dieharder -a -g 13


$ gdb -q --pid $(pidof dieharder)
...
(gdb) set width 0
(gdb) set pagination off
(gdb) directory /home/benutzer/source/dieharder/orig/dieharder-3.31.1.3
Source directories searched: 
/home/benutzer/source/dieharder/orig/dieharder-3.31.1.3:$cdir:$cwd
(gdb) b output_table_line
Breakpoint 1 at 0x561a373b5050: file ./dieharder/output.c, line 350.
(gdb) cont
Continuing.

Breakpoint 1, output_table_line (dtest=0x7f886dee6aa0 <diehard_operm5_dtest>, 
test=0x561a38b2e830) at ./dieharder/output.c:350
350 350      if(tflag & TDESCRIPTION){
(gdb) cont
Continuing.

Breakpoint 1, output_table_line (dtest=0x7f886dee6a60 
<diehard_rank_32x32_dtest>, test=0x561a38b2e830) at ./dieharder/output.c:350
350      if(tflag & TDESCRIPTION){
(gdb) print tflag
$1 = 12799
(gdb) print &tflag
$2 = (unsigned int *) 0x561a373e5d64 <tflag>
(gdb) watch *(unsigned int *) 0x561a373e5d64
Hardware watchpoint 2: *(unsigned int *) 0x561a373e5d64
(gdb) dele 1
(gdb) cont
Continuing.

Hardware watchpoint 2: *(unsigned int *) 0x561a373e5d64

Old value = 12799
New value = 0
sts_serial (test=0x561a38b2fe30, irun=0) at ./libdieharder/sts_serial.c:117
117      MYDEBUG(D_STS_SERIAL){
(gdb) bt
#0  sts_serial (test=0x561a38b2fe30, irun=0) at ./libdieharder/sts_serial.c:117
#1  0x00007f886de97437 in add_2_test (dtest=0x7f886dee65e0 <sts_serial_dtest>, 
test=0x561a38b2fe30, count=100) at ./libdieharder/std_test.c:230
#2  0x0000561a373b69fc in execute_test (dtest_num=102) at 
./dieharder/run_test.c:92
#3  0x0000561a373b65ef in run_all_tests () at ./dieharder/run_all_tests.c:47
#4  0x0000561a373b3332 in main (argc=4, argv=0x7fffcca27f88) at 
./dieharder/dieharder.c:88
(gdb) list
112       * decently if we could farm out the blocks of bits to be run 
efficiently
113       * over a network relative to the time required to generate them.
114       */
115      nb = 16;        /* Just ignore sts_serial_ntuple for now */
116      tsamples = test[0]->tsamples;  /* ditto */
117      MYDEBUG(D_STS_SERIAL){
118        
printf("#==================================================================\n");
119        printf("# Starting sts_serial.\n");
120        printf("# sts_serial: Testing ntuple = %u\n",nb);
121      }
(gdb) display/i $pc
1: x/i $pc
=> 0x7f886de97c42 <sts_serial+66>:      mov    (%r15),%eax
(gdb) print &tsamples
$3 = (off_t *) 0x561a373e5d60 <tsamples>
(gdb) print sizeof(tsamples)
$4 = 8
(gdb) frame 4
#4  0x0000561a373b3332 in main (argc=4, argv=0x7fffcca27f88) at 
./dieharder/dieharder.c:88
88           run_all_tests();
(gdb) print sizeof(tsamples)
$6 = 4




$ grep -E "off_t.*tsamples" . -Rn
./dieharder/globals.c:29:off_t tsamples;        /* Generally should be "a lot". 
 off_t is u_int64_t. */
./dieharder/globals.c:74:off_t tsamples;        /* Generally should be "a lot". 
 off_t is u_int64_t. */
./include/dieharder/libdieharder.h:194: extern off_t tsamples;        /* Generally should 
be "a lot".  off_t is u_int64_t. */




https://buildd.debian.org/status/fetch.php?pkg=dieharder&arch=amd64&ver=3.31.1.3-1&stamp=1659884648&raw=0

gcc -DHAVE_CONFIG_H -I. -I..  -I ../include -DVERSION=3.31.1 -I /usr/include  -std=c99 
-Wall -pedantic -I/usr/include -Wall -pipe -fexceptions -D_REENTRANT -g -O3 -g -O2 
-ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
-Werror=format-security -MT dieharder-globals.o -MD -MP -MF .deps/dieharder-globals.Tpo -c 
-o dieharder-globals.o `test -f 'globals.c' || echo './'`globals.c
globals.c:29:1: warning: useless type name in empty declaration
   29 | off_t tsamples;        /* Generally should be "a lot".  off_t is 
u_int64_t. */
      | ^~~~~
globals.c:29:7: warning: data definition has no type or storage class
   29 | off_t tsamples;        /* Generally should be "a lot".  off_t is 
u_int64_t. */
      |       ^~~~~~~~
globals.c:29:7: warning: type defaults to ‘int’ in declaration of ‘tsamples’ 
[-Wimplicit-int]
globals.c:74:1: warning: useless type name in empty declaration
   74 | off_t tsamples;        /* Generally should be "a lot".  off_t is 
u_int64_t. */
      | ^~~~~
globals.c:74:7: warning: data definition has no type or storage class
   74 | off_t tsamples;        /* Generally should be "a lot".  off_t is 
u_int64_t. */
      |       ^~~~~~~~
globals.c:74:7: warning: type defaults to ‘int’ in declaration of ‘tsamples’ 
[-Wimplicit-int]
globals.c:99:1: warning: useless type name in empty declaration
   99 | off_t filecount;        /* number of rands in file */
      | ^~~~~
globals.c:99:7: warning: data definition has no type or storage class
   99 | off_t filecount;        /* number of rands in file */
      |       ^~~~~~~~~
globals.c:99:7: warning: type defaults to ‘int’ in declaration of ‘filecount’ 
[-Wimplicit-int]




--- dieharder-3.31.1.3.orig/dieharder/globals.c
+++ dieharder-3.31.1.3/dieharder/globals.c
@@ -10,6 +10,7 @@
  */
#include <sys/time.h>
+#include <sys/types.h>
 //#include <R.h>
 //#include <Rinternals.h>
@@ -19,8 +20,6 @@ #include <dieharder/Dtest.h> -#define off_t unsigned int;
-
 /* dieharder.h */
 //SEXP result;         /* kludge: need a global to report back to main() and 
then R */
 //unsigned int Seed;             /* user selected seed.  Surpresses reseeding 
per sample.*/

Reply via email to