ldexp.h revision 77298
1/* ldexp.h -
2   Copyright 1991, 92, 93, 94, 95, 98, 2000
3   Free Software Foundation, Inc.
4
5   This file is part of GLD, the Gnu Linker.
6
7   GLD 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 2, or (at your option)
10   any later version.
11
12   GLD 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 GLD; see the file COPYING.  If not, write to the Free
19   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20   02111-1307, USA.  */
21
22#ifndef LDEXP_H
23#define LDEXP_H
24
25/* The result of an expression tree */
26typedef struct {
27  bfd_vma value;
28  struct lang_output_section_statement_struct *section;
29  boolean valid_p;
30} etree_value_type;
31
32typedef struct {
33  int node_code;
34  enum { etree_binary,
35	   etree_trinary,
36	   etree_unary,
37	   etree_name,
38	   etree_assign,
39	   etree_provide,
40	   etree_undef,
41	   etree_unspec,
42	   etree_value,
43	   etree_assert,
44	   etree_rel } node_class;
45} node_type;
46
47typedef union etree_union {
48  node_type type;
49  struct {
50    node_type type;
51    union etree_union *lhs;
52    union etree_union *rhs;
53  } binary;
54  struct {
55    node_type type;
56    union etree_union *cond;
57    union etree_union *lhs;
58    union etree_union *rhs;
59  } trinary;
60  struct {
61    node_type type;
62    CONST char *dst;
63    union etree_union *src;
64  } assign;
65
66  struct {
67    node_type type;
68    union etree_union *child;
69  } unary;
70  struct {
71    node_type type;
72    CONST char *name;
73  } name;
74  struct {
75    node_type type;
76    bfd_vma value;
77  } value;
78  struct {
79    node_type type;
80    asection *section;
81    bfd_vma value;
82  } rel;
83  struct {
84    node_type type;
85    union etree_union *child;
86    const char *message;
87  } assert_s;
88} etree_type;
89
90etree_type *exp_intop PARAMS ((bfd_vma));
91etree_type *exp_relop PARAMS ((asection *, bfd_vma));
92etree_value_type invalid PARAMS ((void));
93etree_value_type exp_fold_tree PARAMS ((etree_type *, struct
94					lang_output_section_statement_struct *,
95					lang_phase_type,
96					bfd_vma, bfd_vma *));
97etree_type *exp_binop PARAMS ((int, etree_type *, etree_type *));
98etree_type *exp_trinop PARAMS ((int,etree_type *, etree_type *, etree_type *));
99etree_type *exp_unop PARAMS ((int, etree_type *));
100etree_type *exp_nameop PARAMS ((int, CONST char *));
101etree_type *exp_assop PARAMS ((int, CONST char *, etree_type *));
102etree_type *exp_provide PARAMS ((const char *, etree_type *));
103etree_type *exp_assert PARAMS ((etree_type *, const char *));
104void exp_print_tree PARAMS ((etree_type *));
105bfd_vma exp_get_vma PARAMS ((etree_type *, bfd_vma, char *, lang_phase_type));
106int exp_get_value_int PARAMS ((etree_type *, int, char *, lang_phase_type));
107bfd_vma exp_get_abs_int PARAMS ((etree_type *, int, char *, lang_phase_type));
108
109#endif
110