/* ldexp.h -
- Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2007, 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
This file is part of the GNU Binutils.
node_type type;
const char *dst;
union etree_union *src;
+ bfd_boolean defsym;
bfd_boolean hidden;
} assign;
struct {
} assert_s;
} etree_type;
-typedef enum {
+/* Expression evaluation control. */
+typedef enum
+{
+ /* Parsing linker script. Will only return "valid" for expressions
+ that evaluate to a constant. */
lang_first_phase_enum,
+ /* Prior to section sizing. */
lang_mark_phase_enum,
+ /* During section sizing. */
lang_allocating_phase_enum,
+ /* During assignment of symbol values when relaxation in progress. */
lang_assigning_phase_enum,
+ /* Final assignment of symbol values. */
lang_final_phase_enum
} lang_phase_type;
/* 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
+ does the false branch of a trinary expression. */
+ const char *assign_name;
+
/* Working results. */
etree_value_type result;
bfd_vma dot;
struct {
enum phase_enum phase;
- bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
+ bfd_vma base, relro_offset, relro_end, end, pagesize, maxpagesize;
enum relro_enum relro;
etree_type *exp_nameop
(int, const char *);
etree_type *exp_assign
- (const char *, etree_type *);
+ (const char *, etree_type *, bfd_boolean);
etree_type *exp_defsym
(const char *, etree_type *);
etree_type *exp_provide
(etree_type *, fill_type *, char *);
bfd_vma exp_get_abs_int
(etree_type *, int, char *);
+void ldexp_init (void);
+void ldexp_finalize_syms (void);
+void ldexp_finish (void);
#endif