The tale of "-mrtd" in GCC and Clang
m680x0.github.io
m680x0.github.io
https://gcc.gnu.org/pub/gcc/old-releases/gcc-1/gcc-1.21.tar....
Rich Pixley deserves all the credit for getting gnu sources into source control, specifically CVS which at the time was the latest hotness (it was not yet client server; that was added later by IIRC Ian Taylor after some unfortunate incidents).
John and I placed some absurd hoops that needed to be jumped through in order for source control to be adopted, all of which Rich wisely just ignored.
If you think that LLVM having an M68k is a great idea, please consider supporting the development via OpenCollective or Patreon:
Last I checked, rms himself is still alive and answering emails. He might be a good place to start.
Edit: spelling.
The K&R legacy is likely the reason for the caller-pops-arguments convention, but there was also a time where it was deemed more efficient because you could combine multiple stack adjustments.
There's also a neat trick I learned from LuaJIT: if you store the stack pointer in a callee-saved register before the call and restore it afterwards, it works with both conventions.
In addition to caller-pops-arguments, I also remember that arguments used to be pushed on the stack in right to left order, so the callee had a fixed offset to the first argument, no matter how many arguments were provided.