My point is that Dependency Injection does something *different* from pushing things up the call stack: DI extracts all the dependencies and class-to-class wiring "off to the side" -- to a place that exists independently of the stack.
Step 1: Some "all knowing" class or magic framework selects all the right implementation classes for this run and wires everything up.
Step 2: The application code runs. Lots of stack pushing and popping goes on here.