From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- vendor/psm/src/arch/powerpc32.s | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 vendor/psm/src/arch/powerpc32.s (limited to 'vendor/psm/src/arch/powerpc32.s') diff --git a/vendor/psm/src/arch/powerpc32.s b/vendor/psm/src/arch/powerpc32.s new file mode 100644 index 000000000..1f7a08619 --- /dev/null +++ b/vendor/psm/src/arch/powerpc32.s @@ -0,0 +1,76 @@ +#include "psm.h" +/* FIXME: this probably does not cover all ABIs? Tested with sysv only, possibly works for AIX as + well? +*/ + +.text +.globl rust_psm_stack_direction +.p2align 2 +.type rust_psm_stack_direction,@function +rust_psm_stack_direction: +/* extern "C" fn() -> u8 */ +.cfi_startproc + li 3, STACK_DIRECTION_DESCENDING + blr +.rust_psm_stack_direction_end: +.size rust_psm_stack_direction,.rust_psm_stack_direction_end-rust_psm_stack_direction +.cfi_endproc + + +.globl rust_psm_stack_pointer +.p2align 2 +.type rust_psm_stack_pointer,@function +rust_psm_stack_pointer: +/* extern "C" fn() -> *mut u8 */ +.cfi_startproc + mr 3, 1 + blr +.rust_psm_stack_pointer_end: +.size rust_psm_stack_pointer,.rust_psm_stack_pointer_end-rust_psm_stack_pointer +.cfi_endproc + + +.globl rust_psm_replace_stack +.p2align 2 +.type rust_psm_replace_stack,@function +rust_psm_replace_stack: +/* extern "C" fn(3: usize, 4: extern "C" fn(usize), 5: *mut u8) */ +.cfi_startproc +/* NOTE: perhaps add a debug-assertion for stack alignment? */ + addi 5, 5, -16 + mr 1, 5 + mtctr 4 + bctr +.rust_psm_replace_stack_end: +.size rust_psm_replace_stack,.rust_psm_replace_stack_end-rust_psm_replace_stack +.cfi_endproc + + +.globl rust_psm_on_stack +.p2align 2 +.type rust_psm_on_stack,@function +rust_psm_on_stack: +/* extern "C" fn(3: usize, 4: usize, 5: extern "C" fn(usize, usize), 6: *mut u8) */ +.cfi_startproc + mflr 0 + stw 0, -24(6) + sub 6, 6, 1 + addi 6, 6, -32 + stwux 1, 1, 6 + .cfi_def_cfa r1, 32 + .cfi_offset r1, -32 + .cfi_offset lr, -24 + mtctr 5 + bctrl + lwz 0, 8(1) + mtlr 0 + .cfi_restore lr + /* FIXME: after this instruction backtrace breaks until control returns to the caller + That being said compiler-generated code has the same issue, so I guess that is fine for now? + */ + lwz 1, 0(1) + .cfi_restore r1 + blr +.rust_psm_on_stack_end: +.size rust_psm_on_stack,.rust_psm_on_stack_end-rust_psm_on_stack +.cfi_endproc -- cgit v1.2.3