| 1 | __asm__( |
| 2 | ".weak _DYNAMIC \n" |
| 3 | ".hidden _DYNAMIC \n" |
| 4 | ".text \n" |
| 5 | ".global " START " \n" |
| 6 | ".type " START ", %function \n" |
| 7 | START ": \n" |
| 8 | " // Find _DYNAMIC\n" |
| 9 | " jump 1f\n" |
| 10 | ".word _DYNAMIC - .\n" |
| 11 | "1: r2 = pc\n" |
| 12 | " r2 = add(r2, #-4)\n" |
| 13 | " r1 = memw(r2)\n" |
| 14 | " r1 = add(r2, r1)\n" |
| 15 | "	r30 = #0			// Signals the end of backtrace\n" |
| 16 | "	r31 = #0\n" |
| 17 | "	r0 = r29			// Pointer to argc/argv\n" |
| 18 | "	r29 = and(r29, #-16)		// Align\n" |
| 19 | "	memw(r29+#-8) = r29\n" |
| 20 | "	r29 = add(r29, #-8)\n" |
| 21 | "	call " START "_c \n" |
| 22 | ".size " START ", .-" START "\n" |
| 23 | ); |