Update copyright years
[deliverable/binutils-gdb.git] / gas / dw2gencfi.h
CommitLineData
54cfded0 1/* dw2gencfi.h - Support for generating Dwarf2 CFI information.
4b95cf5c 2 Copyright (C) 2003-2014 Free Software Foundation, Inc.
54cfded0
AM
3 Contributed by Michal Ludvig <mludvig@suse.cz>
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
ec2655a6 9 the Free Software Foundation; either version 3, or (at your option)
54cfded0
AM
10 any later version.
11
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
19 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
54cfded0
AM
21
22#ifndef DW2GENCFI_H
23#define DW2GENCFI_H
24
fa8f86ff 25#include "dwarf2.h"
54cfded0 26
a4447b93 27struct symbol;
54cfded0
AM
28
29extern const pseudo_typeS cfi_pseudo_table[];
30
54cfded0
AM
31/* cfi_finish() is called at the end of file. It will complain if
32 the last CFI wasn't properly closed by .cfi_endproc. */
a4447b93
RH
33extern void cfi_finish (void);
34
35/* Entry points for backends to add unwind information. */
36extern void cfi_new_fde (struct symbol *);
37extern void cfi_end_fde (struct symbol *);
38extern void cfi_set_return_column (unsigned);
39extern void cfi_add_advance_loc (struct symbol *);
2be24b54 40
a4447b93
RH
41extern void cfi_add_CFA_offset (unsigned, offsetT);
42extern void cfi_add_CFA_def_cfa (unsigned, offsetT);
43extern void cfi_add_CFA_register (unsigned, unsigned);
44extern void cfi_add_CFA_def_cfa_register (unsigned);
45extern void cfi_add_CFA_def_cfa_offset (offsetT);
2be24b54
ML
46extern void cfi_add_CFA_restore (unsigned);
47extern void cfi_add_CFA_undefined (unsigned);
48extern void cfi_add_CFA_same_value (unsigned);
49extern void cfi_add_CFA_remember_state (void);
50extern void cfi_add_CFA_restore_state (void);
54cfded0 51
1bce6bd8
PB
52/* Structures for md_cfi_end. */
53
54#if defined (TE_PE) || defined (TE_PEP)
55#define SUPPORT_FRAME_LINKONCE 1
56#else
57#define SUPPORT_FRAME_LINKONCE 0
58#endif
59
60struct cfi_insn_data
61{
62 struct cfi_insn_data *next;
63#if SUPPORT_FRAME_LINKONCE
64 segT cur_seg;
65#endif
66 int insn;
67 union
68 {
69 struct
70 {
71 unsigned reg;
72 offsetT offset;
73 } ri;
74
75 struct
76 {
77 unsigned reg1;
78 unsigned reg2;
79 } rr;
80
81 unsigned r;
82 offsetT i;
83
84 struct
85 {
86 symbolS *lab1;
87 symbolS *lab2;
88 } ll;
89
90 struct cfi_escape_data *esc;
91
92 struct
93 {
94 unsigned reg, encoding;
95 expressionS exp;
96 } ea;
97 } u;
98};
99
100struct fde_entry
101{
102 struct fde_entry *next;
103#if SUPPORT_FRAME_LINKONCE
104 segT cur_seg;
105#endif
106 symbolS *start_address;
107 symbolS *end_address;
108 struct cfi_insn_data *data;
109 struct cfi_insn_data **last;
110 unsigned char per_encoding;
111 unsigned char lsda_encoding;
112 expressionS personality;
113 expressionS lsda;
114 unsigned int return_column;
115 unsigned int signal_frame;
116#if SUPPORT_FRAME_LINKONCE
117 int handled;
118#endif
119};
120
af385746
RH
121/* The list of all FDEs that have been collected. */
122extern struct fde_entry *all_fde_data;
123
1bce6bd8
PB
124/* Fake CFI type; outside the byte range of any real CFI insn. */
125#define CFI_adjust_cfa_offset 0x100
126#define CFI_return_column 0x101
127#define CFI_rel_offset 0x102
128#define CFI_escape 0x103
129#define CFI_signal_frame 0x104
130#define CFI_val_encoded_addr 0x105
131
54cfded0 132#endif /* DW2GENCFI_H */
This page took 0.58713 seconds and 4 git commands to generate.