# You'll find a bunch of nop opcodes in the below macros. They are # there to keep the code correctly aligned. Be careful to maintain # them when changing the code. comment "subroutine declare" .purgem gdbasm_declare .macro gdbasm_declare name .align 1 .global \name \name: .endm comment "subroutine prologue" .macro gdbasm_enter mov.l r14,@-r15 sts.l pr,@-r15 mov r15,r14 nop .endm comment "subroutine epilogue" .macro gdbasm_leave mov r14,r15 lds.l @r15+,pr mov.l @r15+,r14 rts nop nop .endm comment "subroutine end" .purgem gdbasm_end .macro gdbasm_end name .size \name, . - \name .align 1 .endm comment "subroutine call" .macro gdbasm_call subr mov.l .Lconst\@,r1 bra .Lafterconst\@ nop nop .Lconst\@: .align 2 .long \subr .align 1 .Lafterconst\@: jsr @r1 nop .endm .macro gdbasm_several_nops nop nop nop nop .endm comment "exit (0)" .macro gdbasm_exit0 sleep nop .endm comment "crt0 startup" .macro gdbasm_startup comment "If there is a _stack symbol, use it for setting up the stack" comment "pointer. In hosted mode (when there is no _stack symbol)," comment "the operating system will have initialized it already." mov.l .stackaddr, r0 tst r0, r0 bt .afterstackaddr mov r0, r15 bra .afterstackaddr nop .align 2 .stackaddr: .weak _stack .long _stack .align 1 .afterstackaddr: .endm comment "Declare a data variable" .purgem gdbasm_datavar .macro gdbasm_datavar name value .data .align 2 .type \name, @object .size \name, 4 \name: .long \value .endm