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

Side by Side Diff: src/gdb-jit.cc

Issue 18037002: Clean up the usage of V8_TARGET_ARCH_${arch} and V8_HOST_ARCH_${arch} (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 7 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « src/full-codegen.h ('k') | src/globals.h » ('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 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 return false; 210 return false;
211 } 211 }
212 212
213 typedef THeader Header; 213 typedef THeader Header;
214 }; 214 };
215 215
216 216
217 struct MachOSectionHeader { 217 struct MachOSectionHeader {
218 char sectname[16]; 218 char sectname[16];
219 char segname[16]; 219 char segname[16];
220 #if defined(V8_TARGET_ARCH_IA32) 220 #if V8_TARGET_ARCH_IA32
221 uint32_t addr; 221 uint32_t addr;
222 uint32_t size; 222 uint32_t size;
223 #else 223 #else
224 uint64_t addr; 224 uint64_t addr;
225 uint64_t size; 225 uint64_t size;
226 #endif 226 #endif
227 uint32_t offset; 227 uint32_t offset;
228 uint32_t align; 228 uint32_t align;
229 uint32_t reloff; 229 uint32_t reloff;
230 uint32_t nreloc; 230 uint32_t nreloc;
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 518
519 private: 519 private:
520 struct MachOHeader { 520 struct MachOHeader {
521 uint32_t magic; 521 uint32_t magic;
522 uint32_t cputype; 522 uint32_t cputype;
523 uint32_t cpusubtype; 523 uint32_t cpusubtype;
524 uint32_t filetype; 524 uint32_t filetype;
525 uint32_t ncmds; 525 uint32_t ncmds;
526 uint32_t sizeofcmds; 526 uint32_t sizeofcmds;
527 uint32_t flags; 527 uint32_t flags;
528 #if defined(V8_TARGET_ARCH_X64) 528 #if V8_TARGET_ARCH_X64
529 uint32_t reserved; 529 uint32_t reserved;
530 #endif 530 #endif
531 }; 531 };
532 532
533 struct MachOSegmentCommand { 533 struct MachOSegmentCommand {
534 uint32_t cmd; 534 uint32_t cmd;
535 uint32_t cmdsize; 535 uint32_t cmdsize;
536 char segname[16]; 536 char segname[16];
537 #if defined(V8_TARGET_ARCH_IA32) 537 #if V8_TARGET_ARCH_IA32
538 uint32_t vmaddr; 538 uint32_t vmaddr;
539 uint32_t vmsize; 539 uint32_t vmsize;
540 uint32_t fileoff; 540 uint32_t fileoff;
541 uint32_t filesize; 541 uint32_t filesize;
542 #else 542 #else
543 uint64_t vmaddr; 543 uint64_t vmaddr;
544 uint64_t vmsize; 544 uint64_t vmsize;
545 uint64_t fileoff; 545 uint64_t fileoff;
546 uint64_t filesize; 546 uint64_t filesize;
547 #endif 547 #endif
548 uint32_t maxprot; 548 uint32_t maxprot;
549 uint32_t initprot; 549 uint32_t initprot;
550 uint32_t nsects; 550 uint32_t nsects;
551 uint32_t flags; 551 uint32_t flags;
552 }; 552 };
553 553
554 enum MachOLoadCommandCmd { 554 enum MachOLoadCommandCmd {
555 LC_SEGMENT_32 = 0x00000001u, 555 LC_SEGMENT_32 = 0x00000001u,
556 LC_SEGMENT_64 = 0x00000019u 556 LC_SEGMENT_64 = 0x00000019u
557 }; 557 };
558 558
559 559
560 Writer::Slot<MachOHeader> WriteHeader(Writer* w) { 560 Writer::Slot<MachOHeader> WriteHeader(Writer* w) {
561 ASSERT(w->position() == 0); 561 ASSERT(w->position() == 0);
562 Writer::Slot<MachOHeader> header = w->CreateSlotHere<MachOHeader>(); 562 Writer::Slot<MachOHeader> header = w->CreateSlotHere<MachOHeader>();
563 #if defined(V8_TARGET_ARCH_IA32) 563 #if V8_TARGET_ARCH_IA32
564 header->magic = 0xFEEDFACEu; 564 header->magic = 0xFEEDFACEu;
565 header->cputype = 7; // i386 565 header->cputype = 7; // i386
566 header->cpusubtype = 3; // CPU_SUBTYPE_I386_ALL 566 header->cpusubtype = 3; // CPU_SUBTYPE_I386_ALL
567 #elif defined(V8_TARGET_ARCH_X64) 567 #elif V8_TARGET_ARCH_X64
568 header->magic = 0xFEEDFACFu; 568 header->magic = 0xFEEDFACFu;
569 header->cputype = 7 | 0x01000000; // i386 | 64-bit ABI 569 header->cputype = 7 | 0x01000000; // i386 | 64-bit ABI
570 header->cpusubtype = 3; // CPU_SUBTYPE_I386_ALL 570 header->cpusubtype = 3; // CPU_SUBTYPE_I386_ALL
571 header->reserved = 0; 571 header->reserved = 0;
572 #else 572 #else
573 #error Unsupported target architecture. 573 #error Unsupported target architecture.
574 #endif 574 #endif
575 header->filetype = 0x1; // MH_OBJECT 575 header->filetype = 0x1; // MH_OBJECT
576 header->ncmds = 1; 576 header->ncmds = 1;
577 header->sizeofcmds = 0; 577 header->sizeofcmds = 0;
578 header->flags = 0; 578 header->flags = 0;
579 return header; 579 return header;
580 } 580 }
581 581
582 582
583 Writer::Slot<MachOSegmentCommand> WriteSegmentCommand(Writer* w, 583 Writer::Slot<MachOSegmentCommand> WriteSegmentCommand(Writer* w,
584 uintptr_t code_start, 584 uintptr_t code_start,
585 uintptr_t code_size) { 585 uintptr_t code_size) {
586 Writer::Slot<MachOSegmentCommand> cmd = 586 Writer::Slot<MachOSegmentCommand> cmd =
587 w->CreateSlotHere<MachOSegmentCommand>(); 587 w->CreateSlotHere<MachOSegmentCommand>();
588 #if defined(V8_TARGET_ARCH_IA32) 588 #if V8_TARGET_ARCH_IA32
589 cmd->cmd = LC_SEGMENT_32; 589 cmd->cmd = LC_SEGMENT_32;
590 #else 590 #else
591 cmd->cmd = LC_SEGMENT_64; 591 cmd->cmd = LC_SEGMENT_64;
592 #endif 592 #endif
593 cmd->vmaddr = code_start; 593 cmd->vmaddr = code_start;
594 cmd->vmsize = code_size; 594 cmd->vmsize = code_size;
595 cmd->fileoff = 0; 595 cmd->fileoff = 0;
596 cmd->filesize = 0; 596 cmd->filesize = 0;
597 cmd->maxprot = 7; 597 cmd->maxprot = 7;
598 cmd->initprot = 7; 598 cmd->initprot = 7;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 uint16_t pht_entry_num; 665 uint16_t pht_entry_num;
666 uint16_t sht_entry_size; 666 uint16_t sht_entry_size;
667 uint16_t sht_entry_num; 667 uint16_t sht_entry_num;
668 uint16_t sht_strtab_index; 668 uint16_t sht_strtab_index;
669 }; 669 };
670 670
671 671
672 void WriteHeader(Writer* w) { 672 void WriteHeader(Writer* w) {
673 ASSERT(w->position() == 0); 673 ASSERT(w->position() == 0);
674 Writer::Slot<ELFHeader> header = w->CreateSlotHere<ELFHeader>(); 674 Writer::Slot<ELFHeader> header = w->CreateSlotHere<ELFHeader>();
675 #if defined(V8_TARGET_ARCH_IA32) || defined(V8_TARGET_ARCH_ARM) 675 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM
676 const uint8_t ident[16] = 676 const uint8_t ident[16] =
677 { 0x7f, 'E', 'L', 'F', 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 677 { 0x7f, 'E', 'L', 'F', 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
678 #elif defined(V8_TARGET_ARCH_X64) 678 #elif V8_TARGET_ARCH_X64
679 const uint8_t ident[16] = 679 const uint8_t ident[16] =
680 { 0x7f, 'E', 'L', 'F', 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 680 { 0x7f, 'E', 'L', 'F', 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
681 #else 681 #else
682 #error Unsupported target architecture. 682 #error Unsupported target architecture.
683 #endif 683 #endif
684 OS::MemCopy(header->ident, ident, 16); 684 OS::MemCopy(header->ident, ident, 16);
685 header->type = 1; 685 header->type = 1;
686 #if defined(V8_TARGET_ARCH_IA32) 686 #if V8_TARGET_ARCH_IA32
687 header->machine = 3; 687 header->machine = 3;
688 #elif defined(V8_TARGET_ARCH_X64) 688 #elif V8_TARGET_ARCH_X64
689 // Processor identification value for x64 is 62 as defined in 689 // Processor identification value for x64 is 62 as defined in
690 // System V ABI, AMD64 Supplement 690 // System V ABI, AMD64 Supplement
691 // http://www.x86-64.org/documentation/abi.pdf 691 // http://www.x86-64.org/documentation/abi.pdf
692 header->machine = 62; 692 header->machine = 62;
693 #elif defined(V8_TARGET_ARCH_ARM) 693 #elif V8_TARGET_ARCH_ARM
694 // Set to EM_ARM, defined as 40, in "ARM ELF File Format" at 694 // Set to EM_ARM, defined as 40, in "ARM ELF File Format" at
695 // infocenter.arm.com/help/topic/com.arm.doc.dui0101a/DUI0101A_Elf.pdf 695 // infocenter.arm.com/help/topic/com.arm.doc.dui0101a/DUI0101A_Elf.pdf
696 header->machine = 40; 696 header->machine = 40;
697 #else 697 #else
698 #error Unsupported target architecture. 698 #error Unsupported target architecture.
699 #endif 699 #endif
700 header->version = 1; 700 header->version = 1;
701 header->entry = 0; 701 header->entry = 0;
702 header->pht_offset = 0; 702 header->pht_offset = 0;
703 header->sht_offset = sizeof(ELFHeader); // Section table follows header. 703 header->sht_offset = sizeof(ELFHeader); // Section table follows header.
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 value(value), 777 value(value),
778 size(size), 778 size(size),
779 info((binding << 4) | type), 779 info((binding << 4) | type),
780 other(0), 780 other(0),
781 section(section) { 781 section(section) {
782 } 782 }
783 783
784 Binding binding() const { 784 Binding binding() const {
785 return static_cast<Binding>(info >> 4); 785 return static_cast<Binding>(info >> 4);
786 } 786 }
787 #if defined(V8_TARGET_ARCH_IA32) || defined(V8_TARGET_ARCH_ARM) 787 #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM
788 struct SerializedLayout { 788 struct SerializedLayout {
789 SerializedLayout(uint32_t name, 789 SerializedLayout(uint32_t name,
790 uintptr_t value, 790 uintptr_t value,
791 uintptr_t size, 791 uintptr_t size,
792 Binding binding, 792 Binding binding,
793 Type type, 793 Type type,
794 uint16_t section) 794 uint16_t section)
795 : name(name), 795 : name(name),
796 value(value), 796 value(value),
797 size(size), 797 size(size),
798 info((binding << 4) | type), 798 info((binding << 4) | type),
799 other(0), 799 other(0),
800 section(section) { 800 section(section) {
801 } 801 }
802 802
803 uint32_t name; 803 uint32_t name;
804 uintptr_t value; 804 uintptr_t value;
805 uintptr_t size; 805 uintptr_t size;
806 uint8_t info; 806 uint8_t info;
807 uint8_t other; 807 uint8_t other;
808 uint16_t section; 808 uint16_t section;
809 }; 809 };
810 #elif defined(V8_TARGET_ARCH_X64) 810 #elif V8_TARGET_ARCH_X64
811 struct SerializedLayout { 811 struct SerializedLayout {
812 SerializedLayout(uint32_t name, 812 SerializedLayout(uint32_t name,
813 uintptr_t value, 813 uintptr_t value,
814 uintptr_t size, 814 uintptr_t size,
815 Binding binding, 815 Binding binding,
816 Type type, 816 Type type,
817 uint16_t section) 817 uint16_t section)
818 : name(name), 818 : name(name),
819 info((binding << 4) | type), 819 info((binding << 4) | type),
820 other(0), 820 other(0),
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 } 914 }
915 915
916 ZoneList<ELFSymbol> locals_; 916 ZoneList<ELFSymbol> locals_;
917 ZoneList<ELFSymbol> globals_; 917 ZoneList<ELFSymbol> globals_;
918 }; 918 };
919 #endif // defined(__ELF) 919 #endif // defined(__ELF)
920 920
921 921
922 class CodeDescription BASE_EMBEDDED { 922 class CodeDescription BASE_EMBEDDED {
923 public: 923 public:
924 #ifdef V8_TARGET_ARCH_X64 924 #if V8_TARGET_ARCH_X64
925 enum StackState { 925 enum StackState {
926 POST_RBP_PUSH, 926 POST_RBP_PUSH,
927 POST_RBP_SET, 927 POST_RBP_SET,
928 POST_RBP_POP, 928 POST_RBP_POP,
929 STACK_STATE_MAX 929 STACK_STATE_MAX
930 }; 930 };
931 #endif 931 #endif
932 932
933 CodeDescription(const char* name, 933 CodeDescription(const char* name,
934 Code* code, 934 Code* code,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 } 977 }
978 978
979 bool IsLineInfoAvailable() { 979 bool IsLineInfoAvailable() {
980 return !script_.is_null() && 980 return !script_.is_null() &&
981 script_->source()->IsString() && 981 script_->source()->IsString() &&
982 script_->HasValidSource() && 982 script_->HasValidSource() &&
983 script_->name()->IsString() && 983 script_->name()->IsString() &&
984 lineinfo_ != NULL; 984 lineinfo_ != NULL;
985 } 985 }
986 986
987 #ifdef V8_TARGET_ARCH_X64 987 #if V8_TARGET_ARCH_X64
988 uintptr_t GetStackStateStartAddress(StackState state) const { 988 uintptr_t GetStackStateStartAddress(StackState state) const {
989 ASSERT(state < STACK_STATE_MAX); 989 ASSERT(state < STACK_STATE_MAX);
990 return stack_state_start_addresses_[state]; 990 return stack_state_start_addresses_[state];
991 } 991 }
992 992
993 void SetStackStateStartAddress(StackState state, uintptr_t addr) { 993 void SetStackStateStartAddress(StackState state, uintptr_t addr) {
994 ASSERT(state < STACK_STATE_MAX); 994 ASSERT(state < STACK_STATE_MAX);
995 stack_state_start_addresses_[state] = addr; 995 stack_state_start_addresses_[state] = addr;
996 } 996 }
997 #endif 997 #endif
998 998
999 SmartArrayPointer<char> GetFilename() { 999 SmartArrayPointer<char> GetFilename() {
1000 return String::cast(script_->name())->ToCString(); 1000 return String::cast(script_->name())->ToCString();
1001 } 1001 }
1002 1002
1003 int GetScriptLineNumber(int pos) { 1003 int GetScriptLineNumber(int pos) {
1004 return GetScriptLineNumberSafe(script_, pos) + 1; 1004 return GetScriptLineNumberSafe(script_, pos) + 1;
1005 } 1005 }
1006 1006
1007 1007
1008 private: 1008 private:
1009 const char* name_; 1009 const char* name_;
1010 Code* code_; 1010 Code* code_;
1011 Handle<Script> script_; 1011 Handle<Script> script_;
1012 GDBJITLineInfo* lineinfo_; 1012 GDBJITLineInfo* lineinfo_;
1013 GDBJITInterface::CodeTag tag_; 1013 GDBJITInterface::CodeTag tag_;
1014 CompilationInfo* info_; 1014 CompilationInfo* info_;
1015 #ifdef V8_TARGET_ARCH_X64 1015 #if V8_TARGET_ARCH_X64
1016 uintptr_t stack_state_start_addresses_[STACK_STATE_MAX]; 1016 uintptr_t stack_state_start_addresses_[STACK_STATE_MAX];
1017 #endif 1017 #endif
1018 }; 1018 };
1019 1019
1020 #if defined(__ELF) 1020 #if defined(__ELF)
1021 static void CreateSymbolsTable(CodeDescription* desc, 1021 static void CreateSymbolsTable(CodeDescription* desc,
1022 Zone* zone, 1022 Zone* zone,
1023 ELF* elf, 1023 ELF* elf,
1024 int text_section_index) { 1024 int text_section_index) {
1025 ELFSymbolTable* symtab = new(zone) ELFSymbolTable(".symtab", zone); 1025 ELFSymbolTable* symtab = new(zone) ELFSymbolTable(".symtab", zone);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 w->WriteString("v8value"); 1099 w->WriteString("v8value");
1100 1100
1101 if (desc_->IsInfoAvailable()) { 1101 if (desc_->IsInfoAvailable()) {
1102 Scope* scope = desc_->info()->scope(); 1102 Scope* scope = desc_->info()->scope();
1103 w->WriteULEB128(2); 1103 w->WriteULEB128(2);
1104 w->WriteString(desc_->name()); 1104 w->WriteString(desc_->name());
1105 w->Write<intptr_t>(desc_->CodeStart()); 1105 w->Write<intptr_t>(desc_->CodeStart());
1106 w->Write<intptr_t>(desc_->CodeStart() + desc_->CodeSize()); 1106 w->Write<intptr_t>(desc_->CodeStart() + desc_->CodeSize());
1107 Writer::Slot<uint32_t> fb_block_size = w->CreateSlotHere<uint32_t>(); 1107 Writer::Slot<uint32_t> fb_block_size = w->CreateSlotHere<uint32_t>();
1108 uintptr_t fb_block_start = w->position(); 1108 uintptr_t fb_block_start = w->position();
1109 #if defined(V8_TARGET_ARCH_IA32) 1109 #if V8_TARGET_ARCH_IA32
1110 w->Write<uint8_t>(DW_OP_reg5); // The frame pointer's here on ia32 1110 w->Write<uint8_t>(DW_OP_reg5); // The frame pointer's here on ia32
1111 #elif defined(V8_TARGET_ARCH_X64) 1111 #elif V8_TARGET_ARCH_X64
1112 w->Write<uint8_t>(DW_OP_reg6); // and here on x64. 1112 w->Write<uint8_t>(DW_OP_reg6); // and here on x64.
1113 #elif defined(V8_TARGET_ARCH_ARM) 1113 #elif V8_TARGET_ARCH_ARM
1114 UNIMPLEMENTED(); 1114 UNIMPLEMENTED();
1115 #elif defined(V8_TARGET_ARCH_MIPS) 1115 #elif V8_TARGET_ARCH_MIPS
1116 UNIMPLEMENTED(); 1116 UNIMPLEMENTED();
1117 #else 1117 #else
1118 #error Unsupported target architecture. 1118 #error Unsupported target architecture.
1119 #endif 1119 #endif
1120 fb_block_size.set(static_cast<uint32_t>(w->position() - fb_block_start)); 1120 fb_block_size.set(static_cast<uint32_t>(w->position() - fb_block_start));
1121 1121
1122 int params = scope->num_parameters(); 1122 int params = scope->num_parameters();
1123 int slots = scope->num_stack_slots(); 1123 int slots = scope->num_stack_slots();
1124 int context_slots = scope->ContextLocalCount(); 1124 int context_slots = scope->ContextLocalCount();
1125 // The real slot ID is internal_slots + context_slot_id. 1125 // The real slot ID is internal_slots + context_slot_id.
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 return +1; 1556 return +1;
1557 } else { 1557 } else {
1558 return -1; 1558 return -1;
1559 } 1559 }
1560 } 1560 }
1561 1561
1562 CodeDescription* desc_; 1562 CodeDescription* desc_;
1563 }; 1563 };
1564 1564
1565 1565
1566 #ifdef V8_TARGET_ARCH_X64 1566 #if V8_TARGET_ARCH_X64
1567 1567
1568 class UnwindInfoSection : public DebugSection { 1568 class UnwindInfoSection : public DebugSection {
1569 public: 1569 public:
1570 explicit UnwindInfoSection(CodeDescription* desc); 1570 explicit UnwindInfoSection(CodeDescription* desc);
1571 virtual bool WriteBodyInternal(Writer* w); 1571 virtual bool WriteBodyInternal(Writer* w);
1572 1572
1573 int WriteCIE(Writer* w); 1573 int WriteCIE(Writer* w);
1574 void WriteFDE(Writer* w, int); 1574 void WriteFDE(Writer* w, int);
1575 1575
1576 void WriteFDEStateOnEntry(Writer* w); 1576 void WriteFDEStateOnEntry(Writer* w);
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1790 #endif // V8_TARGET_ARCH_X64 1790 #endif // V8_TARGET_ARCH_X64
1791 1791
1792 static void CreateDWARFSections(CodeDescription* desc, 1792 static void CreateDWARFSections(CodeDescription* desc,
1793 Zone* zone, 1793 Zone* zone,
1794 DebugObject* obj) { 1794 DebugObject* obj) {
1795 if (desc->IsLineInfoAvailable()) { 1795 if (desc->IsLineInfoAvailable()) {
1796 obj->AddSection(new(zone) DebugInfoSection(desc), zone); 1796 obj->AddSection(new(zone) DebugInfoSection(desc), zone);
1797 obj->AddSection(new(zone) DebugAbbrevSection(desc), zone); 1797 obj->AddSection(new(zone) DebugAbbrevSection(desc), zone);
1798 obj->AddSection(new(zone) DebugLineSection(desc), zone); 1798 obj->AddSection(new(zone) DebugLineSection(desc), zone);
1799 } 1799 }
1800 #ifdef V8_TARGET_ARCH_X64 1800 #if V8_TARGET_ARCH_X64
1801 obj->AddSection(new(zone) UnwindInfoSection(desc), zone); 1801 obj->AddSection(new(zone) UnwindInfoSection(desc), zone);
1802 #endif 1802 #endif
1803 } 1803 }
1804 1804
1805 1805
1806 // ------------------------------------------------------------------- 1806 // -------------------------------------------------------------------
1807 // Binary GDB JIT Interface as described in 1807 // Binary GDB JIT Interface as described in
1808 // http://sourceware.org/gdb/onlinedocs/gdb/Declarations.html 1808 // http://sourceware.org/gdb/onlinedocs/gdb/Declarations.html
1809 extern "C" { 1809 extern "C" {
1810 typedef enum { 1810 typedef enum {
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
2008 if (!name.is_null() && name->IsString()) { 2008 if (!name.is_null() && name->IsString()) {
2009 SmartArrayPointer<char> name_cstring = 2009 SmartArrayPointer<char> name_cstring =
2010 Handle<String>::cast(name)->ToCString(DISALLOW_NULLS); 2010 Handle<String>::cast(name)->ToCString(DISALLOW_NULLS);
2011 AddCode(*name_cstring, *code, GDBJITInterface::FUNCTION, *script, info); 2011 AddCode(*name_cstring, *code, GDBJITInterface::FUNCTION, *script, info);
2012 } else { 2012 } else {
2013 AddCode("", *code, GDBJITInterface::FUNCTION, *script, info); 2013 AddCode("", *code, GDBJITInterface::FUNCTION, *script, info);
2014 } 2014 }
2015 } 2015 }
2016 2016
2017 static void AddUnwindInfo(CodeDescription* desc) { 2017 static void AddUnwindInfo(CodeDescription* desc) {
2018 #ifdef V8_TARGET_ARCH_X64 2018 #if V8_TARGET_ARCH_X64
2019 if (desc->tag() == GDBJITInterface::FUNCTION) { 2019 if (desc->tag() == GDBJITInterface::FUNCTION) {
2020 // To avoid propagating unwinding information through 2020 // To avoid propagating unwinding information through
2021 // compilation pipeline we use an approximation. 2021 // compilation pipeline we use an approximation.
2022 // For most use cases this should not affect usability. 2022 // For most use cases this should not affect usability.
2023 static const int kFramePointerPushOffset = 1; 2023 static const int kFramePointerPushOffset = 1;
2024 static const int kFramePointerSetOffset = 4; 2024 static const int kFramePointerSetOffset = 4;
2025 static const int kFramePointerPopOffset = -3; 2025 static const int kFramePointerPopOffset = -3;
2026 2026
2027 uintptr_t frame_pointer_push_address = 2027 uintptr_t frame_pointer_push_address =
2028 desc->CodeStart() + kFramePointerPushOffset; 2028 desc->CodeStart() + kFramePointerPushOffset;
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
2171 ScopedLock lock(mutex.Pointer()); 2171 ScopedLock lock(mutex.Pointer());
2172 ASSERT(!IsLineInfoTagged(line_info)); 2172 ASSERT(!IsLineInfoTagged(line_info));
2173 HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true); 2173 HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true);
2174 ASSERT(e->value == NULL); 2174 ASSERT(e->value == NULL);
2175 e->value = TagLineInfo(line_info); 2175 e->value = TagLineInfo(line_info);
2176 } 2176 }
2177 2177
2178 2178
2179 } } // namespace v8::internal 2179 } } // namespace v8::internal
2180 #endif 2180 #endif
OLDNEW
« no previous file with comments | « src/full-codegen.h ('k') | src/globals.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698