dc001699b0deeb7252bd7d7d25ad733a1cf45482
[cacao.git] / src / vm / jit / linenumbertable.h
1 /* src/vm/jit/linenumbertable.h - linenumber table
2
3    Copyright (C) 2007, 2008
4    CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5
6    This file is part of CACAO.
7
8    This program is free software; you can redistribute it and/or
9    modify it under the terms of the GNU General Public License as
10    published by the Free Software Foundation; either version 2, or (at
11    your option) any later version.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.
22
23 */
24
25
26 #ifndef _LINENUMBERTABLE_H
27 #define _LINENUMBERTABLE_H
28
29 /* forward typedefs ***********************************************************/
30
31 typedef struct linenumbertable_t            linenumbertable_t;
32 typedef struct linenumbertable_entry_t      linenumbertable_entry_t;
33 typedef struct linenumbertable_list_entry_t linenumbertable_list_entry_t;
34
35
36 #include "config.h"
37
38 #include <stdint.h>
39
40 #include "toolbox/list.h"
41
42 #include "vm/method.h"
43
44 #include "vm/jit/jit.hpp"
45 #include "vm/jit/code.h"
46 #include "vm/jit/codegen-common.hpp"
47
48 #include "vm/jit/ir/instruction.hpp"
49
50
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54
55 /* linenumbertable_t **********************************************************/
56
57 struct linenumbertable_t {
58         int32_t                  length;    /* length of the entries array        */
59         linenumbertable_entry_t *entries;   /* actual linenumber entries          */
60 };
61
62
63 /* linenumbertable_entry_t *****************************************************
64
65    NOTE: See doc/inlining_stacktrace.txt for special meanings of line
66    and pc.
67
68 *******************************************************************************/
69
70 struct linenumbertable_entry_t {
71         int32_t  linenumber;                /* linenumber of this entry           */
72         void    *pc;                        /* PC where this linenumber starts    */
73 };
74
75
76 /* linenumbertable_list_entry_t ***********************************************/
77
78 struct linenumbertable_list_entry_t {
79         int32_t    linenumber;      /* line number, used for inserting into the   */
80                                     /* table and for validity checking            */
81                                     /* -1......start of inlined body              */
82                                     /* -2......end of inlined body                */
83                                     /* <= -3...special entry with methodinfo *    */
84                                                                 /* (see doc/inlining_stacktrace.txt)          */
85         ptrint     mpc;             /* machine code program counter of first      */
86                                     /* instruction for given line                 */
87                                     /* NOTE: for linenumber <= -3 this is a the   */
88                                     /* (methodinfo *) of the inlined method       */
89         listnode_t linkage;
90 };
91
92
93 /* function prototypes ********************************************************/
94
95 void    linenumbertable_create(jitdata *jd);
96
97 void    linenumbertable_list_entry_add(codegendata *cd, int32_t linenumber);
98 void    linenumbertable_list_entry_add_inline_start(codegendata *cd, instruction *iptr);
99 void    linenumbertable_list_entry_add_inline_end(codegendata *cd, instruction *iptr);
100
101 int32_t linenumbertable_linenumber_for_pc(methodinfo **pm, codeinfo *code, void *pc);
102
103 #ifdef __cplusplus
104 }
105 #endif
106
107 #endif /* _LINENUMBERTABLE_H */
108
109
110 /*
111  * These are local overrides for various environment variables in Emacs.
112  * Please do not remove this and leave it at the end of the file, where
113  * Emacs will automagically detect them.
114  * ---------------------------------------------------------------------
115  * Local variables:
116  * mode: c
117  * indent-tabs-mode: t
118  * c-basic-offset: 4
119  * tab-width: 4
120  * End:
121  * vim:noexpandtab:sw=4:ts=4:
122  */