We define a new trampoline that's a hybrid between the exit and entry
trampolines with the following properties:
- Saves all of the callee-saved registers according to the x86_64 calling conventions.
- Indicate to the log handler function being called that this is a function exit event.
This fixes a bug that is a result of not saving enough of the register
states, and that the log handler is clobbering registers that would be
used by the function being tail-exited into manifesting as runtime
errors.
Shouldn't here be $2, because enum XRayEntryType { ENTRY = 0, EXIT = 1, TAIL = 2 }; and it's tail exit?