1 /* |
1 /* |
2 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
28 |
28 |
29 class ZAddressTest : public ::testing::Test { |
29 class ZAddressTest : public ::testing::Test { |
30 protected: |
30 protected: |
31 static void is_good_bit(uintptr_t bit_mask) { |
31 static void is_good_bit(uintptr_t bit_mask) { |
32 // Setup |
32 // Setup |
33 uintptr_t mask_before = ZAddressGoodMask; |
33 ZAddress::initialize(); |
34 |
34 ZAddress::set_good_mask(bit_mask); |
35 ZAddressMasks::set_good_mask(bit_mask); |
|
36 |
35 |
37 // Test that a pointer with only the given bit is considered good. |
36 // Test that a pointer with only the given bit is considered good. |
38 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataMarked0), (bit_mask == ZAddressMetadataMarked0)); |
37 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataMarked0), (bit_mask == ZAddressMetadataMarked0)); |
39 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataMarked1), (bit_mask == ZAddressMetadataMarked1)); |
38 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataMarked1), (bit_mask == ZAddressMetadataMarked1)); |
40 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataRemapped), (bit_mask == ZAddressMetadataRemapped)); |
39 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataRemapped), (bit_mask == ZAddressMetadataRemapped)); |
44 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataMarked1 | 0x8), (bit_mask == ZAddressMetadataMarked1)); |
43 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataMarked1 | 0x8), (bit_mask == ZAddressMetadataMarked1)); |
45 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataRemapped | 0x8), (bit_mask == ZAddressMetadataRemapped)); |
44 EXPECT_EQ(ZAddress::is_good(ZAddressMetadataRemapped | 0x8), (bit_mask == ZAddressMetadataRemapped)); |
46 |
45 |
47 // Test that null is not considered good. |
46 // Test that null is not considered good. |
48 EXPECT_FALSE(ZAddress::is_good(0)); |
47 EXPECT_FALSE(ZAddress::is_good(0)); |
49 |
|
50 // Teardown |
|
51 ZAddressMasks::set_good_mask(mask_before); |
|
52 } |
48 } |
53 |
49 |
54 static void is_good_or_null_bit(uintptr_t bit_mask) { |
50 static void is_good_or_null_bit(uintptr_t bit_mask) { |
55 // Setup |
51 // Setup |
56 uintptr_t mask_before = ZAddressGoodMask; |
52 ZAddress::initialize(); |
57 |
53 ZAddress::set_good_mask(bit_mask); |
58 ZAddressMasks::set_good_mask(bit_mask); |
|
59 |
54 |
60 // Test that a pointer with only the given bit is considered good. |
55 // Test that a pointer with only the given bit is considered good. |
61 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataMarked0), (bit_mask == ZAddressMetadataMarked0)); |
56 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataMarked0), (bit_mask == ZAddressMetadataMarked0)); |
62 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataMarked1), (bit_mask == ZAddressMetadataMarked1)); |
57 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataMarked1), (bit_mask == ZAddressMetadataMarked1)); |
63 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataRemapped), (bit_mask == ZAddressMetadataRemapped)); |
58 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataRemapped), (bit_mask == ZAddressMetadataRemapped)); |
67 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataMarked1 | 0x8), (bit_mask == ZAddressMetadataMarked1)); |
62 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataMarked1 | 0x8), (bit_mask == ZAddressMetadataMarked1)); |
68 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataRemapped | 0x8), (bit_mask == ZAddressMetadataRemapped)); |
63 EXPECT_EQ(ZAddress::is_good_or_null(ZAddressMetadataRemapped | 0x8), (bit_mask == ZAddressMetadataRemapped)); |
69 |
64 |
70 // Test that null is considered good_or_null. |
65 // Test that null is considered good_or_null. |
71 EXPECT_TRUE(ZAddress::is_good_or_null(0)); |
66 EXPECT_TRUE(ZAddress::is_good_or_null(0)); |
72 |
|
73 // Teardown |
|
74 ZAddressMasks::set_good_mask(mask_before); |
|
75 } |
67 } |
76 |
68 |
77 static void finalizable() { |
69 static void finalizable() { |
78 // Setup |
70 // Setup |
79 ZAddressMasks::initialize(); |
71 ZAddress::initialize(); |
80 ZAddressMasks::flip_to_marked(); |
72 ZAddress::flip_to_marked(); |
81 |
73 |
82 // Test that a normal good pointer is good and weak good, but not finalizable |
74 // Test that a normal good pointer is good and weak good, but not finalizable |
83 const uintptr_t addr1 = ZAddress::good(1); |
75 const uintptr_t addr1 = ZAddress::good(1); |
84 EXPECT_FALSE(ZAddress::is_finalizable(addr1)); |
76 EXPECT_FALSE(ZAddress::is_finalizable(addr1)); |
85 EXPECT_TRUE(ZAddress::is_marked(addr1)); |
77 EXPECT_TRUE(ZAddress::is_marked(addr1)); |
98 EXPECT_TRUE(ZAddress::is_weak_good_or_null(addr2)); |
90 EXPECT_TRUE(ZAddress::is_weak_good_or_null(addr2)); |
99 EXPECT_FALSE(ZAddress::is_good(addr2)); |
91 EXPECT_FALSE(ZAddress::is_good(addr2)); |
100 EXPECT_FALSE(ZAddress::is_good_or_null(addr2)); |
92 EXPECT_FALSE(ZAddress::is_good_or_null(addr2)); |
101 |
93 |
102 // Flip to remapped and test that it's no longer weak good |
94 // Flip to remapped and test that it's no longer weak good |
103 ZAddressMasks::flip_to_remapped(); |
95 ZAddress::flip_to_remapped(); |
104 EXPECT_TRUE(ZAddress::is_finalizable(addr2)); |
96 EXPECT_TRUE(ZAddress::is_finalizable(addr2)); |
105 EXPECT_TRUE(ZAddress::is_marked(addr2)); |
97 EXPECT_TRUE(ZAddress::is_marked(addr2)); |
106 EXPECT_FALSE(ZAddress::is_remapped(addr2)); |
98 EXPECT_FALSE(ZAddress::is_remapped(addr2)); |
107 EXPECT_FALSE(ZAddress::is_weak_good(addr2)); |
99 EXPECT_FALSE(ZAddress::is_weak_good(addr2)); |
108 EXPECT_FALSE(ZAddress::is_weak_good_or_null(addr2)); |
100 EXPECT_FALSE(ZAddress::is_weak_good_or_null(addr2)); |