Merge "Adding placeholder documentation for TLib Workflow"
diff --git a/RenodeTlibWorkflowDocumentation.md b/RenodeTlibWorkflowDocumentation.md
new file mode 100644
index 0000000..bb43227
--- /dev/null
+++ b/RenodeTlibWorkflowDocumentation.md
@@ -0,0 +1,114 @@
+# Renode TLib Workflow (Placeholder)
+
+Commands here are subject to change.
+
+* [Building](#building)
+* [Running Qemu without debugging](#running-qemu-without-debugging)
+* [Running Qemu with debugging](#running-qemu-with-debugging)
+* [Running gdb for Qemu](#running-gdb-for-qemu)
+  * [Run gdb on the target elf](#run-gdb-on-the-target-elf)
+* [Running gdb for Renode](#running-gdb-for-renode)
+  * [Setup .gdbinit file](#setup-.gdbinit-file)
+* [Running Renode](#running-renode)
+
+## Building
+
+```
+m springbok
+m qemu_clean qemu
+m renode_clean renode
+```
+
+Note: as we continually make changes to renode, will have to `m renode_clean renode` to apply updates:
+
+`m renode_clean renode`
+
+
+## Running Qemu without debugging
+
+```
+qemu_sim_springbok ./out/springbok/test_vsetvl/test_vsetvl.elf
+```
+
+## Running Qemu with debugging
+
+```
+qemu_sim_springbok ./out/springbok/test_vsetvl/test_vsetvl.elf -s -S
+```
+
+## Running gdb for Qemu
+
+### Run gdb on the target elf
+
+Note, same as for Renode but with `target remote :1234`
+
+```sh
+riscv32-unknown-elf-gdb out/springbok/test_vsetvl/test_vsetvl.elf \
+  -ex "target remote :1234" \
+  -ex "layout split" \
+  -ex "b main" \
+  -ex "c"
+```
+## Running gdb for Renode
+
+```sh
+riscv32-unknown-elf-gdb out/springbok/test_vsetvl/test_vsetvl.elf \
+  -ex "target remote :3333" \
+  -ex "monitor start" \
+  -ex "sysbus.cpu2 IsHalted False" \
+  -ex "layout split" \
+  -ex "b main" \
+  -ex "c"
+```
+### Setup .gdbinit file
+
+Save the following to `${HOME}/.gdbinit`:
+
+```
+set auto-load safe-path /
+handle SIGXCPU SIG33 SIG35 SIG36 SIG37 SIG38 SIGPWR nostop noprint
+
+define mono_backtrace
+ select-frame 0
+ set $i = 0
+ while ($i < $arg0)
+   set $foo = (char*) mono_pmip ($pc)
+   if ($foo)
+     printf "#%d %p in %s\n", $i, $pc, $foo
+   else
+     frame
+   end
+   up-silently
+   set $i = $i + 1
+ end
+end
+
+define mono_stack
+ set $mono_thread = mono_thread_current ()
+ if ($mono_thread == 0x00)
+   printf "No mono thread associated with this thread\n"
+ else
+   set $ucp = malloc (sizeof (ucontext_t))
+   call (void) getcontext ($ucp)
+   call (void) mono_print_thread_dump ($ucp)
+   call (void) free ($ucp)
+ end
+end
+```
+
+
+## Running Renode
+
+```sh
+gdb -ex "set breakpoint pending on" \
+  -ex "set pagination off" \
+  -ex "b helper_vsetvl" \
+  -ex "layout split" \
+  -ex "r" \
+  --args mono \
+  --debug out/host/renode/Renode.exe  \
+  -e "\$bin=@out/springbok/test_vsetvl/test_vsetvl.elf; i @sim/config/springbok.resc;" \
+  --disable-xwt \
+  --console
+```
+