To be clear:
ReadUart runs on the CPU and WriteUart runs on the XGATE?
If so then you can cause the other core to run these functions but you cannot run the functions on the wrong core. This means that the XGATE cannot call the ReadUart function as a normal function call and the same for the CPU and WriteUart.
However, you can cause the other core to run these functions on demand. This is normally done using interrupts. You should have a clear understanding of the interrupt controller and the XGATE interrupt request feature before writing any code. There is lots of support examples for XGATE on this website, the concurrent computing webinar is certainly worth a look for this type of application.
XGATE can send the SCI interrupt to the CPU at any time (since it is already routed to XGATE) and you could use this to cause the CPU to begin running the ReadUart function. If ReadUart is not an interrupt handler on the CPU then you must call it from a dedicated ISR. See AN3144
An alternative solution is to use one of the 8 XGATE software trigger interrupts. Have one point to XGATE and the WriteUart function and one point to the CPU and the ReadUart function (or a handler that calls it).