* gas/all/assign.s: New.
[deliverable/binutils-gdb.git] / ld / ldexp.h
index 8211f44c17b14bac46b9e0f47ecae8b81ba7f55f..59a5627508636d2926e74bd25580197bc437ea1a 100644 (file)
@@ -1,12 +1,12 @@
 /* ldexp.h -
-
-   Copyright (C) 1991 Free Software Foundation, Inc.
+   Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
+   2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GLD, the Gnu Linker.
 
    GLD is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 1, or (at your option)
+   the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    GLD is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with GLD; see the file COPYING.  If not, write to
-   the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-
+   along with GLD; see the file COPYING.  If not, write to the Free
+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
+#ifndef LDEXP_H
+#define LDEXP_H
 
 /* The result of an expression tree */
-typedef struct 
-{
+typedef struct {
   bfd_vma value;
+  char *str;
   struct lang_output_section_statement_struct *section;
-  boolean valid;
+  bfd_boolean valid_p;
 } etree_value_type;
 
-
-
-typedef struct 
-{
+typedef struct {
   int node_code;
-  enum { etree_binary,
-          etree_trinary,
-          etree_unary,
-          etree_name,
-          etree_assign,
-          etree_undef,
-          etree_unspec,
-          etree_value } node_class;
+  enum {
+    etree_binary,
+    etree_trinary,
+    etree_unary,
+    etree_name,
+    etree_assign,
+    etree_provide,
+    etree_provided,
+    etree_undef,
+    etree_unspec,
+    etree_value,
+    etree_assert,
+    etree_rel
+  } node_class;
 } node_type;
 
-
-
-typedef union etree_union 
-{
+typedef union etree_union {
   node_type type;
   struct {
     node_type type;
@@ -62,66 +63,98 @@ typedef union etree_union
   } trinary;
   struct {
     node_type type;
-    char *dst;
+    const char *dst;
     union etree_union *src;
   } assign;
-
   struct {
     node_type type;
-    union   etree_union *child;
+    union etree_union *child;
   } unary;
   struct {
     node_type type;
-    char *name;
+    const char *name;
   } name;
   struct {
     node_type type;
     bfd_vma value;
+    char *str;
   } value;
-
+  struct {
+    node_type type;
+    asection *section;
+    bfd_vma value;
+  } rel;
+  struct {
+    node_type type;
+    union etree_union *child;
+    const char *message;
+  } assert_s;
 } etree_type;
 
-
-PROTO(etree_type *,exp_intop,(bfd_vma));
-
-PROTO(etree_value_type, invalid,(void));
-PROTO(etree_value_type, exp_fold_tree,(etree_type *, struct
-                                   lang_output_section_statement_struct *, lang_phase_type,
-                                       bfd_vma, bfd_vma *));
-
-PROTO(etree_type *, exp_binop,(int, etree_type *, etree_type *));
-PROTO(etree_type *,exp_trinop,(int,etree_type *, etree_type *, etree_type *));
-PROTO(etree_type *,exp_unop,(int, etree_type *));
-PROTO(etree_type *,exp_nameop,(int, char *));
-PROTO(etree_type *,exp_assop,(int, char *, etree_type *));
-PROTO(void, exp_print_tree,(struct _iobuf *, etree_type *));
-PROTO(bfd_vma, exp_get_vma,(etree_type *, bfd_vma, char *, enum boolean));
-PROTO(int, exp_get_value_int,(etree_type *, int, char *, enum boolean));
-#if 0
-#define LONG 1000
-#define SHORT 1001
-#define BYTE 1002
-#define NAME 1003
-#define NEXT 1004
-#define DEFINED 1005
-#define SIZEOF 1006
-#define ADDR 1007
-#define ALIGN_K 1008
-#define BLOCK 1009
-#define SECTIONS 1010
-#define SIZEOF_HEADERS 1011
-#define MEMORY 1012
-#define DSECT 1013
-#define COPY 1014
-#define INFO 1015
-#define OVERLAY 1016
-#define TARGET_K 1017
-#define MAP 1018
-#define ENTRY 1019
-#define ORIGIN 1020
-#define LENGTH 1021
-#define NOLOAD 1022
-#define SEARCH_DIR 1023
-#define ALIGNMENT 1024
+extern struct exp_data_seg {
+  enum {
+    exp_dataseg_none,
+    exp_dataseg_align_seen,
+    exp_dataseg_relro_seen,
+    exp_dataseg_end_seen,
+    exp_dataseg_relro_adjust,
+    exp_dataseg_adjust
+  } phase;
+  bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
+} exp_data_seg;
+
+/* A maps from a segment name to a base address.  */
+typedef struct segment_struct {
+  /* The next segment in the linked list.  */
+  struct segment_struct *next;
+  /* The name of the sgement.  */
+  const char *name;
+  /* The base address for the segment.  */
+  bfd_vma value;
+  /* True if a SEGMENT_START directive corresponding to this segment
+     has been seen.  */
+  bfd_boolean used;
+} segment_type;
+
+/* The segments specified by the user on the command-line.  */
+extern segment_type *segments;
+
+typedef struct _fill_type fill_type;
+
+etree_type *exp_intop
+  (bfd_vma);
+etree_type *exp_bigintop
+  (bfd_vma, char *);
+etree_type *exp_relop
+  (asection *, bfd_vma);
+etree_value_type invalid
+  (void);
+etree_value_type exp_fold_tree
+  (etree_type *, struct lang_output_section_statement_struct *,
+   lang_phase_type, bfd_vma, bfd_vma *);
+etree_type *exp_binop
+  (int, etree_type *, etree_type *);
+etree_type *exp_trinop
+  (int,etree_type *, etree_type *, etree_type *);
+etree_type *exp_unop
+  (int, etree_type *);
+etree_type *exp_nameop
+  (int, const char *);
+etree_type *exp_assop
+  (int, const char *, etree_type *);
+etree_type *exp_provide
+  (const char *, etree_type *);
+etree_type *exp_assert
+  (etree_type *, const char *);
+void exp_print_tree
+  (etree_type *);
+bfd_vma exp_get_vma
+  (etree_type *, bfd_vma, char *, lang_phase_type);
+int exp_get_value_int
+  (etree_type *, int, char *, lang_phase_type);
+fill_type *exp_get_fill
+  (etree_type *, fill_type *, char *, lang_phase_type);
+bfd_vma exp_get_abs_int
+  (etree_type *, int, char *, lang_phase_type);
 
 #endif
This page took 0.026148 seconds and 4 git commands to generate.