I didn't really look into it that much, so I could be wrong, but on the last two lines of the main label, you're calling bx r1 with 0x0802D686 + 1 in r1. bx does exchange between ARM and THUMB mode, so the offset you call it with must be aligned (end in 0, 4, 8, or C). You could try doing stack...