-
Notifications
You must be signed in to change notification settings - Fork 751
/
Copy pathSCQueryFunctions.h
149 lines (134 loc) · 5.4 KB
/
SCQueryFunctions.h
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*******************************************************************************
* Copyright IBM Corp. and others 2001
*
* 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
*******************************************************************************/
#if !defined(J9SC_SCQUERYFUNCTIONS_H)
#define J9SC_SCQUERYFUNCTIONS_H
#include "j9.h"
#include "j9generated.h"
#include "SCAbstractAPI.h"
#ifdef __cplusplus
extern "C"
{
#endif
#if defined(__GNUC__)
/*
* Source files which include (directly or indirectly) this file
* but do not use the functions defined below may fail to compile unless the "unused" attribute
* is applied.
* Note that Microsoft compilers do not allow this attribute.
*/
#if !defined(J9VM_SHRTEST)
static VMINLINE BOOLEAN j9shr_Query_IsCacheFull(J9JavaVM *vm) __attribute__ ((__unused__));
static VMINLINE BOOLEAN j9shr_Query_IsAddressInCache(J9JavaVM *vm, void *address, UDATA length) __attribute__ ((__unused__));
static VMINLINE BOOLEAN j9shr_Query_IsAddressInReadWriteCache(J9JavaVM *vm, void *address, UDATA length) __attribute__ ((__unused__));
static VMINLINE void j9shr_Query_PopulatePreinitConfigDefaults(J9JavaVM *vm, J9SharedClassPreinitConfig *updatedWithDefaults) __attribute__ ((__unused__));
#endif /* !J9VM_SHRTEST */
#endif /* __GNUC__ */
static VMINLINE BOOLEAN
j9shr_Query_IsCacheFull(J9JavaVM *vm)
{
BOOLEAN retval = TRUE;
if (vm != NULL && vm->sharedClassConfig != NULL) {
SCAbstractAPI * sharedapi = (SCAbstractAPI *)(vm->sharedClassConfig->sharedAPIObject);
if (sharedapi != NULL && sharedapi->isCacheFull != NULL) {
retval = sharedapi->isCacheFull(vm);
}
}
return retval;
}
/**
* Following comment is copied from
* shrinit.cpp :: j9shr_isAddressInCache(J9JavaVM *vm, void *address, UDATA length, BOOLEAN checkReadWriteCacheOnly)
*
* This function checks whether the memory segment;
* which starts at the given address and with the given length,
* is in the range of any cache in the cacheDescriptorList.
*
* If it is in the range of any one of the caches in the cacheDescriptorList,
* then this functions returns true,
* otherwise it returns false.
*
* @param vm Currently running VM.
* @param address Beginning of the memory segment to be checked whether in any cache boundaries.
* @param Length of the memory segment.
* @return TRUE if memory segment is in any cache, FALSE otherwise.
*/
static VMINLINE BOOLEAN
j9shr_Query_IsAddressInCache(J9JavaVM *vm, void *address, UDATA length)
{
BOOLEAN retval = FALSE;
if ((NULL != vm) && (NULL != vm->sharedClassConfig)) {
SCAbstractAPI * sharedapi = (SCAbstractAPI *)(vm->sharedClassConfig->sharedAPIObject);
if ((NULL != sharedapi) && (NULL != sharedapi->isAddressInCache)) {
retval = sharedapi->isAddressInCache(vm, address, length, FALSE);
}
}
return retval;
}
/**
* Check if an address range in the readWrite (top layer) shared cache
*
* @param[in] vm The Java VM.
* @param[in] address The start of the address range
* @param[in] length The length of the address range
*
* @return TRUE if the address range is in the readWrite cache. False otherwise.
**/
static VMINLINE BOOLEAN
j9shr_Query_IsAddressInReadWriteCache(J9JavaVM *vm, void *address, UDATA length)
{
BOOLEAN retval = FALSE;
if ((NULL != vm) && (NULL != vm->sharedClassConfig)) {
SCAbstractAPI * sharedapi = (SCAbstractAPI *)(vm->sharedClassConfig->sharedAPIObject);
if ((NULL != sharedapi) && (NULL != sharedapi->isAddressInCache)) {
retval = sharedapi->isAddressInCache(vm, address, length, TRUE);
}
}
return retval;
}
#if !defined (J9VM_SHRTEST)
static VMINLINE void
j9shr_Query_PopulatePreinitConfigDefaults(J9JavaVM *vm, J9SharedClassPreinitConfig *updatedWithDefaults)
{
if ((NULL != vm) && (NULL != vm->sharedClassConfig)) {
SCAbstractAPI * sharedapi = (SCAbstractAPI *)(vm->sharedClassConfig->sharedAPIObject);
if ((NULL != sharedapi) && (NULL != sharedapi->populatePreinitConfigDefaults)) {
sharedapi->populatePreinitConfigDefaults(vm, updatedWithDefaults);
}
} else {
/*If shared classes is disabled all the values in 'updatedWithDefaults' are 0 bytes*/
memset(updatedWithDefaults,0,sizeof(J9SharedClassPreinitConfig));
}
}
#endif
typedef struct RomToRamEntry {
J9Class *ramClass;
} RomToRamEntry;
typedef struct RomToRamQueryEntry {
/* J9ROMClass address | ROM_TO_RAM_QUERY_TAG */
J9ROMClass *romClass;
} RomToRamQueryEntry;
/* Used to tell RomToRamQueryEntry apart from RomToRamEntry. */
#define ROM_TO_RAM_QUERY_TAG 0x1
#ifdef __cplusplus
}/*extern "C"*/
#endif
#endif /* J9SC_SCQUERYFUNCTIONS_H */