Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/gtest/metaspace/test_allocationGuard.cpp
41144 views
1
/*
2
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3
* Copyright (c) 2020 SAP SE. All rights reserved.
4
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
*
6
* This code is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License version 2 only, as
8
* published by the Free Software Foundation.
9
*
10
* This code is distributed in the hope that it will be useful, but WITHOUT
11
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13
* version 2 for more details (a copy is included in the LICENSE file that
14
* accompanied this code).
15
*
16
* You should have received a copy of the GNU General Public License version
17
* 2 along with this work; if not, write to the Free Software Foundation,
18
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19
*
20
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21
* or visit www.oracle.com if you need additional information or have any
22
* questions.
23
*
24
*/
25
26
#include "precompiled.hpp"
27
#include "memory/metaspace/metaspaceArena.hpp"
28
#include "memory/metaspace/metaspaceSettings.hpp"
29
#include "memory/metaspace/testHelpers.hpp"
30
#include "utilities/debug.hpp"
31
#include "utilities/ostream.hpp"
32
33
//#define LOG_PLEASE
34
#include "metaspaceGtestCommon.hpp"
35
#include "metaspaceGtestContexts.hpp"
36
37
#ifdef ASSERT
38
39
using metaspace::MetaspaceArena;
40
using metaspace::MetaspaceTestArena;
41
using metaspace::Settings;
42
43
// Test that overwriting memory triggers an assert if allocation guards are enabled.
44
// Note: We use TEST_VM_ASSERT_MSG. However, an assert is only triggered if allocation
45
// guards are enabled; if guards are disabled for the gtests, this test would fail.
46
// So for that case, we trigger a fake assert.
47
TEST_VM_ASSERT_MSG(metaspace, test_overwriter, ".*failed: Corrupt block") {
48
49
if (Settings::use_allocation_guard()) {
50
MetaspaceGtestContext context;
51
MetaspaceTestArena* arena = context.create_arena(Metaspace::StandardMetaspaceType);
52
// We allocate two blocks. We then write over the end of the first block, which
53
// should corrupt the eyecatcher at the start of the second block.
54
// Note: there is of course no guarantee that blocks allocated sequentially are neighbors;
55
// but in this case (clean standard-sized test arena and very small allocations) it can
56
// be safely assumed).
57
MetaWord* p1 = arena->allocate(8);
58
MetaWord* p2 = arena->allocate(2);
59
p1[8] = (MetaWord)0x9345; // Overwriter
60
// Now we delete the arena (as happens during class unloading); this will check all
61
// block canaries and should trigger an assert (see MetaspaceArena::verify_allocation_guards()).
62
tty->print_cr("Death test, please ignore the following \"Corrupt block\" printout.");
63
delete arena;
64
} else {
65
assert(false, "Corrupt block fake message to satisfy tests");
66
}
67
68
}
69
70
#endif // ASSERT
71
72