OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.20.1/] [ld/] [ldexp.h] - Blame information for rev 298

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 205 julius
/* ldexp.h -
2
   Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
3
   2003, 2004, 2005, 2007 Free Software Foundation, Inc.
4
 
5
   This file is part of the GNU Binutils.
6
 
7
   This program is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
11
 
12
   This program 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 this program; if not, write to the Free Software
19
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20
   MA 02110-1301, USA.  */
21
 
22
#ifndef LDEXP_H
23
#define LDEXP_H
24
 
25
/* The result of an expression tree */
26
typedef struct {
27
  bfd_vma value;
28
  char *str;
29
  asection *section;
30
  bfd_boolean valid_p;
31
} etree_value_type;
32
 
33
enum node_tree_enum {
34
  etree_binary,
35
  etree_trinary,
36
  etree_unary,
37
  etree_name,
38
  etree_assign,
39
  etree_provide,
40
  etree_provided,
41
  etree_value,
42
  etree_assert,
43
  etree_rel
44
};
45
 
46
typedef struct {
47
  int node_code;
48
  unsigned int lineno;
49
  enum  node_tree_enum node_class;
50
} node_type;
51
 
52
typedef union etree_union {
53
  node_type type;
54
  struct {
55
    node_type type;
56
    union etree_union *lhs;
57
    union etree_union *rhs;
58
  } binary;
59
  struct {
60
    node_type type;
61
    union etree_union *cond;
62
    union etree_union *lhs;
63
    union etree_union *rhs;
64
  } trinary;
65
  struct {
66
    node_type type;
67
    const char *dst;
68
    union etree_union *src;
69
    bfd_boolean hidden;
70
  } assign;
71
  struct {
72
    node_type type;
73
    union etree_union *child;
74
  } unary;
75
  struct {
76
    node_type type;
77
    const char *name;
78
  } name;
79
  struct {
80
    node_type type;
81
    bfd_vma value;
82
    char *str;
83
  } value;
84
  struct {
85
    node_type type;
86
    asection *section;
87
    bfd_vma value;
88
  } rel;
89
  struct {
90
    node_type type;
91
    union etree_union *child;
92
    const char *message;
93
  } assert_s;
94
} etree_type;
95
 
96
typedef enum {
97
  lang_first_phase_enum,
98
  lang_mark_phase_enum,
99
  lang_allocating_phase_enum,
100
  lang_final_phase_enum
101
} lang_phase_type;
102
 
103
union lang_statement_union;
104
 
105
enum phase_enum {
106
  exp_dataseg_none,
107
  exp_dataseg_align_seen,
108
  exp_dataseg_relro_seen,
109
  exp_dataseg_end_seen,
110
  exp_dataseg_relro_adjust,
111
  exp_dataseg_adjust
112
};
113
 
114
enum relro_enum {
115
  exp_dataseg_relro_none,
116
  exp_dataseg_relro_start,
117
  exp_dataseg_relro_end,
118
};
119
 
120
struct ldexp_control {
121
  /* Modify expression evaluation depending on this.  */
122
  lang_phase_type phase;
123
 
124
  /* Principally used for diagnostics.  */
125
  bfd_boolean assigning_to_dot;
126
 
127
  /* Working results.  */
128
  etree_value_type result;
129
  bfd_vma dot;
130
 
131
  /* Current dot and section passed to ldexp folder.  */
132
  bfd_vma *dotp;
133
  asection *section;
134
 
135
  /* State machine and results for DATASEG.  */
136
  struct {
137
    enum phase_enum phase;
138
 
139
    bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
140
 
141
    enum relro_enum relro;
142
 
143
    union lang_statement_union *relro_start_stat;
144
    union lang_statement_union *relro_end_stat;
145
  } dataseg;
146
};
147
 
148
extern struct ldexp_control expld;
149
 
150
/* A maps from a segment name to a base address.  */
151
typedef struct segment_struct {
152
  /* The next segment in the linked list.  */
153
  struct segment_struct *next;
154
  /* The name of the sgement.  */
155
  const char *name;
156
  /* The base address for the segment.  */
157
  bfd_vma value;
158
  /* True if a SEGMENT_START directive corresponding to this segment
159
     has been seen.  */
160
  bfd_boolean used;
161
} segment_type;
162
 
163
/* The segments specified by the user on the command-line.  */
164
extern segment_type *segments;
165
 
166
typedef struct _fill_type fill_type;
167
 
168
etree_type *exp_intop
169
  (bfd_vma);
170
etree_type *exp_bigintop
171
  (bfd_vma, char *);
172
etree_type *exp_relop
173
  (asection *, bfd_vma);
174
void exp_fold_tree
175
  (etree_type *, asection *, bfd_vma *);
176
etree_type *exp_binop
177
  (int, etree_type *, etree_type *);
178
etree_type *exp_trinop
179
  (int,etree_type *, etree_type *, etree_type *);
180
etree_type *exp_unop
181
  (int, etree_type *);
182
etree_type *exp_nameop
183
  (int, const char *);
184
etree_type *exp_assop
185
  (int, const char *, etree_type *);
186
etree_type *exp_provide
187
  (const char *, etree_type *, bfd_boolean);
188
etree_type *exp_assert
189
  (etree_type *, const char *);
190
void exp_print_tree
191
  (etree_type *);
192
bfd_vma exp_get_vma
193
  (etree_type *, bfd_vma, char *);
194
int exp_get_value_int
195
  (etree_type *, int, char *);
196
fill_type *exp_get_fill
197
  (etree_type *, fill_type *, char *);
198
bfd_vma exp_get_abs_int
199
  (etree_type *, int, char *);
200
 
201
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.