OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/snapshot.h" | 5 #include "vm/snapshot.h" |
6 | 6 |
7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
8 #include "vm/bootstrap.h" | 8 #include "vm/bootstrap.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/dart.h" | 10 #include "vm/dart.h" |
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 if (((c >= 'a') && (c <= 'z')) || | 697 if (((c >= 'a') && (c <= 'z')) || |
698 ((c >= 'A') && (c <= 'Z')) || | 698 ((c >= 'A') && (c <= 'Z')) || |
699 ((c >= '0') && (c <= '9'))) { | 699 ((c >= '0') && (c <= '9'))) { |
700 continue; | 700 continue; |
701 } | 701 } |
702 *label = '_'; | 702 *label = '_'; |
703 } | 703 } |
704 } | 704 } |
705 | 705 |
706 | 706 |
707 void AssemblyInstructionsWriter::Write() { | 707 void AssemblyInstructionsWriter::Write(uint8_t* vmisolate_buffer, |
| 708 intptr_t vmisolate_length, |
| 709 uint8_t* isolate_buffer, |
| 710 intptr_t isolate_length) { |
708 Thread* thread = Thread::Current(); | 711 Thread* thread = Thread::Current(); |
709 Zone* zone = thread->zone(); | 712 Zone* zone = thread->zone(); |
710 NOT_IN_PRODUCT(TimelineDurationScope tds(thread, | 713 NOT_IN_PRODUCT(TimelineDurationScope tds(thread, |
711 Timeline::GetIsolateStream(), "WriteInstructions")); | 714 Timeline::GetIsolateStream(), "WriteInstructions")); |
712 | 715 |
713 // Handlify collected raw pointers as building the names below | 716 // Handlify collected raw pointers as building the names below |
714 // will allocate on the Dart heap. | 717 // will allocate on the Dart heap. |
715 for (intptr_t i = 0; i < instructions_.length(); i++) { | 718 for (intptr_t i = 0; i < instructions_.length(); i++) { |
716 InstructionsData& data = instructions_[i]; | 719 InstructionsData& data = instructions_[i]; |
717 data.insns_ = &Instructions::Handle(zone, data.raw_insns_); | 720 data.insns_ = &Instructions::Handle(zone, data.raw_insns_); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 marked_tags = RawObject::VMHeapObjectTag::update(true, marked_tags); | 845 marked_tags = RawObject::VMHeapObjectTag::update(true, marked_tags); |
843 marked_tags = RawObject::MarkBit::update(true, marked_tags); | 846 marked_tags = RawObject::MarkBit::update(true, marked_tags); |
844 WriteWordLiteralData(marked_tags); | 847 WriteWordLiteralData(marked_tags); |
845 start += sizeof(uword); | 848 start += sizeof(uword); |
846 for (uword* cursor = reinterpret_cast<uword*>(start); | 849 for (uword* cursor = reinterpret_cast<uword*>(start); |
847 cursor < reinterpret_cast<uword*>(end); | 850 cursor < reinterpret_cast<uword*>(end); |
848 cursor++) { | 851 cursor++) { |
849 WriteWordLiteralData(*cursor); | 852 WriteWordLiteralData(*cursor); |
850 } | 853 } |
851 } | 854 } |
| 855 |
| 856 |
| 857 assembly_stream_.Print(".globl _kVmIsolateSnapshot\n"); |
| 858 assembly_stream_.Print(".balign %" Pd ", 0\n", VirtualMemory::PageSize()); |
| 859 assembly_stream_.Print("_kVmIsolateSnapshot:\n"); |
| 860 for (intptr_t i = 0; i < vmisolate_length; i++) { |
| 861 assembly_stream_.Print(".byte %" Pd "\n", vmisolate_buffer[i]); |
| 862 } |
| 863 |
| 864 assembly_stream_.Print(".globl _kIsolateSnapshot\n"); |
| 865 assembly_stream_.Print(".balign %" Pd ", 0\n", VirtualMemory::PageSize()); |
| 866 assembly_stream_.Print("_kIsolateSnapshot:\n"); |
| 867 for (intptr_t i = 0; i < isolate_length; i++) { |
| 868 assembly_stream_.Print(".byte %" Pd "\n", isolate_buffer[i]); |
| 869 } |
852 } | 870 } |
853 | 871 |
854 | 872 |
855 void BlobInstructionsWriter::Write() { | 873 void BlobInstructionsWriter::Write(uint8_t* vmisolate_buffer, |
| 874 intptr_t vmisolate_len, |
| 875 uint8_t* isolate_buffer, |
| 876 intptr_t isolate_length) { |
856 Thread* thread = Thread::Current(); | 877 Thread* thread = Thread::Current(); |
857 Zone* zone = thread->zone(); | 878 Zone* zone = thread->zone(); |
858 NOT_IN_PRODUCT(TimelineDurationScope tds(thread, | 879 NOT_IN_PRODUCT(TimelineDurationScope tds(thread, |
859 Timeline::GetIsolateStream(), "WriteInstructions")); | 880 Timeline::GetIsolateStream(), "WriteInstructions")); |
860 | 881 |
861 // Handlify collected raw pointers as building the names below | 882 // Handlify collected raw pointers as building the names below |
862 // will allocate on the Dart heap. | 883 // will allocate on the Dart heap. |
863 for (intptr_t i = 0; i < instructions_.length(); i++) { | 884 for (intptr_t i = 0; i < instructions_.length(); i++) { |
864 InstructionsData& data = instructions_[i]; | 885 InstructionsData& data = instructions_[i]; |
865 data.insns_ = &Instructions::Handle(zone, data.raw_insns_); | 886 data.insns_ = &Instructions::Handle(zone, data.raw_insns_); |
(...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1935 if (setjmp(*jump.Set()) == 0) { | 1956 if (setjmp(*jump.Set()) == 0) { |
1936 NoSafepointScope no_safepoint; | 1957 NoSafepointScope no_safepoint; |
1937 WriteObject(obj.raw()); | 1958 WriteObject(obj.raw()); |
1938 } else { | 1959 } else { |
1939 ThrowException(exception_type(), exception_msg()); | 1960 ThrowException(exception_type(), exception_msg()); |
1940 } | 1961 } |
1941 } | 1962 } |
1942 | 1963 |
1943 | 1964 |
1944 } // namespace dart | 1965 } // namespace dart |
OLD | NEW |