-
Notifications
You must be signed in to change notification settings - Fork 139
/
Copy pathVirtualGuardRuntime.spp
103 lines (89 loc) · 2.86 KB
/
VirtualGuardRuntime.spp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! Copyright IBM Corp. and others 2000
!!
!! This program and the accompanying materials are made available under
!! the terms of the Eclipse Public License 2.0 which accompanies this
!! distribution and is available at https://www.eclipse.org/legal/epl-2.0/
!! or the Apache License, Version 2.0 which accompanies this distribution
!! and is available at https://www.apache.org/licenses/LICENSE-2.0.
!!
!! This Source Code may also be made available under the following Secondary
!! Licenses when the conditions for such availability set forth in the
!! Eclipse Public License, v. 2.0 are satisfied: GNU General Public License,
!! version 2 with the GNU Classpath Exception [1] and GNU General Public
!! License, version 2 with the OpenJDK Assembly Exception [2].
!!
!! [1] https://www.gnu.org/software/classpath/license.html
!! [2] https://openjdk.org/legal/assembly-exception.html
!!
!! SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 OR GPL-2.0-only WITH OpenJDK-assembly-exception-1.0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include "p/runtime/ppcasmdefines.inc"
.file "VirtualGuard.s"
#ifdef AIXPPC
.globl ._patchVirtualGuard
.globl _patchVirtualGuard
#elif defined(LINUXPPC64)
.globl FUNC_LABEL(_patchVirtualGuard)
.type FUNC_LABEL(_patchVirtualGuard), @function
#elif defined(LINUX)
.globl _patchVirtualGuard
#endif
#ifdef AIXPPC
! .text section
.csect VGuard_TEXT{PR}
#elif defined(LINUXPPC64)
.section ".text"
.align 2
#endif
#ifdef AIXPPC
._patchVirtualGuard:
.function ._patchVirtualGuard,startproc._patchVirtualGuard,16,0,(endproc._patchVirtualGuard-startproc._patchVirtualGuard)
#elif defined(LINUXPPC64)
FUNC_LABEL(_patchVirtualGuard):
#else
_patchVirtualGuard:
#endif
! parameters
! r3 - location of nop
! r4 - address of jump destination / offset?
! r5 - TR_VM struct
! r6 - smpflag
startproc._patchVirtualGuard:
sub r4,r4,r3
lis r6,0x4800
rlwimi r6,r4,0,6,31
stw r6,0(r3)
dcbst 0,r3
sync
icbi 0,r3
sync
isync
blr
endproc._patchVirtualGuard:
! .data section
#ifdef AIXPPC
.toc
TOC_patchVirtualGuard:
.tc _patchVirtualGuard[TC],_patchVirtualGuard
.csect _patchVirtualGuard{DS}
ADDR ._patchVirtualGuard
ADDR TOC{TC0}
ADDR 0x00000000
! End csect _patchVirtualGuard{DS}
#elif defined(LINUXPPC64)
.section ".toc"
TOC_patchVirtualGuard:
.tc _patchVirtualGuard[TC],_patchVirtualGuard
#if !defined(__LITTLE_ENDIAN__)
.section ".opd","aw"
.align 3
.globl _patchVirtualGuard
.size _patchVirtualGuard,24
_patchVirtualGuard:
.quad ._patchVirtualGuard
.quad .TOC.@tocbase
.long 0x00000000
.long 0x00000000
#endif
#endif