diff options
author | Johannes Stoelp <johannes.stoelp@gmail.com> | 2023-02-05 18:35:26 +0100 |
---|---|---|
committer | Johannes Stoelp <johannes.stoelp@gmail.com> | 2023-02-05 18:35:26 +0100 |
commit | 724d077860e103631605f09a7de35e3ad8796f56 (patch) | |
tree | f7d94c536d3c70f62fb548c95f1835091801a9ff | |
parent | 728d263753b998b8944a66eec1be0e743961fa1c (diff) | |
download | notes-724d077860e103631605f09a7de35e3ad8796f56.tar.gz notes-724d077860e103631605f09a7de35e3ad8796f56.zip |
qemu: cheap insn trace example
-rw-r--r-- | src/tools/qemu-src/Makefile | 9 | ||||
-rw-r--r-- | src/tools/qemu-src/test.s | 16 | ||||
-rw-r--r-- | src/tools/qemu.md | 8 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/tools/qemu-src/Makefile b/src/tools/qemu-src/Makefile new file mode 100644 index 0000000..1d21811 --- /dev/null +++ b/src/tools/qemu-src/Makefile @@ -0,0 +1,9 @@ +test: test.s + as -o test.o test.s + ld -o test test.o testc.o + +trace: test + qemu-x86_64 -singlestep -d nochain,cpu ./test 2>&1 | awk '/RIP/ { print $$1; }' + +clean: + $(RM) test test-bin test.o diff --git a/src/tools/qemu-src/test.s b/src/tools/qemu-src/test.s new file mode 100644 index 0000000..562b2ec --- /dev/null +++ b/src/tools/qemu-src/test.s @@ -0,0 +1,16 @@ +.section .text, "ax" + +.global _start +_start: + xor %rax, %rax + mov $0x8, %rax +1: + cmp $0, %rax + je 2f + dec %rax + jmp 1b +2: + # x86-64 exit(2) syscall + mov $0, %rdi + mov $60, %rax + syscall diff --git a/src/tools/qemu.md b/src/tools/qemu.md index 2a833e4..4351435 100644 --- a/src/tools/qemu.md +++ b/src/tools/qemu.md @@ -269,6 +269,14 @@ qemu-system-x86_64 \ ``` Instructions to build a minimal [`Kernel` and `initrd`][blog-qemu-dbg]. +## Appendix: Cheap instruction tracer +```make +{{ #include qemu-src/Makefile }} +``` +```x86asm +{{ #include qemu-src/test.s }} +``` + ## References - [QEMU USB][doc-qemu-usb] |