The $CALL macro generates the following instruction sequence: LDQ R26, code_address_offset(Rls) ; load code address LDQ R27, procedure_descriptor_address_offset(Rls) ; load procedure ; descriptor ; address JSR R26, R26 ; The contents of R26 and R27 are erased as a result of using the $CALL macro. This is important since Rls in the previous sequence is typically R27. Thus, if you require subsequent access to your linkage section, such as when making subsequent calls, you need to make a working copy of R27 to use after the first call. Note that $CALL also overwrites the values in the argument registers, and the scratch registers specified or the default set by the SCRATCH_REGS argument, when you pass arguments to the called routine.