85 DataLayout* dp_src = mdo->extra_data_base(); |
85 DataLayout* dp_src = mdo->extra_data_base(); |
86 DataLayout* end_src = mdo->extra_data_limit(); |
86 DataLayout* end_src = mdo->extra_data_limit(); |
87 DataLayout* dp_dst = extra_data_base(); |
87 DataLayout* dp_dst = extra_data_base(); |
88 for (;; dp_src = MethodData::next_extra(dp_src), dp_dst = MethodData::next_extra(dp_dst)) { |
88 for (;; dp_src = MethodData::next_extra(dp_src), dp_dst = MethodData::next_extra(dp_dst)) { |
89 assert(dp_src < end_src, "moved past end of extra data"); |
89 assert(dp_src < end_src, "moved past end of extra data"); |
90 assert(dp_src->tag() == dp_dst->tag(), err_msg("should be same tags %d != %d", dp_src->tag(), dp_dst->tag())); |
90 // New traps in the MDO can be added as we translate the copy so |
91 switch(dp_src->tag()) { |
91 // look at the entries in the copy. |
|
92 switch(dp_dst->tag()) { |
92 case DataLayout::speculative_trap_data_tag: { |
93 case DataLayout::speculative_trap_data_tag: { |
93 ciSpeculativeTrapData* data_dst = new ciSpeculativeTrapData(dp_dst); |
94 ciSpeculativeTrapData* data_dst = new ciSpeculativeTrapData(dp_dst); |
94 SpeculativeTrapData* data_src = new SpeculativeTrapData(dp_src); |
95 SpeculativeTrapData* data_src = new SpeculativeTrapData(dp_src); |
95 data_dst->translate_from(data_src); |
96 data_dst->translate_from(data_src); |
96 break; |
97 break; |
100 case DataLayout::no_tag: |
101 case DataLayout::no_tag: |
101 case DataLayout::arg_info_data_tag: |
102 case DataLayout::arg_info_data_tag: |
102 // An empty slot or ArgInfoData entry marks the end of the trap data |
103 // An empty slot or ArgInfoData entry marks the end of the trap data |
103 return; |
104 return; |
104 default: |
105 default: |
105 fatal(err_msg("bad tag = %d", dp_src->tag())); |
106 fatal(err_msg("bad tag = %d", dp_dst->tag())); |
106 } |
107 } |
107 } |
108 } |
108 } |
109 } |
109 |
110 |
110 void ciMethodData::load_data() { |
111 void ciMethodData::load_data() { |