OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 | 499 |
500 // Is the pointer this relocation info refers to coded like a plain pointer | 500 // Is the pointer this relocation info refers to coded like a plain pointer |
501 // or is it strange in some way (e.g. relative or patched into a series of | 501 // or is it strange in some way (e.g. relative or patched into a series of |
502 // instructions). | 502 // instructions). |
503 bool IsCodedSpecially(); | 503 bool IsCodedSpecially(); |
504 | 504 |
505 // If true, the pointer this relocation info refers to is an entry in the | 505 // If true, the pointer this relocation info refers to is an entry in the |
506 // constant pool, otherwise the pointer is embedded in the instruction stream. | 506 // constant pool, otherwise the pointer is embedded in the instruction stream. |
507 bool IsInConstantPool(); | 507 bool IsInConstantPool(); |
508 | 508 |
| 509 static bool DebugBreakIsConstructCall(intptr_t data); |
| 510 static bool DebugBreakIsCall(intptr_t data); |
| 511 static int DebugBreakCallArgumentsCount(intptr_t data); |
| 512 |
509 // Read/modify the code target in the branch/call instruction | 513 // Read/modify the code target in the branch/call instruction |
510 // this relocation applies to; | 514 // this relocation applies to; |
511 // can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) | 515 // can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) |
512 INLINE(Address target_address()); | 516 INLINE(Address target_address()); |
513 INLINE(void set_target_address(Address target, | 517 INLINE(void set_target_address(Address target, |
514 WriteBarrierMode write_barrier_mode = | 518 WriteBarrierMode write_barrier_mode = |
515 UPDATE_WRITE_BARRIER, | 519 UPDATE_WRITE_BARRIER, |
516 ICacheFlushMode icache_flush_mode = | 520 ICacheFlushMode icache_flush_mode = |
517 FLUSH_ICACHE_IF_NEEDED)); | 521 FLUSH_ICACHE_IF_NEEDED)); |
518 INLINE(Object* target_object()); | 522 INLINE(Object* target_object()); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
616 #endif // ENABLE_DISASSEMBLER | 620 #endif // ENABLE_DISASSEMBLER |
617 #ifdef VERIFY_HEAP | 621 #ifdef VERIFY_HEAP |
618 void Verify(Isolate* isolate); | 622 void Verify(Isolate* isolate); |
619 #endif | 623 #endif |
620 | 624 |
621 static const int kCodeTargetMask = (1 << (LAST_CODE_ENUM + 1)) - 1; | 625 static const int kCodeTargetMask = (1 << (LAST_CODE_ENUM + 1)) - 1; |
622 static const int kPositionMask = 1 << POSITION | 1 << STATEMENT_POSITION; | 626 static const int kPositionMask = 1 << POSITION | 1 << STATEMENT_POSITION; |
623 static const int kDataMask = | 627 static const int kDataMask = |
624 (1 << CODE_TARGET_WITH_ID) | kPositionMask | (1 << COMMENT); | 628 (1 << CODE_TARGET_WITH_ID) | kPositionMask | (1 << COMMENT); |
625 static const int kApplyMask; // Modes affected by apply. Depends on arch. | 629 static const int kApplyMask; // Modes affected by apply. Depends on arch. |
| 630 static const int kDebugBreakNonCallSentinel = -2; |
| 631 static const int kDebugBreakConstructCallSentinel = -1; |
626 | 632 |
627 private: | 633 private: |
628 // On ARM, note that pc_ is the address of the constant pool entry | 634 // On ARM, note that pc_ is the address of the constant pool entry |
629 // to be relocated and not the address of the instruction | 635 // to be relocated and not the address of the instruction |
630 // referencing the constant pool entry (except when rmode_ == | 636 // referencing the constant pool entry (except when rmode_ == |
631 // comment). | 637 // comment). |
632 byte* pc_; | 638 byte* pc_; |
633 Mode rmode_; | 639 Mode rmode_; |
634 intptr_t data_; | 640 intptr_t data_; |
635 Code* host_; | 641 Code* host_; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 // ExtraTag, VariableLengthPCJump, ExtraTag, pc_delta, ExtraTag, data_delta. | 689 // ExtraTag, VariableLengthPCJump, ExtraTag, pc_delta, ExtraTag, data_delta. |
684 // On ia32 and arm this is 1 + 4 + 1 + 1 + 1 + 4 = 12. | 690 // On ia32 and arm this is 1 + 4 + 1 + 1 + 1 + 4 = 12. |
685 // On x64 this is 1 + 4 + 1 + 1 + 1 + 8 == 16; | 691 // On x64 this is 1 + 4 + 1 + 1 + 1 + 8 == 16; |
686 // Here we use the maximum of the two. | 692 // Here we use the maximum of the two. |
687 static const int kMaxSize = 16; | 693 static const int kMaxSize = 16; |
688 | 694 |
689 private: | 695 private: |
690 inline uint32_t WriteVariableLengthPCJump(uint32_t pc_delta); | 696 inline uint32_t WriteVariableLengthPCJump(uint32_t pc_delta); |
691 inline void WriteTaggedPC(uint32_t pc_delta, int tag); | 697 inline void WriteTaggedPC(uint32_t pc_delta, int tag); |
692 inline void WriteExtraTaggedPC(uint32_t pc_delta, int extra_tag); | 698 inline void WriteExtraTaggedPC(uint32_t pc_delta, int extra_tag); |
| 699 inline void WriteInt(int number); |
| 700 inline void WriteDebugBreakSlotData(int data); |
693 inline void WriteExtraTaggedIntData(int data_delta, int top_tag); | 701 inline void WriteExtraTaggedIntData(int data_delta, int top_tag); |
694 inline void WriteExtraTaggedPoolData(int data, int pool_type); | 702 inline void WriteExtraTaggedPoolData(int data, int pool_type); |
695 inline void WriteExtraTaggedData(intptr_t data_delta, int top_tag); | 703 inline void WriteExtraTaggedData(intptr_t data_delta, int top_tag); |
696 inline void WriteTaggedData(intptr_t data_delta, int tag); | 704 inline void WriteTaggedData(intptr_t data_delta, int tag); |
697 inline void WriteExtraTag(int extra_tag, int top_tag); | 705 inline void WriteExtraTag(int extra_tag, int top_tag); |
698 inline void WritePosition(int pc_delta, int pos_delta, RelocInfo::Mode rmode); | 706 inline void WritePosition(int pc_delta, int pos_delta, RelocInfo::Mode rmode); |
699 | 707 |
700 void FlushPosition(); | 708 void FlushPosition(); |
701 | 709 |
702 byte* pos_; | 710 byte* pos_; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
743 // Advance* moves the position before/after reading. | 751 // Advance* moves the position before/after reading. |
744 // *Read* reads from current byte(s) into rinfo_. | 752 // *Read* reads from current byte(s) into rinfo_. |
745 // *Get* just reads and returns info on current byte. | 753 // *Get* just reads and returns info on current byte. |
746 void Advance(int bytes = 1) { pos_ -= bytes; } | 754 void Advance(int bytes = 1) { pos_ -= bytes; } |
747 int AdvanceGetTag(); | 755 int AdvanceGetTag(); |
748 int GetExtraTag(); | 756 int GetExtraTag(); |
749 int GetTopTag(); | 757 int GetTopTag(); |
750 void ReadTaggedPC(); | 758 void ReadTaggedPC(); |
751 void AdvanceReadPC(); | 759 void AdvanceReadPC(); |
752 void AdvanceReadId(); | 760 void AdvanceReadId(); |
| 761 void AdvanceReadInt(); |
753 void AdvanceReadPoolData(); | 762 void AdvanceReadPoolData(); |
| 763 void AdvanceReadDebugBreakSlotData(); |
754 void AdvanceReadPosition(); | 764 void AdvanceReadPosition(); |
755 void AdvanceReadData(); | 765 void AdvanceReadData(); |
756 void AdvanceReadVariableLengthPCJump(); | 766 void AdvanceReadVariableLengthPCJump(); |
757 int GetLocatableTypeTag(); | 767 int GetLocatableTypeTag(); |
758 void ReadTaggedId(); | 768 void ReadTaggedId(); |
759 void ReadTaggedPosition(); | 769 void ReadTaggedPosition(); |
760 void ReadTaggedData(); | 770 void ReadTaggedData(); |
761 | 771 |
762 // If the given mode is wanted, set it in rinfo_ and return true. | 772 // If the given mode is wanted, set it in rinfo_ and return true. |
763 // Else return false. Used for efficiently skipping unwanted modes. | 773 // Else return false. Used for efficiently skipping unwanted modes. |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1247 }; | 1257 }; |
1248 | 1258 |
1249 Label emitted_label_; // Records pc_offset of emitted pool | 1259 Label emitted_label_; // Records pc_offset of emitted pool |
1250 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES]; | 1260 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES]; |
1251 }; | 1261 }; |
1252 | 1262 |
1253 | 1263 |
1254 } } // namespace v8::internal | 1264 } } // namespace v8::internal |
1255 | 1265 |
1256 #endif // V8_ASSEMBLER_H_ | 1266 #endif // V8_ASSEMBLER_H_ |
OLD | NEW |