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

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

Issue 1808553002: Precompilation: don't include an object header for instructions in the text section. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 months 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
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef VM_OBJECT_H_ 5 #ifndef VM_OBJECT_H_
6 #define VM_OBJECT_H_ 6 #define VM_OBJECT_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 3840 matching lines...) Expand 10 before | Expand all | Expand 10 after
3851 friend class Object; 3851 friend class Object;
3852 friend class RawObjectPool; 3852 friend class RawObjectPool;
3853 }; 3853 };
3854 3854
3855 3855
3856 class Instructions : public Object { 3856 class Instructions : public Object {
3857 public: 3857 public:
3858 intptr_t size() const { return raw_ptr()->size_; } // Excludes HeaderSize(). 3858 intptr_t size() const { return raw_ptr()->size_; } // Excludes HeaderSize().
3859 3859
3860 uword EntryPoint() const { 3860 uword EntryPoint() const {
3861 return reinterpret_cast<uword>(raw_ptr()) + HeaderSize(); 3861 return EntryPoint(raw());
3862 }
3863 static uword EntryPoint(RawInstructions* instr) {
3864 return reinterpret_cast<uword>(instr->ptr()) + HeaderSize();
3862 } 3865 }
3863 3866
3864 static const intptr_t kMaxElements = (kMaxInt32 - 3867 static const intptr_t kMaxElements = (kMaxInt32 -
3865 (sizeof(RawInstructions) + 3868 (sizeof(RawInstructions) +
3866 sizeof(RawObject) + 3869 sizeof(RawObject) +
3867 (2 * OS::kMaxPreferredCodeAlignment))); 3870 (2 * OS::kMaxPreferredCodeAlignment)));
3868 3871
3869 static intptr_t InstanceSize() { 3872 static intptr_t InstanceSize() {
3870 ASSERT(sizeof(RawInstructions) == 3873 ASSERT(sizeof(RawInstructions) ==
3871 OFFSET_OF_RETURNED_VALUE(RawInstructions, data)); 3874 OFFSET_OF_RETURNED_VALUE(RawInstructions, data));
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
4318 private: 4321 private:
4319 static void UnpackInto(const Array& table, 4322 static void UnpackInto(const Array& table,
4320 const TypedData& packed, 4323 const TypedData& packed,
4321 GrowableArray<DeoptInstr*>* instructions, 4324 GrowableArray<DeoptInstr*>* instructions,
4322 intptr_t length); 4325 intptr_t length);
4323 }; 4326 };
4324 4327
4325 4328
4326 class Code : public Object { 4329 class Code : public Object {
4327 public: 4330 public:
4328 RawInstructions* active_instructions() const { 4331 uword active_entry_point() const { return raw_ptr()->entry_point_; }
4329 return raw_ptr()->active_instructions_;
4330 }
4331 4332
4332 RawInstructions* instructions() const { return raw_ptr()->instructions_; } 4333 RawInstructions* instructions() const { return raw_ptr()->instructions_; }
4333 4334
4334 static intptr_t saved_instructions_offset() { 4335 static intptr_t saved_instructions_offset() {
4335 return OFFSET_OF(RawCode, instructions_); 4336 return OFFSET_OF(RawCode, instructions_);
4336 } 4337 }
4337 4338
4338 static intptr_t entry_point_offset() { 4339 static intptr_t entry_point_offset() {
4339 return OFFSET_OF(RawCode, entry_point_); 4340 return OFFSET_OF(RawCode, entry_point_);
4340 } 4341 }
4341 4342
4342 RawObjectPool* object_pool() const { return raw_ptr()->object_pool_; } 4343 RawObjectPool* object_pool() const { return raw_ptr()->object_pool_; }
4343 static intptr_t object_pool_offset() { 4344 static intptr_t object_pool_offset() {
4344 return OFFSET_OF(RawCode, object_pool_); 4345 return OFFSET_OF(RawCode, object_pool_);
4345 } 4346 }
4346 4347
4347 intptr_t pointer_offsets_length() const { 4348 intptr_t pointer_offsets_length() const {
4348 return PtrOffBits::decode(raw_ptr()->state_bits_); 4349 return PtrOffBits::decode(raw_ptr()->state_bits_);
4349 } 4350 }
4350 4351
4351 bool is_optimized() const { 4352 bool is_optimized() const {
4352 return OptimizedBit::decode(raw_ptr()->state_bits_); 4353 return OptimizedBit::decode(raw_ptr()->state_bits_);
4353 } 4354 }
4354 void set_is_optimized(bool value) const; 4355 void set_is_optimized(bool value) const;
4355 bool is_alive() const { 4356 bool is_alive() const {
4356 return AliveBit::decode(raw_ptr()->state_bits_); 4357 return AliveBit::decode(raw_ptr()->state_bits_);
4357 } 4358 }
4358 void set_is_alive(bool value) const; 4359 void set_is_alive(bool value) const;
4359 4360
4360 uword EntryPoint() const { 4361 uword EntryPoint() const;
4361 return Instructions::Handle(instructions()).EntryPoint(); 4362 intptr_t Size() const;
4362 } 4363
4363 intptr_t Size() const {
4364 const Instructions& instr = Instructions::Handle(instructions());
4365 return instr.size();
4366 }
4367 RawObjectPool* GetObjectPool() const { 4364 RawObjectPool* GetObjectPool() const {
4368 return object_pool(); 4365 return object_pool();
4369 } 4366 }
4370 bool ContainsInstructionAt(uword addr) const { 4367 bool ContainsInstructionAt(uword addr) const {
4371 const Instructions& instr = Instructions::Handle(instructions()); 4368 const uword offset = addr - EntryPoint();
4372 const uword offset = addr - instr.EntryPoint(); 4369 return offset < static_cast<uword>(Size());
4373 return offset < static_cast<uword>(instr.size());
4374 } 4370 }
4375 4371
4376 // Returns true if there is a debugger breakpoint set in this code object. 4372 // Returns true if there is a debugger breakpoint set in this code object.
4377 bool HasBreakpoint() const; 4373 bool HasBreakpoint() const;
4378 4374
4379 RawPcDescriptors* pc_descriptors() const { 4375 RawPcDescriptors* pc_descriptors() const {
4380 return raw_ptr()->pc_descriptors_; 4376 return raw_ptr()->pc_descriptors_;
4381 } 4377 }
4382 void set_pc_descriptors(const PcDescriptors& descriptors) const { 4378 void set_pc_descriptors(const PcDescriptors& descriptors) const {
4383 ASSERT(descriptors.IsOld()); 4379 ASSERT(descriptors.IsOld());
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
4602 bool IsStubCode() const; 4598 bool IsStubCode() const;
4603 bool IsFunctionCode() const; 4599 bool IsFunctionCode() const;
4604 4600
4605 void DisableDartCode() const; 4601 void DisableDartCode() const;
4606 4602
4607 void DisableStubCode() const; 4603 void DisableStubCode() const;
4608 4604
4609 void Enable() const { 4605 void Enable() const {
4610 if (!IsDisabled()) return; 4606 if (!IsDisabled()) return;
4611 ASSERT(Thread::Current()->IsMutatorThread()); 4607 ASSERT(Thread::Current()->IsMutatorThread());
4612 ASSERT(instructions() != active_instructions());
4613 SetActiveInstructions(instructions()); 4608 SetActiveInstructions(instructions());
4614 } 4609 }
4615 4610
4616 bool IsDisabled() const { 4611 bool IsDisabled() const {
4617 return instructions() != active_instructions(); 4612 return active_entry_point() != EntryPoint();
4618 } 4613 }
4619 4614
4620 private: 4615 private:
4621 void set_state_bits(intptr_t bits) const; 4616 void set_state_bits(intptr_t bits) const;
4622 4617
4623 void set_object_pool(RawObjectPool* object_pool) const { 4618 void set_object_pool(RawObjectPool* object_pool) const {
4624 StorePointer(&raw_ptr()->object_pool_, object_pool); 4619 StorePointer(&raw_ptr()->object_pool_, object_pool);
4625 } 4620 }
4626 4621
4627 friend class RawObject; // For RawObject::SizeFromClass(). 4622 friend class RawObject; // For RawObject::SizeFromClass().
(...skipping 3792 matching lines...) Expand 10 before | Expand all | Expand 10 after
8420 8415
8421 8416
8422 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 8417 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
8423 intptr_t index) { 8418 intptr_t index) {
8424 return array.At((index * kEntryLength) + kTargetFunctionIndex); 8419 return array.At((index * kEntryLength) + kTargetFunctionIndex);
8425 } 8420 }
8426 8421
8427 } // namespace dart 8422 } // namespace dart
8428 8423
8429 #endif // VM_OBJECT_H_ 8424 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698