Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: runtime/vm/stub_code.h

Issue 2583673002: When creating a JIT app snapshot, don't recreate the VM isolate snapshot. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 #ifndef RUNTIME_VM_STUB_CODE_H_ 5 #ifndef RUNTIME_VM_STUB_CODE_H_
6 #define RUNTIME_VM_STUB_CODE_H_ 6 #define RUNTIME_VM_STUB_CODE_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 10
11 namespace dart { 11 namespace dart {
12 12
13 // Forward declarations. 13 // Forward declarations.
14 class Code; 14 class Code;
15 class Isolate; 15 class Isolate;
16 class ObjectPointerVisitor; 16 class ObjectPointerVisitor;
17 class RawCode; 17 class RawCode;
18 class SnapshotReader; 18 class SnapshotReader;
19 class SnapshotWriter; 19 class SnapshotWriter;
20 class Serializer;
21 class Deserializer;
22 20
23 // List of stubs created in the VM isolate, these stubs are shared by different 21 // List of stubs created in the VM isolate, these stubs are shared by different
24 // isolates running in this dart process. 22 // isolates running in this dart process.
25 #if !defined(TARGET_ARCH_DBC) 23 #if !defined(TARGET_ARCH_DBC)
26 #define VM_STUB_CODE_LIST(V) \ 24 #define VM_STUB_CODE_LIST(V) \
27 V(GetStackPointer) \ 25 V(GetStackPointer) \
28 V(JumpToFrame) \ 26 V(JumpToFrame) \
29 V(RunExceptionHandler) \ 27 V(RunExceptionHandler) \
30 V(DeoptForRewind) \ 28 V(DeoptForRewind) \
31 V(UpdateStoreBuffer) \ 29 V(UpdateStoreBuffer) \
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 }; 116 };
119 117
120 118
121 // class StubCode is used to maintain the lifecycle of stubs. 119 // class StubCode is used to maintain the lifecycle of stubs.
122 class StubCode : public AllStatic { 120 class StubCode : public AllStatic {
123 public: 121 public:
124 // Generate all stubs which are shared across all isolates, this is done 122 // Generate all stubs which are shared across all isolates, this is done
125 // only once and the stub code resides in the vm_isolate heap. 123 // only once and the stub code resides in the vm_isolate heap.
126 static void InitOnce(); 124 static void InitOnce();
127 125
128 static void Push(Serializer* serializer);
129 static void WriteRef(Serializer* serializer);
130 static void ReadRef(Deserializer* deserializer);
131
132 // Generate all stubs which are generated on a per isolate basis as they 126 // Generate all stubs which are generated on a per isolate basis as they
133 // have embedded objects which are isolate specific. 127 // have embedded objects which are isolate specific.
134 static void Init(Isolate* isolate); 128 static void Init(Isolate* isolate);
135 129
136 static void VisitObjectPointers(ObjectPointerVisitor* visitor); 130 static void VisitObjectPointers(ObjectPointerVisitor* visitor);
137 131
138 // Returns true if stub code has been initialized. 132 // Returns true if stub code has been initialized.
139 static bool HasBeenInitialized(); 133 static bool HasBeenInitialized();
140 134
141 // Check if specified pc is in the dart invocation stub used for 135 // Check if specified pc is in the dart invocation stub used for
142 // transitioning into dart code. 136 // transitioning into dart code.
143 static bool InInvocationStub(uword pc); 137 static bool InInvocationStub(uword pc);
144 138
145 // Check if the specified pc is in the jump to frame stub. 139 // Check if the specified pc is in the jump to frame stub.
146 static bool InJumpToFrameStub(uword pc); 140 static bool InJumpToFrameStub(uword pc);
147 141
148 // Returns NULL if no stub found. 142 // Returns NULL if no stub found.
149 static const char* NameOfStub(uword entry_point); 143 static const char* NameOfStub(uword entry_point);
150 144
151 // Define the shared stub code accessors. 145 // Define the shared stub code accessors.
152 #define STUB_CODE_ACCESSOR(name) \ 146 #define STUB_CODE_ACCESSOR(name) \
153 static const StubEntry* name##_entry() { return name##_entry_; } \ 147 static const StubEntry* name##_entry() { return entries_[k##name##Index]; } \
154 static intptr_t name##Size() { return name##_entry()->Size(); } 148 static intptr_t name##Size() { return name##_entry()->Size(); }
155 VM_STUB_CODE_LIST(STUB_CODE_ACCESSOR); 149 VM_STUB_CODE_LIST(STUB_CODE_ACCESSOR);
156 #undef STUB_CODE_ACCESSOR 150 #undef STUB_CODE_ACCESSOR
157 151
158 static RawCode* GetAllocationStubForClass(const Class& cls); 152 static RawCode* GetAllocationStubForClass(const Class& cls);
159 153
160 static const StubEntry* UnoptimizedStaticCallEntry(intptr_t num_args_tested); 154 static const StubEntry* UnoptimizedStaticCallEntry(intptr_t num_args_tested);
161 155
162 static const intptr_t kNoInstantiator = 0; 156 static const intptr_t kNoInstantiator = 0;
163 157
158 static StubEntry* EntryAt(intptr_t index) { return entries_[index]; }
159 static void EntryAtPut(intptr_t index, StubEntry* entry) {
160 entries_[index] = entry;
161 }
162 static intptr_t NumEntries() { return kNumStubEntries; }
163
164 private: 164 private:
165 friend class MegamorphicCacheTable; 165 friend class MegamorphicCacheTable;
166 166
167 static const intptr_t kStubCodeSize = 4 * KB; 167 static const intptr_t kStubCodeSize = 4 * KB;
168 168
169 #define STUB_CODE_GENERATE(name) \ 169 #define STUB_CODE_GENERATE(name) \
170 static void Generate##name##Stub(Assembler* assembler); 170 static void Generate##name##Stub(Assembler* assembler);
171 VM_STUB_CODE_LIST(STUB_CODE_GENERATE); 171 VM_STUB_CODE_LIST(STUB_CODE_GENERATE)
172 #undef STUB_CODE_GENERATE 172 #undef STUB_CODE_GENERATE
173 173
174 #define STUB_CODE_ENTRY(name) static StubEntry* name##_entry_; 174 enum {
175 VM_STUB_CODE_LIST(STUB_CODE_ENTRY); 175 #define STUB_CODE_ENTRY(name) k##name##Index,
176 VM_STUB_CODE_LIST(STUB_CODE_ENTRY)
176 #undef STUB_CODE_ENTRY 177 #undef STUB_CODE_ENTRY
178 kNumStubEntries
179 };
180
181 static StubEntry* entries_[kNumStubEntries];
177 182
178 // Generate the stub and finalize the generated code into the stub 183 // Generate the stub and finalize the generated code into the stub
179 // code executable area. 184 // code executable area.
180 static RawCode* Generate(const char* name, 185 static RawCode* Generate(const char* name,
181 void (*GenerateStub)(Assembler* assembler)); 186 void (*GenerateStub)(Assembler* assembler));
182 187
183 static void GenerateMegamorphicMissStub(Assembler* assembler); 188 static void GenerateMegamorphicMissStub(Assembler* assembler);
184 static void GenerateAllocationStubForClass(Assembler* assembler, 189 static void GenerateAllocationStubForClass(Assembler* assembler,
185 const Class& cls); 190 const Class& cls);
186 static void GenerateNArgsCheckInlineCacheStub( 191 static void GenerateNArgsCheckInlineCacheStub(
(...skipping 12 matching lines...) Expand all
199 204
200 // Zap value used to indicate unused CODE_REG in deopt. 205 // Zap value used to indicate unused CODE_REG in deopt.
201 static const uword kZapCodeReg = 0xf1f1f1f1; 206 static const uword kZapCodeReg = 0xf1f1f1f1;
202 207
203 // Zap value used to indicate unused return address in deopt. 208 // Zap value used to indicate unused return address in deopt.
204 static const uword kZapReturnAddress = 0xe1e1e1e1; 209 static const uword kZapReturnAddress = 0xe1e1e1e1;
205 210
206 } // namespace dart 211 } // namespace dart
207 212
208 #endif // RUNTIME_VM_STUB_CODE_H_ 213 #endif // RUNTIME_VM_STUB_CODE_H_
OLDNEW
« no previous file with comments | « runtime/vm/pages.cc ('k') | runtime/vm/stub_code.cc » ('j') | runtime/vm/stub_code.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698