diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/edk2/ArmPkg/Library/ArmSvcLib/Arm | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/edk2/ArmPkg/Library/ArmSvcLib/Arm')
-rw-r--r-- | roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S | 36 | ||||
-rw-r--r-- | roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm | 36 |
2 files changed, 72 insertions, 0 deletions
diff --git a/roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S b/roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S new file mode 100644 index 000000000..e81eb88f2 --- /dev/null +++ b/roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S @@ -0,0 +1,36 @@ +//
+// Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+//
+
+.text
+.align 3
+
+GCC_ASM_EXPORT(ArmCallSvc)
+
+ASM_PFX(ArmCallSvc):
+ // r0 will be popped just after the SVC call
+ push {r0, r4-r8}
+
+ // Load the SVC arguments values into the appropriate registers
+ ldm r0, {r0-r7}
+
+ svc #0
+ // Prevent speculative execution beyond svc instruction
+ dsb nsh
+ isb
+
+ // Load the ARM_SVC_ARGS structure address from the stack into r8
+ ldr r8, [sp]
+
+ // Load the SVC returned values into the appropriate registers
+ // A SVC call can return up to 4 values - we do not need to store back r4-r7.
+ stm r8, {r0-r3}
+
+ mov r0, r8
+
+ // Restore the registers r4-r8
+ pop {r1, r4-r8}
+ bx lr
diff --git a/roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm b/roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm new file mode 100644 index 000000000..d1751488b --- /dev/null +++ b/roms/edk2/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm @@ -0,0 +1,36 @@ +//
+// Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+//
+
+
+ INCLUDE AsmMacroExport.inc
+
+ RVCT_ASM_EXPORT ArmCallSvc
+ // r0 will be popped just after the SVC call
+ push {r0, r4-r8}
+
+ // Load the SVC arguments values into the appropriate registers
+ ldm r0, {r0-r7}
+
+ svc #0
+ // Prevent speculative execution beyond svc instruction
+ dsb nsh
+ isb
+
+ // Load the ARM_SVC_ARGS structure address from the stack into r8
+ ldr r8, [sp]
+
+ // Load the SVC returned values into the appropriate registers
+ // A SVC call can return up to 4 values - we do not need to store back r4-r7.
+ stm r8, {r0-r3}
+
+ mov r0, r8
+
+ // Restore the registers r4-r8
+ pop {r1, r4-r8}
+ bx lr
+
+ END
|