9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "code/codeCache.hpp"
27 #include "code/relocInfo.hpp"
28 #include "code/relocInfo_ext.hpp"
29 #include "gc/shared/cardTableModRefBS.hpp"
30 #include "gc/shared/collectedHeap.hpp"
31 #include "memory/universe.hpp"
32 #include "runtime/os.hpp"
33 #include "utilities/debug.hpp"
34 #ifdef COMPILER1
35 #include "c1/c1_globals.hpp"
36 #endif
37
38 address symbolic_Relocation::symbolic_value(symbolic_Relocation::symbolic_reference t) {
39 if (Universe::heap() == NULL) {
40 // the symbolic values are not needed so early
41 // (and most of them lead to errors if asked too early)
42 return NULL;
43 }
44 switch(t) {
45 case symbolic_Relocation::polling_page_reference: {
46 return os::get_polling_page();
47 }
48 case symbolic_Relocation::eden_top_reference: {
49 if (!Universe::heap()->supports_inline_contig_alloc()) {
50 return NULL;
51 }
52 return (address)Universe::heap()->top_addr();
53 }
54 case symbolic_Relocation::heap_end_reference: {
55 if (!Universe::heap()->supports_inline_contig_alloc()) {
56 return NULL;
57 }
58 return (address)Universe::heap()->end_addr();
59 }
60 case symbolic_Relocation::card_table_reference: {
61 BarrierSet* bs = Universe::heap()->barrier_set();
62 CardTableModRefBS* ct = (CardTableModRefBS*)bs;
63 return (address)ct->byte_map_base;
64 }
65 case symbolic_Relocation::mark_bits_reference: {
66 return (address)Universe::verify_mark_bits();
67 }
68 case symbolic_Relocation::mark_mask_reference: {
69 return (address)Universe::verify_mark_mask();
70 }
71 case symbolic_Relocation::oop_bits_reference: {
72 return (address)Universe::verify_oop_bits();
73 }
74 case symbolic_Relocation::oop_mask_reference: {
75 return (address)Universe::verify_oop_mask();
76 }
77 case symbolic_Relocation::debug_string_reference: {
78 return (address)"<Lost debug string>";
79 }
80 default: {
81 // missing declaration
82 ShouldNotReachHere();
83 return NULL;
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "code/codeCache.hpp"
27 #include "code/relocInfo.hpp"
28 #include "code/relocInfo_ext.hpp"
29 #include "gc/shared/cardTable.hpp"
30 #include "gc/shared/cardTableModRefBS.hpp"
31 #include "gc/shared/collectedHeap.hpp"
32 #include "memory/universe.hpp"
33 #include "runtime/os.hpp"
34 #include "utilities/debug.hpp"
35 #ifdef COMPILER1
36 #include "c1/c1_globals.hpp"
37 #endif
38
39 address symbolic_Relocation::symbolic_value(symbolic_Relocation::symbolic_reference t) {
40 if (Universe::heap() == NULL) {
41 // the symbolic values are not needed so early
42 // (and most of them lead to errors if asked too early)
43 return NULL;
44 }
45 switch(t) {
46 case symbolic_Relocation::polling_page_reference: {
47 return os::get_polling_page();
48 }
49 case symbolic_Relocation::eden_top_reference: {
50 if (!Universe::heap()->supports_inline_contig_alloc()) {
51 return NULL;
52 }
53 return (address)Universe::heap()->top_addr();
54 }
55 case symbolic_Relocation::heap_end_reference: {
56 if (!Universe::heap()->supports_inline_contig_alloc()) {
57 return NULL;
58 }
59 return (address)Universe::heap()->end_addr();
60 }
61 case symbolic_Relocation::card_table_reference: {
62 BarrierSet* bs = Universe::heap()->barrier_set();
63 CardTableModRefBS* ct = (CardTableModRefBS*)bs;
64 return (address)ct->card_table()->byte_map_base();
65 }
66 case symbolic_Relocation::mark_bits_reference: {
67 return (address)Universe::verify_mark_bits();
68 }
69 case symbolic_Relocation::mark_mask_reference: {
70 return (address)Universe::verify_mark_mask();
71 }
72 case symbolic_Relocation::oop_bits_reference: {
73 return (address)Universe::verify_oop_bits();
74 }
75 case symbolic_Relocation::oop_mask_reference: {
76 return (address)Universe::verify_oop_mask();
77 }
78 case symbolic_Relocation::debug_string_reference: {
79 return (address)"<Lost debug string>";
80 }
81 default: {
82 // missing declaration
83 ShouldNotReachHere();
84 return NULL;
|