gdb: Support XSAVE layouts for the current host in the FreeBSD x86 targets.
[binutils-gdb.git] / ld / ldexp.h
index 1055053e28dd03f03160aa08223a16a72771060e..7c302753192fdce24ec72d660909e24fe4f15fa1 100644 (file)
@@ -1,5 +1,5 @@
 /* ldexp.h -
-   Copyright (C) 1991-2021 Free Software Foundation, Inc.
+   Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -26,7 +26,7 @@ typedef struct {
   bfd_vma value;
   char *str;
   asection *section;
-  bfd_boolean valid_p;
+  bool valid_p;
 } etree_value_type;
 
 enum node_tree_enum {
@@ -66,7 +66,7 @@ typedef union etree_union {
     node_type type;
     const char *dst;
     union etree_union *src;
-    bfd_boolean hidden;
+    bool hidden;
   } assign;
   struct {
     node_type type;
@@ -133,10 +133,15 @@ enum relro_enum {
   exp_seg_relro_end,
 };
 
+struct lang_output_section_statement_struct;
+
 typedef struct {
   enum phase_enum phase;
 
-  bfd_vma base, relro_offset, relro_end, end, pagesize, maxpagesize;
+  bfd_vma base, relro_offset, relro_end, end;
+  /* MAXPAGESIZE and COMMMONPAGESIZE as passed to DATA_SEGMENT_ALIGN.
+     relropagesize sets the alignment of the end of the relro segment.  */
+  bfd_vma maxpagesize, commonpagesize, relropagesize;
 
   enum relro_enum relro;
 
@@ -149,14 +154,14 @@ struct ldexp_control {
   lang_phase_type phase;
 
   /* Principally used for diagnostics.  */
-  bfd_boolean assigning_to_dot;
+  bool assigning_to_dot;
 
   /* Set if the current expression used "dot", SEGMENT_START or
      ORIGIN, but not ABSOLUTE or combined symbols in a way that forces
      an absolute result.  Used in tracking symbols assigned from dot
      outside of output section statements, in order to later convert
      them from absolute.  */
-  bfd_boolean rel_from_abs;
+  bool rel_from_abs;
 
   /* If evaluating an assignment, the destination.  Cleared if an
      etree_name NAME matches this, to signal a self-assignment.
@@ -173,10 +178,17 @@ struct ldexp_control {
   etree_value_type result;
   bfd_vma dot;
 
-  /* Current dot and section passed to ldexp folder.  */
+  /* Current dot and section passed to ldexp folder.  SECTION will be
+     bfd_abs_section for expressions outside of an output section
+     statement.  */
   bfd_vma *dotp;
   asection *section;
 
+  /* Last output section statement.  For expressions within an output
+     section statement, this will be the current output section
+     statement being processed.  */
+  struct lang_output_section_statement_struct *last_os;
+
   /* State machine and results for DATASEG.  */
   seg_align_type dataseg;
 };
@@ -193,7 +205,7 @@ typedef struct segment_struct {
   bfd_vma value;
   /* True if a SEGMENT_START directive corresponding to this segment
      has been seen.  */
-  bfd_boolean used;
+  bool used;
 } segment_type;
 
 /* The segments specified by the user on the command-line.  */
@@ -208,9 +220,10 @@ etree_type *exp_bigintop
 etree_type *exp_relop
   (asection *, bfd_vma);
 void exp_fold_tree
-  (etree_type *, asection *, bfd_vma *);
+  (etree_type *, struct lang_output_section_statement_struct *,
+   asection *, bfd_vma *);
 void exp_fold_tree_no_dot
-  (etree_type *);
+  (etree_type *, struct lang_output_section_statement_struct *);
 etree_type *exp_binop
   (int, etree_type *, etree_type *);
 etree_type *exp_trinop
@@ -220,26 +233,26 @@ etree_type *exp_unop
 etree_type *exp_nameop
   (int, const char *);
 etree_type *exp_assign
-  (const char *, etree_type *, bfd_boolean);
+  (const char *, etree_type *, bool);
 etree_type *exp_defsym
   (const char *, etree_type *);
 etree_type *exp_provide
-  (const char *, etree_type *, bfd_boolean);
+  (const char *, etree_type *, bool);
 etree_type *exp_assert
   (etree_type *, const char *);
 void exp_print_tree
   (etree_type *);
 bfd_vma exp_get_vma
-  (etree_type *, bfd_vma, char *);
+  (etree_type *, struct lang_output_section_statement_struct *, bfd_vma, char *);
 int exp_get_power
-  (etree_type *, char *);
+  (etree_type *, struct lang_output_section_statement_struct *, char *);
 fill_type *exp_get_fill
   (etree_type *, fill_type *, char *);
 bfd_vma exp_get_abs_int
   (etree_type *, int, char *);
 void ldexp_init (void);
 void ldexp_finalize_syms (void);
-bfd_boolean ldexp_is_final_sym_absolute (const struct bfd_link_hash_entry *);
+bool ldexp_is_final_sym_absolute (const struct bfd_link_hash_entry *);
 void ldexp_finish (void);
 
 #endif