2 * Copyright (C) 2014 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
26 #ifndef FTLDWARFDebugLineInfo_h
27 #define FTLDWARFDebugLineInfo_h
31 #include <wtf/Vector.h>
32 #include <wtf/text/WTFString.h>
34 namespace JSC
{ namespace FTL
{
36 class DebugLineInterpreter
{
38 DebugLineInterpreter(const char* program
);
45 uint32_t directoryIndex
;
46 uint32_t lastModified
;
50 void resetInterpreterState();
51 void interpretStatementProgram();
52 bool interpretOpcode(const char*&);
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*&);
60 const char* m_program
;
76 void printLineInfo(LineInfo
&);
79 LineInfo m_currentState
;
80 Vector
<LineInfo
> m_lineInfoMatrix
;
90 , format(ThirtyTwoBit
)
93 , minimumInstructionLength(0)
94 , defaultIsStatement(0)
101 uint64_t totalLength
;
104 uint64_t prologueLength
;
105 uint8_t minimumInstructionLength
;
106 uint8_t defaultIsStatement
;
110 Vector
<uint8_t> standardOpcodeLengths
;
111 Vector
<String
> includeDirectories
;
112 Vector
<FileEntry
> fileEntries
;
115 enum ExtendedOpcode
{
116 DW_LNE_end_sequence
= 0x1,
117 DW_LNE_set_address
= 0x2,
118 DW_LNE_define_file
= 0x3
121 enum StandardOpcode
{
122 ExtendedOpcodes
= 0x0,
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,
138 } } // namespace JSC::FTL
140 #endif // ENABLE(FTL_JIT)
142 #endif // FTLDWARFDebugLineInfo_h