]> git.saurik.com Git - apple/javascriptcore.git/blame - ftl/FTLDWARFDebugLineInfo.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / ftl / FTLDWARFDebugLineInfo.h
CommitLineData
81345200
A
1/*
2 * Copyright (C) 2014 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef FTLDWARFDebugLineInfo_h
27#define FTLDWARFDebugLineInfo_h
28
29#if ENABLE(FTL_JIT)
30
31#include <wtf/Vector.h>
32#include <wtf/text/WTFString.h>
33
34namespace JSC { namespace FTL {
35
36class DebugLineInterpreter {
37public:
38 DebugLineInterpreter(const char* program);
39
40 void run();
41
42private:
43 struct FileEntry {
44 String name;
45 uint32_t directoryIndex;
46 uint32_t lastModified;
47 uint32_t size;
48 };
49
50 void resetInterpreterState();
51 void interpretStatementProgram();
52 bool interpretOpcode(const char*&);
53 void parsePrologue();
54 void parseIncludeDirectories(const char*&);
55 void parseFileEntries(const char*&);
56 bool parseFileEntry(const char*&, DebugLineInterpreter::FileEntry&);
57 uint32_t parseULEB128(const char*&);
58 int32_t parseSLEB128(const char*&);
59
60 const char* m_program;
61 bool m_logResults;
62
63 struct LineInfo {
64 size_t address;
65 uint32_t file;
66 uint32_t line;
67 uint32_t column;
68 uint32_t isa;
69 bool isStatement;
70 bool isBasicBlock;
71 bool endSequence;
72 bool prologueEnd;
73 bool epilogueBegin;
74 };
75
76 void printLineInfo(LineInfo&);
77 void printLineInfo();
78
79 LineInfo m_currentState;
80 Vector<LineInfo> m_lineInfoMatrix;
81
82 enum DwarfFormat {
83 SixtyFourBit,
84 ThirtyTwoBit
85 };
86
87 struct Prologue {
88 Prologue()
89 : totalLength(0)
90 , format(ThirtyTwoBit)
91 , version(0)
92 , prologueLength(0)
93 , minimumInstructionLength(0)
94 , defaultIsStatement(0)
95 , lineBase(0)
96 , lineRange(0)
97 , opcodeBase(0)
98 {
99 }
100
101 uint64_t totalLength;
102 DwarfFormat format;
103 uint16_t version;
104 uint64_t prologueLength;
105 uint8_t minimumInstructionLength;
106 uint8_t defaultIsStatement;
107 int8_t lineBase;
108 uint8_t lineRange;
109 uint8_t opcodeBase;
110 Vector<uint8_t> standardOpcodeLengths;
111 Vector<String> includeDirectories;
112 Vector<FileEntry> fileEntries;
113 } m_prologue;
114
115 enum ExtendedOpcode {
116 DW_LNE_end_sequence = 0x1,
117 DW_LNE_set_address = 0x2,
118 DW_LNE_define_file = 0x3
119 };
120
121 enum StandardOpcode {
122 ExtendedOpcodes = 0x0,
123 DW_LNS_copy = 0x1,
124 DW_LNS_advance_pc = 0x2,
125 DW_LNS_advance_line = 0x3,
126 DW_LNS_set_file = 0x4,
127 DW_LNS_set_column = 0x5,
128 DW_LNS_negate_stmt = 0x6,
129 DW_LNS_set_basic_block = 0x7,
130 DW_LNS_const_add_pc = 0x8,
131 DW_LNS_fixed_advance_pc = 0x9,
132 DW_LNS_set_prologue_end = 0xa,
133 DW_LNS_set_epilogue_begin = 0xb,
134 DW_LNS_set_isa = 0xc
135 };
136};
137
138} } // namespace JSC::FTL
139
140#endif // ENABLE(FTL_JIT)
141
142#endif // FTLDWARFDebugLineInfo_h