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

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

Issue 18363007: Fix GDBJIT for Linux after r15460. (Closed) Base URL: https://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 | « no previous file | no next file » | 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 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 622
623 Zone* zone_; 623 Zone* zone_;
624 ZoneList<MachOSection*> sections_; 624 ZoneList<MachOSection*> sections_;
625 }; 625 };
626 #endif // defined(__MACH_O) 626 #endif // defined(__MACH_O)
627 627
628 628
629 #if defined(__ELF) 629 #if defined(__ELF)
630 class ELF BASE_EMBEDDED { 630 class ELF BASE_EMBEDDED {
631 public: 631 public:
632 explicit ELF(Zone* zone) : sections_(6, zone) { 632 explicit ELF(Zone* zone) : zone_(zone), sections_(6, zone) {
633 sections_.Add(new(zone) ELFSection("", ELFSection::TYPE_NULL, 0), zone); 633 sections_.Add(new(zone) ELFSection("", ELFSection::TYPE_NULL, 0), zone);
634 sections_.Add(new(zone) ELFStringTable(".shstrtab"), zone); 634 sections_.Add(new(zone) ELFStringTable(".shstrtab"), zone);
635 } 635 }
636 636
637 void Write(Writer* w) { 637 void Write(Writer* w) {
638 WriteHeader(w); 638 WriteHeader(w);
639 WriteSectionTable(w); 639 WriteSectionTable(w);
640 WriteSections(w); 640 WriteSections(w);
641 } 641 }
642 642
643 ELFSection* SectionAt(uint32_t index) { 643 ELFSection* SectionAt(uint32_t index) {
644 return sections_[index]; 644 return sections_[index];
645 } 645 }
646 646
647 uint32_t AddSection(ELFSection* section, Zone* zone) { 647 uint32_t AddSection(ELFSection* section) {
648 sections_.Add(section, zone); 648 sections_.Add(section, zone_);
649 section->set_index(sections_.length() - 1); 649 section->set_index(sections_.length() - 1);
650 return sections_.length() - 1; 650 return sections_.length() - 1;
651 } 651 }
652 652
653 private: 653 private:
654 struct ELFHeader { 654 struct ELFHeader {
655 uint8_t ident[16]; 655 uint8_t ident[16];
656 uint16_t type; 656 uint16_t type;
657 uint16_t machine; 657 uint16_t machine;
658 uint32_t version; 658 uint32_t version;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 Writer::Slot<ELFSection::Header> headers = 736 Writer::Slot<ELFSection::Header> headers =
737 w->SlotAt<ELFSection::Header>(sizeof(ELFHeader)); 737 w->SlotAt<ELFSection::Header>(sizeof(ELFHeader));
738 738
739 for (int i = 0, length = sections_.length(); 739 for (int i = 0, length = sections_.length();
740 i < length; 740 i < length;
741 i++) { 741 i++) {
742 sections_[i]->WriteBody(headers.at(i), w); 742 sections_[i]->WriteBody(headers.at(i), w);
743 } 743 }
744 } 744 }
745 745
746 Zone* zone_;
746 ZoneList<ELFSection*> sections_; 747 ZoneList<ELFSection*> sections_;
747 }; 748 };
748 749
749 750
750 class ELFSymbol BASE_EMBEDDED { 751 class ELFSymbol BASE_EMBEDDED {
751 public: 752 public:
752 enum Type { 753 enum Type {
753 TYPE_NOTYPE = 0, 754 TYPE_NOTYPE = 0,
754 TYPE_OBJECT = 1, 755 TYPE_OBJECT = 1,
755 TYPE_FUNC = 2, 756 TYPE_FUNC = 2,
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 1020
1020 #if defined(__ELF) 1021 #if defined(__ELF)
1021 static void CreateSymbolsTable(CodeDescription* desc, 1022 static void CreateSymbolsTable(CodeDescription* desc,
1022 Zone* zone, 1023 Zone* zone,
1023 ELF* elf, 1024 ELF* elf,
1024 int text_section_index) { 1025 int text_section_index) {
1025 ELFSymbolTable* symtab = new(zone) ELFSymbolTable(".symtab", zone); 1026 ELFSymbolTable* symtab = new(zone) ELFSymbolTable(".symtab", zone);
1026 ELFStringTable* strtab = new(zone) ELFStringTable(".strtab"); 1027 ELFStringTable* strtab = new(zone) ELFStringTable(".strtab");
1027 1028
1028 // Symbol table should be followed by the linked string table. 1029 // Symbol table should be followed by the linked string table.
1029 elf->AddSection(symtab, zone); 1030 elf->AddSection(symtab);
1030 elf->AddSection(strtab, zone); 1031 elf->AddSection(strtab);
1031 1032
1032 symtab->Add(ELFSymbol("V8 Code", 1033 symtab->Add(ELFSymbol("V8 Code",
1033 0, 1034 0,
1034 0, 1035 0,
1035 ELFSymbol::BIND_LOCAL, 1036 ELFSymbol::BIND_LOCAL,
1036 ELFSymbol::TYPE_FILE, 1037 ELFSymbol::TYPE_FILE,
1037 ELFSection::INDEX_ABSOLUTE), 1038 ELFSection::INDEX_ABSOLUTE),
1038 zone); 1039 zone);
1039 1040
1040 symtab->Add(ELFSymbol(desc->name(), 1041 symtab->Add(ELFSymbol(desc->name(),
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 Writer w(&elf); 1935 Writer w(&elf);
1935 1936
1936 int text_section_index = elf.AddSection( 1937 int text_section_index = elf.AddSection(
1937 new(&zone) FullHeaderELFSection( 1938 new(&zone) FullHeaderELFSection(
1938 ".text", 1939 ".text",
1939 ELFSection::TYPE_NOBITS, 1940 ELFSection::TYPE_NOBITS,
1940 kCodeAlignment, 1941 kCodeAlignment,
1941 desc->CodeStart(), 1942 desc->CodeStart(),
1942 0, 1943 0,
1943 desc->CodeSize(), 1944 desc->CodeSize(),
1944 ELFSection::FLAG_ALLOC | ELFSection::FLAG_EXEC), 1945 ELFSection::FLAG_ALLOC | ELFSection::FLAG_EXEC));
1945 &zone);
1946 1946
1947 CreateSymbolsTable(desc, &zone, &elf, text_section_index); 1947 CreateSymbolsTable(desc, &zone, &elf, text_section_index);
1948 1948
1949 CreateDWARFSections(desc, &zone, &elf); 1949 CreateDWARFSections(desc, &zone, &elf);
1950 1950
1951 elf.Write(&w); 1951 elf.Write(&w);
1952 #endif 1952 #endif
1953 1953
1954 return CreateCodeEntry(w.buffer(), w.position()); 1954 return CreateCodeEntry(w.buffer(), w.position());
1955 } 1955 }
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
2170 ScopedLock lock(mutex.Pointer()); 2170 ScopedLock lock(mutex.Pointer());
2171 ASSERT(!IsLineInfoTagged(line_info)); 2171 ASSERT(!IsLineInfoTagged(line_info));
2172 HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true); 2172 HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true);
2173 ASSERT(e->value == NULL); 2173 ASSERT(e->value == NULL);
2174 e->value = TagLineInfo(line_info); 2174 e->value = TagLineInfo(line_info);
2175 } 2175 }
2176 2176
2177 2177
2178 } } // namespace v8::internal 2178 } } // namespace v8::internal
2179 #endif 2179 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698