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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [ld/] [ldexp.h] - Blame information for rev 853

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

Line No. Rev Author Line
1 38 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
typedef struct {
34
  int node_code;
35
  unsigned int lineno;
36
  enum {
37
    etree_binary,
38
    etree_trinary,
39
    etree_unary,
40
    etree_name,
41
    etree_assign,
42
    etree_provide,
43
    etree_provided,
44
    etree_value,
45
    etree_assert,
46
    etree_rel
47
  } node_class;
48
} node_type;
49
 
50
typedef union etree_union {
51
  node_type type;
52
  struct {
53
    node_type type;
54
    union etree_union *lhs;
55
    union etree_union *rhs;
56
  } binary;
57
  struct {
58
    node_type type;
59
    union etree_union *cond;
60
    union etree_union *lhs;
61
    union etree_union *rhs;
62
  } trinary;
63
  struct {
64
    node_type type;
65
    const char *dst;
66
    union etree_union *src;
67
    bfd_boolean hidden;
68
  } assign;
69
  struct {
70
    node_type type;
71
    union etree_union *child;
72
  } unary;
73
  struct {
74
    node_type type;
75
    const char *name;
76
  } name;
77
  struct {
78
    node_type type;
79
    bfd_vma value;
80
    char *str;
81
  } value;
82
  struct {
83
    node_type type;
84
    asection *section;
85
    bfd_vma value;
86
  } rel;
87
  struct {
88
    node_type type;
89
    union etree_union *child;
90
    const char *message;
91
  } assert_s;
92
} etree_type;
93
 
94
typedef enum {
95
  lang_first_phase_enum,
96
  lang_mark_phase_enum,
97
  lang_allocating_phase_enum,
98
  lang_final_phase_enum
99
} lang_phase_type;
100
 
101
union lang_statement_union;
102
 
103
struct ldexp_control {
104
  /* Modify expression evaluation depending on this.  */
105
  lang_phase_type phase;
106
 
107
  /* Principally used for diagnostics.  */
108
  bfd_boolean assigning_to_dot;
109
 
110
  /* Working results.  */
111
  etree_value_type result;
112
  bfd_vma dot;
113
 
114
  /* Current dot and section passed to ldexp folder.  */
115
  bfd_vma *dotp;
116
  asection *section;
117
 
118
  /* State machine and results for DATASEG.  */
119
  struct {
120
    enum {
121
      exp_dataseg_none,
122
      exp_dataseg_align_seen,
123
      exp_dataseg_relro_seen,
124
      exp_dataseg_end_seen,
125
      exp_dataseg_relro_adjust,
126
      exp_dataseg_adjust
127
    } phase;
128
 
129
    bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
130
 
131
    enum {
132
      exp_dataseg_relro_none,
133
      exp_dataseg_relro_start,
134
      exp_dataseg_relro_end,
135
    } relro;
136
 
137
    union lang_statement_union *relro_start_stat;
138
    union lang_statement_union *relro_end_stat;
139
  } dataseg;
140
};
141
 
142
extern struct ldexp_control expld;
143
 
144
/* A maps from a segment name to a base address.  */
145
typedef struct segment_struct {
146
  /* The next segment in the linked list.  */
147
  struct segment_struct *next;
148
  /* The name of the sgement.  */
149
  const char *name;
150
  /* The base address for the segment.  */
151
  bfd_vma value;
152
  /* True if a SEGMENT_START directive corresponding to this segment
153
     has been seen.  */
154
  bfd_boolean used;
155
} segment_type;
156
 
157
/* The segments specified by the user on the command-line.  */
158
extern segment_type *segments;
159
 
160
typedef struct _fill_type fill_type;
161
 
162
etree_type *exp_intop
163
  (bfd_vma);
164
etree_type *exp_bigintop
165
  (bfd_vma, char *);
166
etree_type *exp_relop
167
  (asection *, bfd_vma);
168
void exp_fold_tree
169
  (etree_type *, asection *, bfd_vma *);
170
etree_type *exp_binop
171
  (int, etree_type *, etree_type *);
172
etree_type *exp_trinop
173
  (int,etree_type *, etree_type *, etree_type *);
174
etree_type *exp_unop
175
  (int, etree_type *);
176
etree_type *exp_nameop
177
  (int, const char *);
178
etree_type *exp_assop
179
  (int, const char *, etree_type *);
180
etree_type *exp_provide
181
  (const char *, etree_type *, bfd_boolean);
182
etree_type *exp_assert
183
  (etree_type *, const char *);
184
void exp_print_tree
185
  (etree_type *);
186
bfd_vma exp_get_vma
187
  (etree_type *, bfd_vma, char *);
188
int exp_get_value_int
189
  (etree_type *, int, char *);
190
fill_type *exp_get_fill
191
  (etree_type *, fill_type *, char *);
192
bfd_vma exp_get_abs_int
193
  (etree_type *, int, char *);
194
 
195
#endif

powered by: WebSVN 2.1.0

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