[gem5-users] How to make _addr version of m5 ops work on x86+syscall emulation?
Hi all, I'm trying to run **_addr** **m5ops**. I need the _addr version because I want to implement a pseudo instruction that works in all gem5 cpu types, including KVM, which only supports _addr pseudo instructions. If I use this code (https://gem5.googlesource.com/public/gem5-resources/+/refs/tags/v21.1.0.2/src/simple/m5_exit_addr.c) as example: `#include `\ ` #include `\ ` #include `\ ` int main(void) {`\ ` #if defined(__aarch64__)`\ ` m5op_addr = 0x1001;`\ ` #endif`\ ` map_m5_mem();`\ ` m5_exit_addr(0);`\ ` }` I built m5ops following https://www.gem5.org/documentation/general_docs/m5ops/ I compile the test application with: `gcc test.c -o test -L ~/Projects/gem5/util/m5/build/x86/out -lm5 -I ~/Projects/gem5/include -I ~/Projects/gem5/util/m5/src -static` If I run with AtomicSimpleCPU I get `./build/X86/gem5.opt configs/example/se.py -c tests/test-progs/pedro-test/test --cpu-type AtomicSimpleCPU` ` REAL SIMULATION `\ `build/X86/sim/simulate.cc:107: info: Entering event queue @ 0. Starting simulation...`\ `build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page.`\ `build/X86/sim/syscall_emul.cc:73: warn: ignoring syscall mprotect(...)`\ `build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page.`\ `build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page.`\ `Can't open /dev/mem: Permission denied`\ `Exiting @ tick 11031000 because exiting with last active thread context`\ `Simulated exit code not 0! Exit code is 1` If I run with KvmCPU `./build/X86/gem5.opt configs/example/se.py -c tests/test-progs/pedro-test/test --cpu-type X86KvmCPU` \[...\] `build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0x491) unsupported by gem5. Skipping.`\ `build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0xc0010015) unsupported by gem5. Skipping.`\ `build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0x4b564d05) unsupported by gem5. Skipping.`\ `build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1`\ `build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set`\ `build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set`\ `build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page.`\ `build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1`\ `build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set`\ `build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set`\ `build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1`\ `build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set`\ `build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set`\ `build/X86/sim/syscall_emul.cc:73: warn: ignoring syscall mprotect(...)`\ `build/X86/arch/x86/linux/se_workload.cc:162: panic: Page fault at addr 0`\ ` Interrupt handler stack:`\ ` ss: 0x1b`\ ` rsp: 0x7fffed18`\ ` rflags: 0x10006`\ ` cs: 0x23`\ ` rip: 0x45ca46`\ ` err_code: 0x4`\ `Memory Usage: 636056 KBytes`\ `Program aborted at tick 441533000`\ `--- BEGIN LIBC BACKTRACE ---`\ `./build/X86/gem5.opt(+0x883420)[0x560e0d238420]`\ `./build/X86/gem5.opt(+0x8a4ade)[0x560e0d259ade]`\ `/lib/x86_64-linux-gnu/libpthread.so.0(+0x143c0)[0x7f7c671cb3c0]`\ `/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7f7c6637103b]`\ `/lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f7c66350859]`\ `./build/X86/gem5.opt(+0x30b5e5)[0x560e0ccc05e5]`\ `./build/X86/gem5.opt(+0xd6109c)[0x560e0d71609c]`\ `./build/X86/gem5.opt(+0xd611db)[0x560e0d7161db]`\ `./build/X86/gem5.opt(+0x913645)[0x560e0d2c8645]`\ `./build/X86/gem5.opt(+0x9827ee)[0x560e0d3377ee]`\ `./build/X86/gem5.opt(+0x983a1a)[0x560e0d338a1a]`\ `./build/X86/gem5.opt(+0x9811c1)[0x560e0d3361c1]`\ `./build/X86/gem5.opt(+0x552ba6)[0x560e0cf07ba6]`\ `./build/X86/gem5.opt(+0x5530ae)[0x560e0cf080ae]`\ `./build/X86/gem5.opt(+0x551b91)[0x560e0cf06b91]`\ `./build/X86/gem5.opt(+0x892796)[0x560e0d247796]`\ `./build/X86/gem5.opt(+0x8c14f4)[0x560e0d2764f4]`\ `./build/X86/gem5.opt(+0x8c1d42)[0x560e0d276d42]`\ `./build/X86/gem5.opt(+0xe1ec92)[0x560e0d7d3c92]`\ `./build/X86/gem5.opt(+0x5bfef1)[0x560e0cf74ef1]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x2a8738)[0x7f7c67482738]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalFrameDefault+0x8dd8)[0x7f7c67257f48]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalCodeWithName+0x8fb)[0x7f7c673a4e3b]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyFunction_Vectorcall+0x94)[0x7f7c67482114]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x74d6d)[0x7f7c6724ed6d]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalFrameDefault+0x7d86)[0x7f7c67256ef6]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x8006b)[0x7f7c6725a06b]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x74d6d)[0x7f7c6724ed6d]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalFrameDefault+0x12fd)[0x7f7c6725046d]`\ `/lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalCodeWithName+0x8fb)[0x7f7c673a4e3b]`\ `/li
[gem5-users] Re: How to make _addr version of m5 ops work on x86+syscall emulation?
Hello, In the first case, since you're using SE mode, gem5 is trying to use /dev/mem *on your host*, not on the guest. The addr interface for the m5 ops is really meant for FS mode, not SE mode. In the second case, this is probably because KVM + SE mode is rarely, if ever, tested. I'm not surprised there's a bug, though you could try the most recent release of gem5, 21.2. Cheers, Jason On Thu, May 12, 2022 at 7:26 AM wrote: > Hi all, > > I'm trying to run *_addr* *m5ops*. I need the _addr version because I > want to implement a pseudo instruction that works in all gem5 cpu types, > including KVM, which only supports _addr pseudo instructions. > > If I use this code ( > https://gem5.googlesource.com/public/gem5-resources/+/refs/tags/v21.1.0.2/src/simple/m5_exit_addr.c > ) > > as example: > > #include > #include > #include > int main(void) { > #if defined(__aarch64__) > m5op_addr = 0x1001; > #endif > map_m5_mem(); > m5_exit_addr(0); > } > > I built m5ops following > https://www.gem5.org/documentation/general_docs/m5ops/ > > I compile the test application with: > > gcc test.c -o test -L ~/Projects/gem5/util/m5/build/x86/out -lm5 -I > ~/Projects/gem5/include -I ~/Projects/gem5/util/m5/src -static > > If I run with AtomicSimpleCPU I get > > ./build/X86/gem5.opt configs/example/se.py -c > tests/test-progs/pedro-test/test --cpu-type AtomicSimpleCPU > > REAL SIMULATION > build/X86/sim/simulate.cc:107: info: Entering event queue @ 0. Starting > simulation... > build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. > build/X86/sim/syscall_emul.cc:73: warn: ignoring syscall mprotect(...) > build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. > build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. > Can't open /dev/mem: Permission denied > Exiting @ tick 11031000 because exiting with last active thread context > Simulated exit code not 0! Exit code is 1 > > If I run with KvmCPU > > ./build/X86/gem5.opt configs/example/se.py -c > tests/test-progs/pedro-test/test --cpu-type X86KvmCPU > > [...] > > build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0x491) unsupported > by gem5. Skipping. > build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0xc0010015) > unsupported by gem5. Skipping. > build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0x4b564d05) > unsupported by gem5. Skipping. > build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1 > build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set > build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set > build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. > build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1 > build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set > build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set > build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1 > build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set > build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set > build/X86/sim/syscall_emul.cc:73: warn: ignoring syscall mprotect(...) > build/X86/arch/x86/linux/se_workload.cc:162: panic: Page fault at addr 0 > Interrupt handler stack: > ss: 0x1b > rsp: 0x7fffed18 > rflags: 0x10006 > cs: 0x23 > rip: 0x45ca46 > err_code: 0x4 > Memory Usage: 636056 KBytes > Program aborted at tick 441533000 > --- BEGIN LIBC BACKTRACE --- > ./build/X86/gem5.opt(+0x883420)[0x560e0d238420] > ./build/X86/gem5.opt(+0x8a4ade)[0x560e0d259ade] > /lib/x86_64-linux-gnu/libpthread.so.0(+0x143c0)[0x7f7c671cb3c0] > /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7f7c6637103b] > /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f7c66350859] > ./build/X86/gem5.opt(+0x30b5e5)[0x560e0ccc05e5] > ./build/X86/gem5.opt(+0xd6109c)[0x560e0d71609c] > ./build/X86/gem5.opt(+0xd611db)[0x560e0d7161db] > ./build/X86/gem5.opt(+0x913645)[0x560e0d2c8645] > ./build/X86/gem5.opt(+0x9827ee)[0x560e0d3377ee] > ./build/X86/gem5.opt(+0x983a1a)[0x560e0d338a1a] > ./build/X86/gem5.opt(+0x9811c1)[0x560e0d3361c1] > ./build/X86/gem5.opt(+0x552ba6)[0x560e0cf07ba6] > ./build/X86/gem5.opt(+0x5530ae)[0x560e0cf080ae] > ./build/X86/gem5.opt(+0x551b91)[0x560e0cf06b91] > ./build/X86/gem5.opt(+0x892796)[0x560e0d247796] > ./build/X86/gem5.opt(+0x8c14f4)[0x560e0d2764f4] > ./build/X86/gem5.opt(+0x8c1d42)[0x560e0d276d42] > ./build/X86/gem5.opt(+0xe1ec92)[0x560e0d7d3c92] > ./build/X86/gem5.opt(+0x5bfef1)[0x560e0cf74ef1] > /lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x2a8738)[0x7f7c67482738] > > /lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalFrameDefault+0x8dd8)[0x7f7c67257f48] > > /lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalCodeWithName+0x8fb)[0x7f7c673a4e3b] > > /lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyFunction_Vectorcall+0x94)[0x7f7c67482114] > /lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x74d6d)[0x7f7c6724ed6d] > > /lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalFrameDefault+0x7d86)[0x7f7c67256ef6] > /lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x8006b
[gem5-users] Re: How to make _addr version of m5 ops work on x86+syscall emulation?
Thanks Jason, for the quick reply. I was using SE just to do tests faster. I guess doing it in FS from scratch will solve both issues I have. I'll try that. Again, thank you. Em qui, 12 de mai de 2022 17:16, Jason Lowe-Power escreveu: > Hello, > > In the first case, since you're using SE mode, gem5 is trying to use > /dev/mem *on your host*, not on the guest. The addr interface for the m5 > ops is really meant for FS mode, not SE mode. > > In the second case, this is probably because KVM + SE mode is rarely, if > ever, tested. I'm not surprised there's a bug, though you could try the > most recent release of gem5, 21.2. > > Cheers, > Jason > > On Thu, May 12, 2022 at 7:26 AM wrote: > >> Hi all, >> >> I'm trying to run *_addr* *m5ops*. I need the _addr version because I >> want to implement a pseudo instruction that works in all gem5 cpu types, >> including KVM, which only supports _addr pseudo instructions. >> >> If I use this code ( >> https://gem5.googlesource.com/public/gem5-resources/+/refs/tags/v21.1.0.2/src/simple/m5_exit_addr.c >> ) >> >> as example: >> >> #include >> #include >> #include >> int main(void) { >> #if defined(__aarch64__) >> m5op_addr = 0x1001; >> #endif >> map_m5_mem(); >> m5_exit_addr(0); >> } >> >> I built m5ops following >> https://www.gem5.org/documentation/general_docs/m5ops/ >> >> I compile the test application with: >> >> gcc test.c -o test -L ~/Projects/gem5/util/m5/build/x86/out -lm5 -I >> ~/Projects/gem5/include -I ~/Projects/gem5/util/m5/src -static >> >> If I run with AtomicSimpleCPU I get >> >> ./build/X86/gem5.opt configs/example/se.py -c >> tests/test-progs/pedro-test/test --cpu-type AtomicSimpleCPU >> >> REAL SIMULATION >> build/X86/sim/simulate.cc:107: info: Entering event queue @ 0. Starting >> simulation... >> build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. >> build/X86/sim/syscall_emul.cc:73: warn: ignoring syscall mprotect(...) >> build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. >> build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. >> Can't open /dev/mem: Permission denied >> Exiting @ tick 11031000 because exiting with last active thread context >> Simulated exit code not 0! Exit code is 1 >> >> If I run with KvmCPU >> >> ./build/X86/gem5.opt configs/example/se.py -c >> tests/test-progs/pedro-test/test --cpu-type X86KvmCPU >> >> [...] >> >> build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0x491) unsupported >> by gem5. Skipping. >> build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0xc0010015) >> unsupported by gem5. Skipping. >> build/X86/cpu/kvm/x86_cpu.cc:1556: warn: kvm-x86: MSR (0x4b564d05) >> unsupported by gem5. Skipping. >> build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1 >> build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set >> build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set >> build/X86/sim/mem_state.cc:443: info: Increasing stack size by one page. >> build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1 >> build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set >> build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set >> build/X86/cpu/kvm/x86_cpu.cc:450: warn: Illegal SS type: 1 >> build/X86/cpu/kvm/x86_cpu.cc:491: warn: ss: S flag not set >> build/X86/cpu/kvm/x86_cpu.cc:517: warn: ss: P flag not set >> build/X86/sim/syscall_emul.cc:73: warn: ignoring syscall mprotect(...) >> build/X86/arch/x86/linux/se_workload.cc:162: panic: Page fault at addr 0 >> Interrupt handler stack: >> ss: 0x1b >> rsp: 0x7fffed18 >> rflags: 0x10006 >> cs: 0x23 >> rip: 0x45ca46 >> err_code: 0x4 >> Memory Usage: 636056 KBytes >> Program aborted at tick 441533000 >> --- BEGIN LIBC BACKTRACE --- >> ./build/X86/gem5.opt(+0x883420)[0x560e0d238420] >> ./build/X86/gem5.opt(+0x8a4ade)[0x560e0d259ade] >> /lib/x86_64-linux-gnu/libpthread.so.0(+0x143c0)[0x7f7c671cb3c0] >> /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7f7c6637103b] >> /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f7c66350859] >> ./build/X86/gem5.opt(+0x30b5e5)[0x560e0ccc05e5] >> ./build/X86/gem5.opt(+0xd6109c)[0x560e0d71609c] >> ./build/X86/gem5.opt(+0xd611db)[0x560e0d7161db] >> ./build/X86/gem5.opt(+0x913645)[0x560e0d2c8645] >> ./build/X86/gem5.opt(+0x9827ee)[0x560e0d3377ee] >> ./build/X86/gem5.opt(+0x983a1a)[0x560e0d338a1a] >> ./build/X86/gem5.opt(+0x9811c1)[0x560e0d3361c1] >> ./build/X86/gem5.opt(+0x552ba6)[0x560e0cf07ba6] >> ./build/X86/gem5.opt(+0x5530ae)[0x560e0cf080ae] >> ./build/X86/gem5.opt(+0x551b91)[0x560e0cf06b91] >> ./build/X86/gem5.opt(+0x892796)[0x560e0d247796] >> ./build/X86/gem5.opt(+0x8c14f4)[0x560e0d2764f4] >> ./build/X86/gem5.opt(+0x8c1d42)[0x560e0d276d42] >> ./build/X86/gem5.opt(+0xe1ec92)[0x560e0d7d3c92] >> ./build/X86/gem5.opt(+0x5bfef1)[0x560e0cf74ef1] >> /lib/x86_64-linux-gnu/libpython3.8.so.1.0(+0x2a8738)[0x7f7c67482738] >> >> /lib/x86_64-linux-gnu/libpython3.8.so.1.0(_PyEval_EvalFrameDefault+0x8dd8)[0x7f7c67257f48] >> >> /lib/x86_64-linux-gnu/li