/* ldexp.h -
- Copyright (C) 1991-2015 Free Software Foundation, Inc.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
This file is part of the GNU Binutils.
enum phase_enum {
/* We step through the first four states here as we see the
associated linker script tokens. */
- exp_dataseg_none,
- exp_dataseg_align_seen,
- exp_dataseg_relro_seen,
- exp_dataseg_end_seen,
+ exp_seg_none,
+ exp_seg_align_seen,
+ exp_seg_relro_seen,
+ exp_seg_end_seen,
/* The last three states are final, and affect the value returned
- by DATA_SEGMENT_ALIGN. */
- exp_dataseg_relro_adjust,
- exp_dataseg_adjust,
- exp_dataseg_done
+ by XXX_SEGMENT_ALIGN. */
+ exp_seg_relro_adjust,
+ exp_seg_adjust,
+ exp_seg_done
};
enum relro_enum {
- exp_dataseg_relro_none,
- exp_dataseg_relro_start,
- exp_dataseg_relro_end,
+ exp_seg_relro_none,
+ exp_seg_relro_start,
+ exp_seg_relro_end,
};
+typedef struct {
+ enum phase_enum phase;
+
+ bfd_vma base, relro_offset, relro_end, end, pagesize, maxpagesize;
+
+ enum relro_enum relro;
+
+ union lang_statement_union *relro_start_stat;
+ union lang_statement_union *relro_end_stat;
+} seg_align_type;
+
struct ldexp_control {
/* Modify expression evaluation depending on this. */
lang_phase_type phase;
/* Principally used for diagnostics. */
bfd_boolean 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;
+
/* If evaluating an assignment, the destination. Cleared if an
etree_name NAME matches this, to signal a self-assignment.
Note that an etree_name DEFINED does not clear this field, nor
asection *section;
/* State machine and results for DATASEG. */
- struct {
- enum phase_enum phase;
-
- bfd_vma base, relro_offset, relro_end, end, pagesize, maxpagesize;
-
- enum relro_enum relro;
-
- union lang_statement_union *relro_start_stat;
- union lang_statement_union *relro_end_stat;
- } dataseg;
+ seg_align_type dataseg;
};
extern struct ldexp_control expld;
bfd_vma exp_get_abs_int
(etree_type *, int, char *);
void ldexp_init (void);
+void ldexp_finalize_syms (void);
void ldexp_finish (void);
#endif