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

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [ld/] [ldexp.h] - Blame information for rev 308

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

Line No. Rev Author Line
1 145 khays
/* ldexp.h -
2
   Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
3 166 khays
   2003, 2004, 2005, 2007, 2011, 2012 Free Software Foundation, Inc.
4 145 khays
 
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 166 khays
  const char *filename;
50 145 khays
  enum node_tree_enum node_class;
51
} node_type;
52
 
53
typedef union etree_union {
54
  node_type type;
55
  struct {
56
    node_type type;
57
    union etree_union *lhs;
58
    union etree_union *rhs;
59
  } binary;
60
  struct {
61
    node_type type;
62
    union etree_union *cond;
63
    union etree_union *lhs;
64
    union etree_union *rhs;
65
  } trinary;
66
  struct {
67
    node_type type;
68
    const char *dst;
69
    union etree_union *src;
70
    bfd_boolean hidden;
71
  } assign;
72
  struct {
73
    node_type type;
74
    union etree_union *child;
75
  } unary;
76
  struct {
77
    node_type type;
78
    const char *name;
79
  } name;
80
  struct {
81
    node_type type;
82
    bfd_vma value;
83
    char *str;
84
  } value;
85
  struct {
86
    node_type type;
87
    asection *section;
88
    bfd_vma value;
89
  } rel;
90
  struct {
91
    node_type type;
92
    union etree_union *child;
93
    const char *message;
94
  } assert_s;
95
} etree_type;
96
 
97 166 khays
/* Expression evaluation control.  */
98
typedef enum
99
{
100
  /* Parsing linker script.  Will only return "valid" for expressions
101
     that evaluate to a constant.  */
102 145 khays
  lang_first_phase_enum,
103 166 khays
  /* Prior to section sizing.  */
104 145 khays
  lang_mark_phase_enum,
105 166 khays
  /* During section sizing.  */
106 145 khays
  lang_allocating_phase_enum,
107 166 khays
  /* During assignment of symbol values when relaxation in progress.  */
108 145 khays
  lang_assigning_phase_enum,
109 166 khays
  /* Final assignment of symbol values.  */
110 145 khays
  lang_final_phase_enum
111
} lang_phase_type;
112
 
113
union lang_statement_union;
114
 
115
enum phase_enum {
116
  /* We step through the first four states here as we see the
117
     associated linker script tokens.  */
118
  exp_dataseg_none,
119
  exp_dataseg_align_seen,
120
  exp_dataseg_relro_seen,
121
  exp_dataseg_end_seen,
122
  /* The last three states are final, and affect the value returned
123
     by DATA_SEGMENT_ALIGN.  */
124
  exp_dataseg_relro_adjust,
125
  exp_dataseg_adjust,
126
  exp_dataseg_done
127
};
128
 
129
enum relro_enum {
130
  exp_dataseg_relro_none,
131
  exp_dataseg_relro_start,
132
  exp_dataseg_relro_end,
133
};
134
 
135
struct ldexp_control {
136
  /* Modify expression evaluation depending on this.  */
137
  lang_phase_type phase;
138
 
139
  /* Principally used for diagnostics.  */
140
  bfd_boolean assigning_to_dot;
141
 
142
  /* Working results.  */
143
  etree_value_type result;
144
  bfd_vma dot;
145
 
146
  /* Current dot and section passed to ldexp folder.  */
147
  bfd_vma *dotp;
148
  asection *section;
149
 
150
  /* State machine and results for DATASEG.  */
151
  struct {
152
    enum phase_enum phase;
153
 
154
    bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
155
 
156
    enum relro_enum relro;
157
 
158
    union lang_statement_union *relro_start_stat;
159
    union lang_statement_union *relro_end_stat;
160
  } dataseg;
161
};
162
 
163
extern struct ldexp_control expld;
164
 
165
/* A maps from a segment name to a base address.  */
166
typedef struct segment_struct {
167
  /* The next segment in the linked list.  */
168
  struct segment_struct *next;
169
  /* The name of the sgement.  */
170
  const char *name;
171
  /* The base address for the segment.  */
172
  bfd_vma value;
173
  /* True if a SEGMENT_START directive corresponding to this segment
174
     has been seen.  */
175
  bfd_boolean used;
176
} segment_type;
177
 
178
/* The segments specified by the user on the command-line.  */
179
extern segment_type *segments;
180
 
181
typedef struct _fill_type fill_type;
182
 
183
etree_type *exp_intop
184
  (bfd_vma);
185
etree_type *exp_bigintop
186
  (bfd_vma, char *);
187
etree_type *exp_relop
188
  (asection *, bfd_vma);
189
void exp_fold_tree
190
  (etree_type *, asection *, bfd_vma *);
191
void exp_fold_tree_no_dot
192
  (etree_type *);
193
etree_type *exp_binop
194
  (int, etree_type *, etree_type *);
195
etree_type *exp_trinop
196
  (int,etree_type *, etree_type *, etree_type *);
197
etree_type *exp_unop
198
  (int, etree_type *);
199
etree_type *exp_nameop
200
  (int, const char *);
201
etree_type *exp_assign
202
  (const char *, etree_type *);
203
etree_type *exp_defsym
204
  (const char *, etree_type *);
205
etree_type *exp_provide
206
  (const char *, etree_type *, bfd_boolean);
207
etree_type *exp_assert
208
  (etree_type *, const char *);
209
void exp_print_tree
210
  (etree_type *);
211
bfd_vma exp_get_vma
212
  (etree_type *, bfd_vma, char *);
213
int exp_get_value_int
214
  (etree_type *, int, char *);
215
fill_type *exp_get_fill
216
  (etree_type *, fill_type *, char *);
217
bfd_vma exp_get_abs_int
218
  (etree_type *, int, char *);
219
 
220
#endif

powered by: WebSVN 2.1.0

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