mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 23:34:52 +02:00
8074552: SafeFetch32 and SafeFetchN do not work in error handling
Reviewed-by: dholmes, goetz
This commit is contained in:
parent
cc658928be
commit
33690bd090
21 changed files with 255 additions and 32 deletions
|
@ -210,8 +210,36 @@ static void test_arraycopy_func(address func, int alignment) {
|
|||
assert(fbuffer[i] == v && fbuffer2[i] == v2, "shouldn't have copied anything");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// simple test for SafeFetch32
|
||||
static void test_safefetch32() {
|
||||
int dummy = 17;
|
||||
int* const p_invalid = (int*) get_segfault_address();
|
||||
int* const p_valid = &dummy;
|
||||
int result_invalid = SafeFetch32(p_invalid, 0xABC);
|
||||
assert(result_invalid == 0xABC, "SafeFetch32 error");
|
||||
int result_valid = SafeFetch32(p_valid, 0xABC);
|
||||
assert(result_valid == 17, "SafeFetch32 error");
|
||||
}
|
||||
|
||||
// simple test for SafeFetchN
|
||||
static void test_safefetchN() {
|
||||
#ifdef _LP64
|
||||
const intptr_t v1 = UCONST64(0xABCD00000000ABCD);
|
||||
const intptr_t v2 = UCONST64(0xDEFD00000000DEFD);
|
||||
#else
|
||||
const intptr_t v1 = 0xABCDABCD;
|
||||
const intptr_t v2 = 0xDEFDDEFD;
|
||||
#endif
|
||||
intptr_t dummy = v1;
|
||||
intptr_t* const p_invalid = (intptr_t*) get_segfault_address();
|
||||
intptr_t* const p_valid = &dummy;
|
||||
intptr_t result_invalid = SafeFetchN(p_invalid, v2);
|
||||
assert(result_invalid == v2, "SafeFetchN error");
|
||||
intptr_t result_valid = SafeFetchN(p_valid, v2);
|
||||
assert(result_valid == v1, "SafeFetchN error");
|
||||
}
|
||||
#endif
|
||||
|
||||
void StubRoutines::initialize2() {
|
||||
if (_code2 == NULL) {
|
||||
|
@ -300,6 +328,13 @@ void StubRoutines::initialize2() {
|
|||
test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::aligned_conjoint_words), sizeof(jlong));
|
||||
test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::aligned_disjoint_words), sizeof(jlong));
|
||||
|
||||
// test safefetch routines
|
||||
// Not on Windows 32bit until 8074860 is fixed
|
||||
#if ! (defined(_WIN32) && defined(_M_IX86))
|
||||
test_safefetch32();
|
||||
test_safefetchN();
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue