19324ced7SMarouene Boubakri/* SPDX-License-Identifier: BSD-2-Clause */ 29324ced7SMarouene Boubakri/* 3bc12b0e9SAlvin Chang * Copyright (c) 2023 Andes Technology Corporation 49324ced7SMarouene Boubakri * Copyright 2022-2023 NXP 59324ced7SMarouene Boubakri */ 69324ced7SMarouene Boubakri#include <asm.S> 79324ced7SMarouene Boubakri 89324ced7SMarouene Boubakri/* int setjmp (jmp_buf) */ 99324ced7SMarouene BoubakriFUNC setjmp , : 109324ced7SMarouene Boubakri STR s0, REGOFF(0)(a0) 119324ced7SMarouene Boubakri STR s1, REGOFF(1)(a0) 129324ced7SMarouene Boubakri STR s2, REGOFF(2)(a0) 139324ced7SMarouene Boubakri STR s3, REGOFF(3)(a0) 149324ced7SMarouene Boubakri STR s4, REGOFF(4)(a0) 159324ced7SMarouene Boubakri STR s5, REGOFF(5)(a0) 169324ced7SMarouene Boubakri STR s6, REGOFF(6)(a0) 179324ced7SMarouene Boubakri STR s7, REGOFF(7)(a0) 189324ced7SMarouene Boubakri STR s8, REGOFF(8)(a0) 199324ced7SMarouene Boubakri STR s9, REGOFF(9)(a0) 209324ced7SMarouene Boubakri STR s10, REGOFF(10)(a0) 219324ced7SMarouene Boubakri STR s11, REGOFF(11)(a0) 229324ced7SMarouene Boubakri STR ra, REGOFF(12)(a0) 239324ced7SMarouene Boubakri STR sp, REGOFF(13)(a0) 249324ced7SMarouene Boubakri#ifdef CFG_FTRACE_SUPPORT 259324ced7SMarouene Boubakri addi sp, sp, -16 26bc12b0e9SAlvin Chang#ifdef RV32 27bc12b0e9SAlvin Chang STR ra, REGOFF(3)(sp) 28bc12b0e9SAlvin Chang STR s0, REGOFF(2)(sp) 29bc12b0e9SAlvin Chang#else 30bc12b0e9SAlvin Chang STR ra, REGOFF(1)(sp) 31bc12b0e9SAlvin Chang STR s0, REGOFF(0)(sp) 32bc12b0e9SAlvin Chang#endif 33bc12b0e9SAlvin Chang addi s0, sp, 16 34bc12b0e9SAlvin Chang addi a0, a0, REGOFF(14) 35bc12b0e9SAlvin Chang call ftrace_setjmp 36bc12b0e9SAlvin Chang#ifdef RV32 37bc12b0e9SAlvin Chang LDR s0, REGOFF(2)(sp) 38bc12b0e9SAlvin Chang LDR ra, REGOFF(3)(sp) 39bc12b0e9SAlvin Chang#else 40bc12b0e9SAlvin Chang LDR s0, REGOFF(0)(sp) 41bc12b0e9SAlvin Chang LDR ra, REGOFF(1)(sp) 42bc12b0e9SAlvin Chang#endif 439324ced7SMarouene Boubakri addi sp, sp, 16 449324ced7SMarouene Boubakri#endif 459324ced7SMarouene Boubakri li a0, 0 469324ced7SMarouene Boubakri ret 479324ced7SMarouene BoubakriEND_FUNC setjmp 489324ced7SMarouene Boubakri 499324ced7SMarouene Boubakri/* void longjmp (jmp_buf, int) __attribute__ ((noreturn)) */ 509324ced7SMarouene BoubakriFUNC longjmp , : 519324ced7SMarouene Boubakri#ifdef CFG_FTRACE_SUPPORT 52bc12b0e9SAlvin Chang addi sp, sp, -REGOFF(4) 539324ced7SMarouene Boubakri STR a0, REGOFF(0)(sp) 549324ced7SMarouene Boubakri STR a1, REGOFF(1)(sp) 55bc12b0e9SAlvin Chang STR s0, REGOFF(2)(sp) 56bc12b0e9SAlvin Chang STR ra, REGOFF(3)(sp) 57bc12b0e9SAlvin Chang addi s0, sp, REGOFF(4) 58bc12b0e9SAlvin Chang addi a0, a0, REGOFF(14) 59bc12b0e9SAlvin Chang call ftrace_longjmp 609324ced7SMarouene Boubakri LDR a0, REGOFF(0)(sp) 619324ced7SMarouene Boubakri LDR a1, REGOFF(1)(sp) 62bc12b0e9SAlvin Chang LDR s0, REGOFF(2)(sp) 63bc12b0e9SAlvin Chang LDR ra, REGOFF(3)(sp) 64bc12b0e9SAlvin Chang addi sp, sp, REGOFF(4) 659324ced7SMarouene Boubakri#endif 66*7749dda2SAleksandr Iashchenko#if defined(__KERNEL__) && defined(CFG_CORE_SANITIZE_KADDRESS) && \ 67*7749dda2SAleksandr Iashchenko !defined(CFG_DYN_CONFIG) 68*7749dda2SAleksandr Iashchenko#error longjmp() stack unpoisoning not implemented for RISC-V with ASAN 69*7749dda2SAleksandr Iashchenko#endif 709324ced7SMarouene Boubakri LDR s0, REGOFF(0)(a0) 719324ced7SMarouene Boubakri LDR s1, REGOFF(1)(a0) 729324ced7SMarouene Boubakri LDR s2, REGOFF(2)(a0) 739324ced7SMarouene Boubakri LDR s3, REGOFF(3)(a0) 749324ced7SMarouene Boubakri LDR s4, REGOFF(4)(a0) 759324ced7SMarouene Boubakri LDR s5, REGOFF(5)(a0) 769324ced7SMarouene Boubakri LDR s6, REGOFF(6)(a0) 779324ced7SMarouene Boubakri LDR s7, REGOFF(7)(a0) 789324ced7SMarouene Boubakri LDR s8, REGOFF(8)(a0) 799324ced7SMarouene Boubakri LDR s9, REGOFF(9)(a0) 809324ced7SMarouene Boubakri LDR s10, REGOFF(10)(a0) 819324ced7SMarouene Boubakri LDR s11, REGOFF(11)(a0) 829324ced7SMarouene Boubakri LDR ra, REGOFF(12)(a0) 839324ced7SMarouene Boubakri LDR sp, REGOFF(13)(a0) 849324ced7SMarouene Boubakri seqz a0, a1 859324ced7SMarouene Boubakri add a0, a0, a1 869324ced7SMarouene Boubakri ret 879324ced7SMarouene BoubakriEND_FUNC longjmp 88