Skip to content

Commit 0d8024c

Browse files
kconfig: allow specifying the seed for randconfig
For reproducibility, it can be useful to be able to specify the seed to use to seed the RNG. Add a new KCONFIG_SEED environment variable which can be set to the seed to use: $ make KCONFIG_SEED=42 randconfig $ sha1sum .config 70a128c8dcc61303069e1be352cce64114dfcbca .config $ make KCONFIG_SEED=42 randconfig $ sha1sum .config 70a128c8dcc61303069e1be352cce64114dfcbca .config It's very usefull for eg. debugging the kconfig parser. Signed-off-by: "Yann E. MORIN" <[email protected]>
1 parent 422c809 commit 0d8024c

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Documentation/kbuild/kconfig.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,15 @@ These examples will disable most options (allnoconfig) but enable or
8989
disable the options that are explicitly listed in the specified
9090
mini-config files.
9191

92+
______________________________________________________________________
93+
Environment variables for 'randconfig'
94+
95+
KCONFIG_SEED
96+
--------------------------------------------------
97+
You can set this to the integer value used to seed the RNG, if you want
98+
to somehow debug the behaviour of the kconfig parser/frontends.
99+
If not set, the current time will be used.
100+
92101
______________________________________________________________________
93102
Environment variables for 'silentoldconfig'
94103

scripts/kconfig/conf.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <getopt.h>
1414
#include <sys/stat.h>
1515
#include <sys/time.h>
16+
#include <errno.h>
1617

1718
#include "lkc.h"
1819

@@ -514,14 +515,23 @@ int main(int ac, char **av)
514515
{
515516
struct timeval now;
516517
unsigned int seed;
518+
char *seed_env;
517519

518520
/*
519521
* Use microseconds derived seed,
520522
* compensate for systems where it may be zero
521523
*/
522524
gettimeofday(&now, NULL);
523-
524525
seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
526+
527+
seed_env = getenv("KCONFIG_SEED");
528+
if( seed_env && *seed_env ) {
529+
char *endp;
530+
int tmp = (int)strtol(seed_env, &endp, 10);
531+
if (*endp == '\0') {
532+
seed = tmp;
533+
}
534+
}
525535
srand(seed);
526536
break;
527537
}

0 commit comments

Comments
 (0)