1 /* 2 * replay-random.c 3 * 4 * Copyright (c) 2010-2020 Institute for System Programming 5 * of the Russian Academy of Sciences. 6 * 7 * This work is licensed under the terms of the GNU GPL, version 2 or later. 8 * See the COPYING file in the top-level directory. 9 * 10 */ 11 12 #include "qemu/osdep.h" 13 #include "qemu/error-report.h" 14 #include "sysemu/replay.h" 15 #include "replay-internal.h" 16 17 void replay_save_random(int ret, void *buf, size_t len) 18 { 19 g_assert(replay_mutex_locked()); 20 21 replay_save_instructions(); 22 replay_put_event(EVENT_RANDOM); 23 replay_put_dword(ret); 24 replay_put_array(buf, len); 25 } 26 27 int replay_read_random(void *buf, size_t len) 28 { 29 int ret = 0; 30 g_assert(replay_mutex_locked()); 31 32 replay_account_executed_instructions(); 33 if (replay_next_event_is(EVENT_RANDOM)) { 34 size_t buf_size = 0; 35 ret = replay_get_dword(); 36 replay_get_array(buf, &buf_size); 37 replay_finish_event(); 38 g_assert(buf_size == len); 39 } else { 40 error_report("Missing random event in the replay log"); 41 exit(1); 42 } 43 return ret; 44 } 45