It would be better to provide more information. You haven't showed what your #defines are. It would be easier to check the startup code if it was a disassembly, showing the opcodes and data, and not just the source. That would show me your definitions.
A stack dump (all the hex data around the stack pointer) would help.
I notice a few anomalies that are worth investigating:
vbr 200000c0
The bottom bits are meant to be zero. They're specified as "not implemented, assumed to be zero, documented as read-as-zero", but the documentation has been wrong before.
move.l #_sbss, %a1
move.l #_ebss, %d1
6:
clr.l (%a1)+
cmp.l %a1,%d1
bgt.s 6b
After executing the above, %a1 and %d1 should have the same value, but it looks like %a1 didn't increment, or didn't increment more than once.
d0 00000000 d1 200018ac d2 40422233 d3 2050c049
d4 40100100 d5 18409118 d6 94180154 d7 21105083
a0 20000a8a a1 20001794 a2 2000fffc a3 02186440
They don't have the same values. I can't check any further as I don't know what _sbss and _ebss were meant to start out as. Maybe you have the comparison arguments reversed?
"cmp" on the 68k was always problematic. The SunOS compiler writers didn't like "compare src, dst" and preferred the PDP-11 "compare dst, src" as it made the conditional branches read better. So they reversed the order in the COMPILER, and some compilers might still do that to this day. Whatever - there's something wrong there. Can you single-step part of that loop to see why it isn't working?
I'd suggest ZEROING all the registers you're not using so that when you crash or stop you can spot anything unusual in their (unexpected) contents. You can also load constants into registers as your code runs so you can prove it executed particular instructions.
Also:
pc 2000046e
How did it end up THERE? What is there? What are your vectors set to (they should all be set to something that will stop cleanly)? The Vectors go up to 0x200003FC, so that's above that area.
Maybe the debugger and pod are doing something funny. Maybe it is using trace interrupts and the trace vector or a debug vector. Maybe it is rewriting the code (some debuggers replace the next instruction with a "halt" before running and then replace it after the halt to simulate a single-step).
If you can, single step this stuff. That can cause problems, so emulate single-stepping by putting breakpoints "ahead of yourself" and letting the code run into them.
Then start messing around. Replace the code at _main with a bunch of NOPs. See if it fails on the first instruction, or whether that instruction has to be the LEA. Move the code around. Realign it. Change the jsr to main to a jmp. Move stuff to the stack and read it back again. Just change things until the symptoms change, then chase those.
Tom