authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-07-24 17:35:47+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-07-24 21:56:54+02:00
log52653ec82bcc8e10fee9b6d9997b2de41a22a93a
tree55966498e4fbaa59318c29f8c6f4bc2d16cbc387
parent714e7433930e68698b1e33c1de13dc5514cd5a77
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

start: Align the stack on powerpc just in case.

The kernel does this as required, but we cannot trust dynamic linkers to do it.

1 files changed, 3 insertions(+), 2 deletions(-)

lib/std/start.zig+3-2
...@@ -351,8 +351,9 @@ fn _start() callconv(.Naked) noreturn {...@@ -351,8 +351,9 @@ fn _start() callconv(.Naked) noreturn {
351 \\ j %[posixCallMainAndExit]351 \\ j %[posixCallMainAndExit]
352 ,352 ,
353 .powerpc, .powerpcle =>353 .powerpc, .powerpcle =>
354 // Setup the initial stack frame and clear the back chain pointer.354 // Set up the initial stack frame, and clear the back chain pointer.
355 \\ mr 3, 1355 \\ mr 3, 1
356 \\ clrrwi 1, 1, 4
356 \\ li 0, 0357 \\ li 0, 0
357 \\ stwu 1, -16(1)358 \\ stwu 1, -16(1)
358 \\ stw 0, 0(1)359 \\ stw 0, 0(1)
...@@ -360,7 +361,7 @@ fn _start() callconv(.Naked) noreturn {...@@ -360,7 +361,7 @@ fn _start() callconv(.Naked) noreturn {
360 \\ b %[posixCallMainAndExit]361 \\ b %[posixCallMainAndExit]
361 ,362 ,
362 .powerpc64, .powerpc64le =>363 .powerpc64, .powerpc64le =>
363 // Setup the initial stack frame and clear the back chain pointer.364 // Set up the ToC and initial stack frame, and clear the back chain pointer.
364 \\ addis 2, 12, .TOC. - %[_start]@ha365 \\ addis 2, 12, .TOC. - %[_start]@ha
365 \\ addi 2, 2, .TOC. - %[_start]@l366 \\ addi 2, 2, .TOC. - %[_start]@l
366 \\ mr 3, 1367 \\ mr 3, 1