/* Copyright (c) 2021-2023 Barcelona Supercomputing Center (BSC) * SPDX-License-Identifier: GPL-3.0-or-later */ #include #include #include "common.h" #include "emu_prv.h" #include "instr.h" #include "instr_nanos6.h" #include "nanos6/nanos6_priv.h" int main(void) { instr_start(0, 1); instr_nanos6_init(); /* Until here, the nanos6 model has not been connected to the * patchbay yet. The next event will cause the subsystem mux to * be connected to the patchbay. We need to ensure that at that * moment the select channel is evaluated, otherwise the mux * will remain selecting a null input until the thread state * changes. */ instr_nanos6_worker_loop_enter(); /* Match the PRV line in the trace */ FILE *f = fopen("match.sh", "w"); if (f == NULL) die("fopen failed:"); /* Ensure that after the Nanos6 connect phase, the CPU subsystem mux has * selected the correct input, based on the running thread */ int type = PRV_NANOS6_SUBSYSTEM; int64_t t = get_delta(); int value = ST_WORKER_LOOP; fprintf(f, "grep ':%ld:%d:%d$' ovni/thread.prv\n", t, type, value); fprintf(f, "grep ':%ld:%d:%d$' ovni/cpu.prv\n", t, type, value); instr_nanos6_worker_loop_exit(); /* Also test when exitting the stacked subsystem */ t = get_delta(); value = 0; fprintf(f, "grep ':%ld:%d:%d$' ovni/thread.prv\n", t, type, value); fprintf(f, "grep ':%ld:%d:%d$' ovni/cpu.prv\n", t, type, value); fclose(f); instr_end(); return 0; }