test/hotspot/gtest/gc/z/test_zAddress.cpp
changeset 54617 24f6b0e413a0
parent 50975 b833992fa8fa
equal deleted inserted replaced
54616:3ab77d8dc60a 54617:24f6b0e413a0
     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));