On Sat, Apr 15, 2023 at 06:50:08PM +0300, Eero Tamminen wrote:
I'm a bit surprised how many functions (symbol addresses) start with link.w instruction, instead of e.g. move* instruction.
That seems pretty normal to me. The LINK instruction sets up a stack frame for a function. It takes an address register and size (the .w suffix indicates a 16-bit size, while .l would indicate a 32-bit value of size). The old value of the register is pushed to the stack, the current stack pointer is saved into the given register, then the stack is increased by the given size. There is a corresponding UNLK instruction to tear down the stack frame which will frequently be the last instruction before returning to the caller. The compiler will use these in the function prologue and epilogue in all but the most trivial functions. Brad Boyer flar@xxxxxxxxxxxxx