@@ -47,10 +47,12 @@ public class CodeBlob extends VMObject {
47
47
private static CIntField headerSizeField ;
48
48
private static CIntegerField contentOffsetField ;
49
49
private static CIntegerField codeOffsetField ;
50
+ private static CIntegerField codeEndOffsetField ;
50
51
private static CIntField frameCompleteOffsetField ;
51
- private static CIntegerField dataOffsetField ;
52
52
private static CIntegerField frameSizeField ;
53
53
private static AddressField oopMapsField ;
54
+ private static AddressField mutableDataField ;
55
+ private static CIntegerField mutableDataSizeField ;
54
56
55
57
public CodeBlob (Address addr ) {
56
58
super (addr );
@@ -68,9 +70,11 @@ private static void initialize(TypeDataBase db) {
68
70
contentOffsetField = type .getCIntegerField ("_content_offset" );
69
71
codeOffsetField = type .getCIntegerField ("_code_offset" );
70
72
frameCompleteOffsetField = new CIntField (type .getCIntegerField ("_frame_complete_offset" ), 0 );
71
- dataOffsetField = type .getCIntegerField ("_data_offset " );
73
+ codeEndOffsetField = type .getCIntegerField ("_code_end_offset " );
72
74
frameSizeField = type .getCIntegerField ("_frame_size" );
73
75
oopMapsField = type .getAddressField ("_oop_maps" );
76
+ mutableDataField = type .getAddressField ("_mutable_data" );
77
+ mutableDataSizeField = type .getCIntegerField ("_mutable_data_size" );
74
78
75
79
if (VM .getVM ().isServerCompiler ()) {
76
80
matcherInterpreterFramePointerReg =
@@ -92,15 +96,16 @@ public void update(Observable o, Object data) {
92
96
93
97
public Address contentBegin () { return headerBegin ().addOffsetTo (getContentOffset ()); }
94
98
95
- public Address contentEnd () { return headerBegin ().addOffsetTo (getDataOffset ()); }
99
+ public Address contentEnd () { return headerBegin ().addOffsetTo (getCodeEndOffset ()); }
96
100
97
101
public Address codeBegin () { return headerBegin ().addOffsetTo (getCodeOffset ()); }
98
102
99
- public Address codeEnd () { return headerBegin ().addOffsetTo (getDataOffset ()); }
103
+ public Address codeEnd () { return headerBegin ().addOffsetTo (getCodeEndOffset ()); }
100
104
101
- public Address dataBegin () { return headerBegin (). addOffsetTo ( getDataOffset () ); }
105
+ public Address dataBegin () { return mutableDataField . getValue ( addr ); }
102
106
103
- public Address dataEnd () { return headerBegin ().addOffsetTo (getSize ()); }
107
+ public Address dataEnd () { return (dataBegin () == null ) ? dataBegin () :
108
+ dataBegin ().addOffsetTo (mutableDataSizeField .getValue (addr )); }
104
109
105
110
// Offsets
106
111
public int getContentOffset () { return (int ) contentOffsetField .getValue (addr ); }
@@ -109,7 +114,7 @@ public void update(Observable o, Object data) {
109
114
110
115
public long getFrameCompleteOffset () { return frameCompleteOffsetField .getValue (addr ); }
111
116
112
- public int getDataOffset () { return (int ) dataOffsetField .getValue (addr ); }
117
+ public int getCodeEndOffset () { return (int ) codeEndOffsetField .getValue (addr ); }
113
118
114
119
// Sizes
115
120
public int getSize () { return (int ) sizeField .getValue (addr ); }
@@ -176,14 +181,15 @@ public NMethod asNMethodOrNull() {
176
181
public int getDataSize () { return (int ) dataEnd () .minus (dataBegin ()); }
177
182
178
183
// Containment
179
- public boolean blobContains (Address addr ) { return headerBegin () .lessThanOrEqual (addr ) && dataEnd () .greaterThan (addr ); }
184
+ public boolean blobContains (Address addr ) { return headerBegin () .lessThanOrEqual (addr ) && codeEnd () .greaterThan (addr ); }
180
185
181
186
// FIXME: add relocationContains
182
187
public boolean contentContains (Address addr ) { return contentBegin ().lessThanOrEqual (addr ) && contentEnd ().greaterThan (addr ); }
183
188
184
189
public boolean codeContains (Address addr ) { return codeBegin () .lessThanOrEqual (addr ) && codeEnd () .greaterThan (addr ); }
185
190
186
- public boolean dataContains (Address addr ) { return dataBegin () .lessThanOrEqual (addr ) && dataEnd () .greaterThan (addr ); }
191
+ public boolean dataContains (Address addr ) { return (dataBegin () == null ) ? false :
192
+ dataBegin () .lessThanOrEqual (addr ) && dataEnd () .greaterThan (addr ); }
187
193
188
194
public boolean contains (Address addr ) { return contentContains (addr ); }
189
195
0 commit comments