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/zseries_linux.s | 75 +++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 vendor/psm/src/arch/zseries_linux.s (limited to 'vendor/psm/src/arch/zseries_linux.s') diff --git a/vendor/psm/src/arch/zseries_linux.s b/vendor/psm/src/arch/zseries_linux.s new file mode 100644 index 000000000..e2536a1c9 --- /dev/null +++ b/vendor/psm/src/arch/zseries_linux.s @@ -0,0 +1,75 @@ +/* Implementation of stack swtiching routines for zSeries LINUX ABI. + + This ABI is used by the s390x-unknown-linux-gnu target. + + Documents used: + + * LINUX for zSeries: ELF Application Binary Interface Supplement (1st ed., 2001) (LNUX-1107-01) + * z/Architecture: Principles of Operation (4th ed., 2004) (SA22-7832-03) +*/ + +#include "psm.h" + +.text + + +.globl rust_psm_stack_direction +.p2align 4 +.type rust_psm_stack_direction,@function +rust_psm_stack_direction: +/* extern "C" fn() -> u8 */ +.cfi_startproc + lghi %r2, STACK_DIRECTION_DESCENDING + br %r14 +.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 4 +.type rust_psm_stack_pointer,@function +rust_psm_stack_pointer: +/* extern "C" fn() -> *mut u8 */ +.cfi_startproc + la %r2, 0(%r15) + br %r14 +.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 4 +.type rust_psm_replace_stack,@function +rust_psm_replace_stack: +/* extern "C" fn(r2: usize, r3: extern "C" fn(usize), r4: *mut u8) */ +.cfi_startproc + /* FIXME: backtrace does not terminate cleanly for some reason */ + lay %r15, -160(%r4) + /* FIXME: this is `basr` instead of `br` purely to remove the backtrace link to the caller */ + basr %r14, %r3 +.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 4 +.type rust_psm_on_stack,@function +rust_psm_on_stack: +/* extern "C" fn(r2: usize, r3: usize, r4: extern "C" fn(usize, usize), r5: *mut u8) */ +.cfi_startproc + stmg %r14, %r15, -16(%r5) + lay %r15, -176(%r5) + .cfi_def_cfa %r15, 176 + .cfi_offset %r14, -16 + .cfi_offset %r15, -8 + basr %r14, %r4 + lmg %r14, %r15, 160(%r15) + .cfi_restore %r14 + .cfi_restore %r15 + br %r14 +.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