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 146

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
   2003, 2004, 2005, 2007, 2011 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_assigning_phase_enum,
101
  lang_final_phase_enum
102
} lang_phase_type;
103
 
104
union lang_statement_union;
105
 
106
enum phase_enum {
107
  /* We step through the first four states here as we see the
108
     associated linker script tokens.  */
109
  exp_dataseg_none,
110
  exp_dataseg_align_seen,
111
  exp_dataseg_relro_seen,
112
  exp_dataseg_end_seen,
113
  /* The last three states are final, and affect the value returned
114
     by DATA_SEGMENT_ALIGN.  */
115
  exp_dataseg_relro_adjust,
116
  exp_dataseg_adjust,
117
  exp_dataseg_done
118
};
119
 
120
enum relro_enum {
121
  exp_dataseg_relro_none,
122
  exp_dataseg_relro_start,
123
  exp_dataseg_relro_end,
124
};
125
 
126
struct ldexp_control {
127
  /* Modify expression evaluation depending on this.  */
128
  lang_phase_type phase;
129
 
130
  /* Principally used for diagnostics.  */
131
  bfd_boolean assigning_to_dot;
132
 
133
  /* Working results.  */
134
  etree_value_type result;
135
  bfd_vma dot;
136
 
137
  /* Current dot and section passed to ldexp folder.  */
138
  bfd_vma *dotp;
139
  asection *section;
140
 
141
  /* State machine and results for DATASEG.  */
142
  struct {
143
    enum phase_enum phase;
144
 
145
    bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
146
 
147
    enum relro_enum relro;
148
 
149
    union lang_statement_union *relro_start_stat;
150
    union lang_statement_union *relro_end_stat;
151
  } dataseg;
152
};
153
 
154
extern struct ldexp_control expld;
155
 
156
/* A maps from a segment name to a base address.  */
157
typedef struct segment_struct {
158
  /* The next segment in the linked list.  */
159
  struct segment_struct *next;
160
  /* The name of the sgement.  */
161
  const char *name;
162
  /* The base address for the segment.  */
163
  bfd_vma value;
164
  /* True if a SEGMENT_START directive corresponding to this segment
165
     has been seen.  */
166
  bfd_boolean used;
167
} segment_type;
168
 
169
/* The segments specified by the user on the command-line.  */
170
extern segment_type *segments;
171
 
172
typedef struct _fill_type fill_type;
173
 
174
etree_type *exp_intop
175
  (bfd_vma);
176
etree_type *exp_bigintop
177
  (bfd_vma, char *);
178
etree_type *exp_relop
179
  (asection *, bfd_vma);
180
void exp_fold_tree
181
  (etree_type *, asection *, bfd_vma *);
182
void exp_fold_tree_no_dot
183
  (etree_type *);
184
etree_type *exp_binop
185
  (int, etree_type *, etree_type *);
186
etree_type *exp_trinop
187
  (int,etree_type *, etree_type *, etree_type *);
188
etree_type *exp_unop
189
  (int, etree_type *);
190
etree_type *exp_nameop
191
  (int, const char *);
192
etree_type *exp_assign
193
  (const char *, etree_type *);
194
etree_type *exp_defsym
195
  (const char *, etree_type *);
196
etree_type *exp_provide
197
  (const char *, etree_type *, bfd_boolean);
198
etree_type *exp_assert
199
  (etree_type *, const char *);
200
void exp_print_tree
201
  (etree_type *);
202
bfd_vma exp_get_vma
203
  (etree_type *, bfd_vma, char *);
204
int exp_get_value_int
205
  (etree_type *, int, char *);
206
fill_type *exp_get_fill
207
  (etree_type *, fill_type *, char *);
208
bfd_vma exp_get_abs_int
209
  (etree_type *, int, char *);
210
 
211
#endif

powered by: WebSVN 2.1.0

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