1*baa5161dSBalint Dobszay/* SPDX-License-Identifier: BSD-2-Clause */ 2*baa5161dSBalint Dobszay/* 3*baa5161dSBalint Dobszay * Copyright (c) 2014, STMicroelectronics International N.V. 4*baa5161dSBalint Dobszay * Copyright (c) 2015, Linaro Limited 5*baa5161dSBalint Dobszay * Copyright (c) 2020, Arm Limited 6*baa5161dSBalint Dobszay */ 7*baa5161dSBalint Dobszay 8*baa5161dSBalint Dobszay#include <asm.S> 9*baa5161dSBalint Dobszay 10*baa5161dSBalint Dobszay .section .text 11*baa5161dSBalint Dobszay .balign 4 12*baa5161dSBalint Dobszay .code 32 13*baa5161dSBalint Dobszay 14*baa5161dSBalint Dobszay .macro LDELF_SYSCALL name, scn, num_args 15*baa5161dSBalint Dobszay FUNC \name , : 16*baa5161dSBalint Dobszay 17*baa5161dSBalint Dobszay .if \num_args > 8 18*baa5161dSBalint Dobszay .error "Too many arguments for syscall" 19*baa5161dSBalint Dobszay .endif 20*baa5161dSBalint Dobszay 21*baa5161dSBalint Dobszay push {r5-r7, lr} 22*baa5161dSBalint DobszayUNWIND( .save {r5-r7, lr}) 23*baa5161dSBalint Dobszay mov r7, #(\scn) 24*baa5161dSBalint Dobszay 25*baa5161dSBalint Dobszay .if \num_args <= 4 26*baa5161dSBalint Dobszay @ No arguments passed on stack 27*baa5161dSBalint Dobszay mov r6, #0 28*baa5161dSBalint Dobszay .else 29*baa5161dSBalint Dobszay @ Tell number of arguments passed on the stack 30*baa5161dSBalint Dobszay mov r6, #(\num_args - 4) 31*baa5161dSBalint Dobszay @ Point just before the push (4 registers) above on the first argument 32*baa5161dSBalint Dobszay add r5, sp, #(4 * 4) 33*baa5161dSBalint Dobszay .endif 34*baa5161dSBalint Dobszay 35*baa5161dSBalint Dobszay svc #0 36*baa5161dSBalint Dobszay pop {r5-r7, pc} 37*baa5161dSBalint Dobszay END_FUNC \name 38*baa5161dSBalint Dobszay .endm 39*baa5161dSBalint Dobszay 40*baa5161dSBalint Dobszay FUNC _ldelf_panic, : 41*baa5161dSBalint Dobszay push {r0-r11, lr} 42*baa5161dSBalint DobszayUNWIND( .save {r0-r11, lr}) 43*baa5161dSBalint Dobszay mov lr, pc 44*baa5161dSBalint Dobszay push {lr} 45*baa5161dSBalint DobszayUNWIND( .save {lr}) 46*baa5161dSBalint Dobszay mov r1, sp 47*baa5161dSBalint Dobszay bl __ldelf_panic 48*baa5161dSBalint Dobszay /* Not reached */ 49*baa5161dSBalint Dobszay END_FUNC _ldelf_panic 50*baa5161dSBalint Dobszay 51*baa5161dSBalint Dobszay#include "syscalls_asm.S" 52