Trace Task Context Switch

I would like to know in which instruction within a switched-out Task a context switch happens,
or retrieve the next executable instruction of the switched-in Task.
I used the traceTaskSWITCHED_OUT/IN macros to get the stored registers (e.g., LR, PC) at the end of the task stack (within Task stack initialization), but it is not accurate.
What could be done to get the location of the Context Switch instruction (out or in)?

It depends on the FreeRTOS port you are using. For Cortex-M4, here is the context switch code - FreeRTOS-Kernel/port.c at main · FreeRTOS/FreeRTOS-Kernel · GitHub

I’m running FreeRTOS on EFR32 MCU (Cortex-M4).
Yes, I’m aware of this ISR, xPortPendSVHandler(), but even when I break in “bx LR” instruction at the end, I don’t see accurate instruction address either in LR (or other registers), nor in the stored registers at Task end-of-stack space (freeRTOS maintains 18 32-bit locations on top of stack for context-switch Registers - in the traceTaskSWITCHED_OUT/IN macros I added code to copy the 18 locations into noinit section)

LR contains a special value known as EXC_RETURN - Documentation – Arm Developer

The registers are then popped from stack when BX LR is executed. This document explains exception entry and exit process - Documentation – Arm Developer