Current attempts to support throwing have not worked. The most recent attempt involved just adding a throw and then trying to add code until the errors went away. This began with RhpThrowEx in ExceptionHandling.asm which caused issues with _tls_index and tls_CurrentThread being missing since both threads and local storage are not supported. Ignoring this lead to RhThrowEx in ExceptionHandling.cs which requires many other functions in StackFrameIterator.cs, UnsafeGCHandle.cs and TypeCast.cs and the following list of internal calls:
RhpHandleAlloc,
RhpHandleSet,
RhpEHEnumInitFromStackFrameIterator,
RhpEHEnumNext,
RhpGetClasslibFunctionFromCodeAddress,
RhpGetClasslibFunctionFromEEType,
RhpSfiInit,
RhpSfiNext,
RhpGetRequestedExceptionEvents,
RhpSendExceptionEventToDebugger,
RhpCallCatchFunclet,
RhpCallFinallyFunclet,
RhpCallFilterFunclet,
RhpSetThreadDoNotTriggerGC,
RhpValidateExInfoStack,
RhpCopyContextFromExInfo,
RhpAcquireCastCacheLock,
RhpReleaseCastCacheLock,
PalGetTickCount64.
Adding externs for these in order to pass the il compilation stage works but the ilc stage fails with "EXEC : LLVM error : invalid symbol redefinition" without indicating what symbol it is talking about. The plan was to see which of those internal calls were actually required since some are debug only and then look into adding those but that required getting to the linker.