1 /* ldexp.h - 2 Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002 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 */ 26 typedef struct { 27 bfd_vma value; 28 char *str; 29 struct lang_output_section_statement_struct *section; 30 bfd_boolean valid_p; 31 } etree_value_type; 32 33 typedef struct { 34 int node_code; 35 enum { 36 etree_binary, 37 etree_trinary, 38 etree_unary, 39 etree_name, 40 etree_assign, 41 etree_provide, 42 etree_provided, 43 etree_undef, 44 etree_unspec, 45 etree_value, 46 etree_assert, 47 etree_rel 48 } node_class; 49 } node_type; 50 51 typedef union etree_union { 52 node_type type; 53 struct { 54 node_type type; 55 union etree_union *lhs; 56 union etree_union *rhs; 57 } binary; 58 struct { 59 node_type type; 60 union etree_union *cond; 61 union etree_union *lhs; 62 union etree_union *rhs; 63 } trinary; 64 struct { 65 node_type type; 66 const char *dst; 67 union etree_union *src; 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 extern struct exp_data_seg { 95 enum { 96 exp_dataseg_none, 97 exp_dataseg_align_seen, 98 exp_dataseg_end_seen, 99 exp_dataseg_adjust 100 } phase; 101 bfd_vma base, end, pagesize; 102 } exp_data_seg; 103 104 typedef struct _fill_type fill_type; 105 106 etree_type *exp_intop 107 PARAMS ((bfd_vma)); 108 etree_type *exp_bigintop 109 PARAMS ((bfd_vma, char *)); 110 etree_type *exp_relop 111 PARAMS ((asection *, bfd_vma)); 112 etree_value_type invalid 113 PARAMS ((void)); 114 etree_value_type exp_fold_tree 115 PARAMS ((etree_type *, struct lang_output_section_statement_struct *, 116 lang_phase_type, bfd_vma, bfd_vma *)); 117 etree_type *exp_binop 118 PARAMS ((int, etree_type *, etree_type *)); 119 etree_type *exp_trinop 120 PARAMS ((int,etree_type *, etree_type *, etree_type *)); 121 etree_type *exp_unop 122 PARAMS ((int, etree_type *)); 123 etree_type *exp_nameop 124 PARAMS ((int, const char *)); 125 etree_type *exp_assop 126 PARAMS ((int, const char *, etree_type *)); 127 etree_type *exp_provide 128 PARAMS ((const char *, etree_type *)); 129 etree_type *exp_assert 130 PARAMS ((etree_type *, const char *)); 131 void exp_print_tree 132 PARAMS ((etree_type *)); 133 bfd_vma exp_get_vma 134 PARAMS ((etree_type *, bfd_vma, char *, lang_phase_type)); 135 int exp_get_value_int 136 PARAMS ((etree_type *, int, char *, lang_phase_type)); 137 fill_type *exp_get_fill 138 PARAMS ((etree_type *, fill_type *, char *, lang_phase_type)); 139 bfd_vma exp_get_abs_int 140 PARAMS ((etree_type *, int, char *, lang_phase_type)); 141 bfd_vma align_n 142 PARAMS ((bfd_vma, bfd_vma)); 143 144 #endif 145