ldexp.h revision 130562
1/* ldexp.h - 2 Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 3 2003, 2004 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 char *str; 29 struct lang_output_section_statement_struct *section; 30 bfd_boolean valid_p; 31} etree_value_type; 32 33typedef 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 51typedef 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 94extern 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 104typedef struct _fill_type fill_type; 105 106etree_type *exp_intop 107 (bfd_vma); 108etree_type *exp_bigintop 109 (bfd_vma, char *); 110etree_type *exp_relop 111 (asection *, bfd_vma); 112etree_value_type invalid 113 (void); 114etree_value_type exp_fold_tree 115 (etree_type *, struct lang_output_section_statement_struct *, 116 lang_phase_type, bfd_vma, bfd_vma *); 117etree_type *exp_binop 118 (int, etree_type *, etree_type *); 119etree_type *exp_trinop 120 (int,etree_type *, etree_type *, etree_type *); 121etree_type *exp_unop 122 (int, etree_type *); 123etree_type *exp_nameop 124 (int, const char *); 125etree_type *exp_assop 126 (int, const char *, etree_type *); 127etree_type *exp_provide 128 (const char *, etree_type *); 129etree_type *exp_assert 130 (etree_type *, const char *); 131void exp_print_tree 132 (etree_type *); 133bfd_vma exp_get_vma 134 (etree_type *, bfd_vma, char *, lang_phase_type); 135int exp_get_value_int 136 (etree_type *, int, char *, lang_phase_type); 137fill_type *exp_get_fill 138 (etree_type *, fill_type *, char *, lang_phase_type); 139bfd_vma exp_get_abs_int 140 (etree_type *, int, char *, lang_phase_type); 141 142#endif 143