| ... | @@ -212,6 +212,7 @@ fn _start() callconv(.naked) noreturn { | ... | @@ -212,6 +212,7 @@ fn _start() callconv(.naked) noreturn { |
| 212 | else | 212 | else |
| 213 | ".cfi_undefined ra", | 213 | ".cfi_undefined ra", |
| 214 | .s390x => ".cfi_undefined %%r14", | 214 | .s390x => ".cfi_undefined %%r14", |
| | 215 | .sh, .sheb => ".cfi_undefined pr", |
| 215 | .sparc, .sparc64 => ".cfi_undefined %%i7", | 216 | .sparc, .sparc64 => ".cfi_undefined %%i7", |
| 216 | .x86 => ".cfi_undefined %%eip", | 217 | .x86 => ".cfi_undefined %%eip", |
| 217 | .x86_64 => ".cfi_undefined %%rip", | 218 | .x86_64 => ".cfi_undefined %%rip", |
| ... | @@ -455,6 +456,21 @@ fn _start() callconv(.naked) noreturn { | ... | @@ -455,6 +456,21 @@ fn _start() callconv(.naked) noreturn { |
| 455 | \\ stg %%r0, 0(%%r15) | 456 | \\ stg %%r0, 0(%%r15) |
| 456 | \\ jg %[posixCallMainAndExit] | 457 | \\ jg %[posixCallMainAndExit] |
| 457 | , | 458 | , |
| | 459 | .sh, .sheb => |
| | 460 | // r14 = FP, r15 = SP, pr = LR |
| | 461 | \\ mov #0, r0 |
| | 462 | \\ lds r0, pr |
| | 463 | \\ mov r0, r14 |
| | 464 | \\ mov r15, r4 |
| | 465 | \\ mov #-4, r0 |
| | 466 | \\ and r0, r15 |
| | 467 | \\ mov.l 2f, r1 |
| | 468 | \\1: |
| | 469 | \\ bsrf r1 |
| | 470 | \\2: |
| | 471 | \\ .balign 4 |
| | 472 | \\ .long %[posixCallMainAndExit]@PCREL - (1b + 4 - .) |
| | 473 | , |
| 458 | .sparc => | 474 | .sparc => |
| 459 | // argc is stored after a register window (16 registers * 4 bytes). | 475 | // argc is stored after a register window (16 registers * 4 bytes). |
| 460 | // i7 = LR | 476 | // i7 = LR |