[RISCV] Build fixes and simple exception handling (#40142)
authormonojenkins <jo.shields+jenkins@xamarin.com>
Thu, 30 Jul 2020 23:21:34 +0000 (19:21 -0400)
committerGitHub <noreply@github.com>
Thu, 30 Jul 2020 23:21:34 +0000 (19:21 -0400)
commit69316ce44430884bb868159f24c88f35726e3f2b
tree319e3ff3145449bf5e60d0b348af0f9b814bffb4
parent4e53638a21b2cde04f94a506a3dee51e4bdff9f8
[RISCV] Build fixes and simple exception handling (#40142)

Hello Mono friends,

here are some build fixes to make the RISC-V port compile again. Also I added some minimal exception handling stuff to make most of the mini regression test suites passing in the interpreter:
```console
$ for i in mono/mini/{basic.exe,basic-float.exe,basic-long.exe,basic-calls.exe,objects.exe,arrays.exe,exceptions.exe,iltests.exe,devirtualization.exe,generics.exe,basic-vectors.exe,ratests.exe}; do \
  MONO_PATH=../managed-libs/./mcs/class/lib/net_4_x-linux/ \
  qemu-riscv64 ./mono/mini/mono-sgen --config data/config --regression --interp $i;
done
```
output here: https://gist.github.com/lewurm/d7e54b47930126e6bae77b9a4eee1d40

While this is cool, keep in mind this only works because `--regression` doesn't pull in any native transitions. For this we essentially need a working JIT and implement some trampolines. Alas I ran out of time for my hackweek project to get it in any useful state, so I didn't include it in this PR. My WIP branch is here: https://github.com/lewurm/mono/commits/riscv-wip

I also ran into an annoying qemu bug which I reported here: https://github.com/riscv/riscv-binutils-gdb/issues/223 / https://bugs.launchpad.net/qemu/+bug/1889411 Hopefully this will be fixed before I touch it next time and/or I have real hardware at this point ðŸ˜„

/cc @alexrp

Co-authored-by: lewurm <lewurm@users.noreply.github.com>
src/mono/mono/metadata/object-offsets.h
src/mono/mono/mini/exceptions-riscv.c
src/mono/mono/mini/interp/interp.c
src/mono/mono/mini/mini-riscv.c
src/mono/mono/mini/mini-runtime.c
src/mono/mono/utils/freebsd-elf_common.h