| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 int additional_comments = | 83 int additional_comments = |
| 84 (min_padding + comment_reloc_size - 1) / comment_reloc_size; | 84 (min_padding + comment_reloc_size - 1) / comment_reloc_size; |
| 85 // Actual padding size. | 85 // Actual padding size. |
| 86 int padding = additional_comments * comment_reloc_size; | 86 int padding = additional_comments * comment_reloc_size; |
| 87 // Allocate new relocation info and copy old relocation to the end | 87 // Allocate new relocation info and copy old relocation to the end |
| 88 // of the new relocation info array because relocation info is | 88 // of the new relocation info array because relocation info is |
| 89 // written and read backwards. | 89 // written and read backwards. |
| 90 Factory* factory = isolate->factory(); | 90 Factory* factory = isolate->factory(); |
| 91 Handle<ByteArray> new_reloc = | 91 Handle<ByteArray> new_reloc = |
| 92 factory->NewByteArray(reloc_length + padding, TENURED); | 92 factory->NewByteArray(reloc_length + padding, TENURED); |
| 93 memcpy(new_reloc->GetDataStartAddress() + padding, | 93 OS::MemCopy(new_reloc->GetDataStartAddress() + padding, |
| 94 code->relocation_info()->GetDataStartAddress(), | 94 code->relocation_info()->GetDataStartAddress(), |
| 95 reloc_length); | 95 reloc_length); |
| 96 // Create a relocation writer to write the comments in the padding | 96 // Create a relocation writer to write the comments in the padding |
| 97 // space. Use position 0 for everything to ensure short encoding. | 97 // space. Use position 0 for everything to ensure short encoding. |
| 98 RelocInfoWriter reloc_info_writer( | 98 RelocInfoWriter reloc_info_writer( |
| 99 new_reloc->GetDataStartAddress() + padding, 0); | 99 new_reloc->GetDataStartAddress() + padding, 0); |
| 100 intptr_t comment_string | 100 intptr_t comment_string |
| 101 = reinterpret_cast<intptr_t>(RelocInfo::kFillerCommentString); | 101 = reinterpret_cast<intptr_t>(RelocInfo::kFillerCommentString); |
| 102 RelocInfo rinfo(0, RelocInfo::COMMENT, comment_string, NULL); | 102 RelocInfo rinfo(0, RelocInfo::COMMENT, comment_string, NULL); |
| 103 for (int i = 0; i < additional_comments; ++i) { | 103 for (int i = 0; i < additional_comments; ++i) { |
| 104 #ifdef DEBUG | 104 #ifdef DEBUG |
| 105 byte* pos_before = reloc_info_writer.pos(); | 105 byte* pos_before = reloc_info_writer.pos(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 ASSERT(prev_call_address == NULL || | 170 ASSERT(prev_call_address == NULL || |
| 171 call_address >= prev_call_address + patch_size()); | 171 call_address >= prev_call_address + patch_size()); |
| 172 ASSERT(call_address + patch_size() <= code->instruction_end()); | 172 ASSERT(call_address + patch_size() <= code->instruction_end()); |
| 173 #ifdef DEBUG | 173 #ifdef DEBUG |
| 174 prev_call_address = call_address; | 174 prev_call_address = call_address; |
| 175 #endif | 175 #endif |
| 176 } | 176 } |
| 177 | 177 |
| 178 // Move the relocation info to the beginning of the byte array. | 178 // Move the relocation info to the beginning of the byte array. |
| 179 int new_reloc_size = reloc_end_address - reloc_info_writer.pos(); | 179 int new_reloc_size = reloc_end_address - reloc_info_writer.pos(); |
| 180 memmove(code->relocation_start(), reloc_info_writer.pos(), new_reloc_size); | 180 OS::MemMove( |
| 181 code->relocation_start(), reloc_info_writer.pos(), new_reloc_size); |
| 181 | 182 |
| 182 // The relocation info is in place, update the size. | 183 // The relocation info is in place, update the size. |
| 183 reloc_info->set_length(new_reloc_size); | 184 reloc_info->set_length(new_reloc_size); |
| 184 | 185 |
| 185 // Handle the junk part after the new relocation info. We will create | 186 // Handle the junk part after the new relocation info. We will create |
| 186 // a non-live object in the extra space at the end of the former reloc info. | 187 // a non-live object in the extra space at the end of the former reloc info. |
| 187 Address junk_address = reloc_info->address() + reloc_info->Size(); | 188 Address junk_address = reloc_info->address() + reloc_info->Size(); |
| 188 ASSERT(junk_address <= reloc_end_address); | 189 ASSERT(junk_address <= reloc_end_address); |
| 189 isolate->heap()->CreateFillerObjectAt(junk_address, | 190 isolate->heap()->CreateFillerObjectAt(junk_address, |
| 190 reloc_end_address - junk_address); | 191 reloc_end_address - junk_address); |
| (...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 922 } | 923 } |
| 923 __ bind(&done); | 924 __ bind(&done); |
| 924 } | 925 } |
| 925 | 926 |
| 926 #undef __ | 927 #undef __ |
| 927 | 928 |
| 928 | 929 |
| 929 } } // namespace v8::internal | 930 } } // namespace v8::internal |
| 930 | 931 |
| 931 #endif // V8_TARGET_ARCH_IA32 | 932 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |