Closed s117 closed 4 years ago
Implemented new syscall sys_getrandom(): PK - https://github.com/s117/riscv-pk/commit/2f89a8c2393efec38158703e6648b40d2064623f FESVR - https://github.com/s117/riscv-fesvr/commit/1360c390e775047ab5e1f1307d0748a8984328ed
A test code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/random.h>
void print_random(size_t len){
char* buf = (char*)malloc(len);
printf("Requesting %llu random bytes...\n", len);
ssize_t ret = getrandom(buf, len, 0);
printf("getrandom returned %lld\n", ret);
if (ret < 0) {
puts("failed.\n");
} else {
printf("the length of generated random data is %lld bytes\n", ret);
for (size_t i = 0; i < ret; ++i) {
printf("%02hhX ", buf[i]);
}
puts("\n");
}
free(buf);
}
int main() {
print_random(1);
print_random(1);
print_random(8);
print_random(16);
print_random(32);
print_random(256);
}
Result
$ spike pk getrandom_test.rv64
Requesting target memory 0x100000000
******* Resetting core **********
****Initializing the processor system****
******* Resetting core **********
******* Resetting core **********
****Initialization complete****
Requesting 1 random bytes...
getrandom returned 1
the length of generated random data is 1 bytes
CB
Requesting 1 random bytes...
getrandom returned 1
the length of generated random data is 1 bytes
7F
Requesting 8 random bytes...
getrandom returned 8
the length of generated random data is 8 bytes
E5 B0 30 7F 7B FF 2E E8
Requesting 16 random bytes...
getrandom returned 16
the length of generated random data is 16 bytes
FB A0 99 8D D9 4A 8A 8F 7D B7 79 3F D2 DF 4B 6D
Requesting 32 random bytes...
getrandom returned 32
the length of generated random data is 32 bytes
3F 64 B9 60 7F BD 39 D9 08 FF 29 84 5F 4D 6D B6 F6 2C 4E D4 0D B7 F4 73 11 3E 1B 06 F6 AC BE C4
Requesting 256 random bytes...
getrandom returned 256
the length of generated random data is 256 bytes
95 4D 81 51 92 FA 26 6D 98 A8 63 46 AF 86 0C C8 12 7B 06 DA 4E 64 3D 26 5D 8F 7E 8E 7B CD 55 C3 A3 E4 10 63 12 40 A0 67 22 3C FC 7A EA 11 9D 9E 97 8A FE 3F 7E 6E 8D 83 A5 AA 65 CB 0E 3B 00 68 36 1C 22 68 F0 B2 5E F8 5C A0 6E 8F DA 85 74 EA 1A 8B F9
4F EE 14 A9 3B 80 9D 3B 2F 87 82 63 F4 28 3D CE 78 3A 17 8F A9 2D C8 F0 D2 56 2E E4 E9 EF 5C 38 F8 56 B7 BE DE EB 89 A9 A7 78 80 FA 50 CB AD 25 93 15 01 28 90 85 0C 2B 1B 17 0C 4A 99 FF 87 1D A4 3F EF 54 0C 1A 3F C2 93 2E FB 81 1B B7 16 40 FF 6C A
5 94 90 94 CA F5 B4 AE 27 20 83 A5 BA D6 A2 87 DF 9D AC 8E 74 E2 BE C0 06 D4 DC 39 4C 87 F6 50 33 21 C3 CC 75 A5 82 73 03 76 0F 2F 63 2D 0A E9 69 8A 20 FA 72 62 61 4D 5D 00 A2 BE 2A 20 BC 14 F5 5D 27 D8 3D 70 1D 6B B5 36 51 F4 21 0D 4F DF 01 0C 58
18 EF 28 C5 6F 12 84 63
******* Resetting core **********
621.wrf_s_ref
finished with the aforementioned PK & FESVR.
$ spike -m16384 pk -c wrf_s_base.riscv-m64
Requesting target memory 0x400000000
******* Resetting core **********
****Initializing the processor system****
******* Resetting core **********
******* Resetting core **********
****Initialization complete****
--- WARNING: traj_opt is zero, but num_traj is not zero; setting num_traj to zero.
--- NOTE: sst_update is 0, setting io_form_auxinput4 = 0 and auxinput4_interval = 0 for all domains
--- NOTE: grid_fdda is 0 for domain 1, setting gfdda interval and ending time to 0 for that domain.
--- NOTE: both grid_sfdda and pxlsm_soil_nudge are 0 for domain 1, setting sgfdda interval and ending time to 0 for that domain.
--- NOTE: obs_nudge_opt is 0 for domain 1, setting obs nudging interval and ending time to 0 for that domain.
bl_pbl_physics /= 4, implies mfshconv must be 0, resetting
--- NOTE: num_soil_layers has been set to 4
WRF V3.6.1 MODEL
*************************************
Parent domain
ids,ide,jds,jde 1 74 1 61
ims,ime,jms,jme -4 79 -4 66
ips,ipe,jps,jpe 1 74 1 61
*************************************
DYNAMICS OPTION: Eulerian Mass Coordinate
alloc_space_field: domain 1 , 128355772 bytes allocated
med_initialdata_input: calling input_input
Resetting the hypsometric_opt from default value of 2 to 1
Timing for processing wrfinput file (stream 0) for domain 1: 0.16300 elapsed seconds
INPUT LandUse = "USGS"
LANDUSE TYPE = "USGS" FOUND 33 CATEGORIES 2 SEASONS WATER CATEGORY = 16 SNOW CATEGORY = 24
INITIALIZE THREE Noah LSM RELATED TABLES
LANDUSE TYPE = USGS FOUND 27 CATEGORIES
INPUT SOIL TEXTURE CLASSIFICATION = STAS
SOIL TEXTURE CLASSIFICATION = STAS FOUND 19 CATEGORIES
Timing for processing lateral boundary for domain 1: 0.04600 elapsed seconds
Tile Strategy is not specified. Assuming 1D-Y
WRF TILE 1 IS 1 IE 74 JS 1 JE 61
WRF NUMBER OF TILES = 1
Timing for main: time 2000-01-24_12:00:10 on domain 1: 6.24700 elapsed seconds
Timing for main: time 2000-01-24_12:00:20 on domain 1: 2.64700 elapsed seconds
......
Timing for main: time 2000-01-25_11:59:50 on domain 1: 2.77500 elapsed seconds
Timing for main: time 2000-01-25_12:00:00 on domain 1: 2.95000 elapsed seconds
Timing for Writing wrfout_d01_2000-01-25_12_00_00 for domain 1: 0.17100 elapsed seconds
d01 2000-01-25_12:00:00 wrf: SUCCESS COMPLETE WRF
cycle = 24420586979968
instret = 24420586979975
******* Resetting core **********
Commit d0401da incorporated this patch.
Binary is compiled by https://github.com/s117/riscv-gnu-toolchain/commit/d0bdaa9a282a32cc68e6203098dc1162021ceba7
syscall number 278 corresponds to sys_getrandom, as defined here: https://github.com/s117/riscv-gnu-toolchain/blob/d0bdaa9a282a32cc68e6203098dc1162021ceba7/linux-headers/include/asm-generic/unistd.h#L709