Shadow stack is a technique of maintaining a linked list of frames that mimics the call stack. The frames can carry useful information.
The shadow stack does not have to correspond to actual call stack though. e.g., with the presence of CSP it will not
I believe it is used in Haskell to maintain stacktraces (even though stacktraces do not correspond to actual call stack because of lazy evaluation)