/* ldlang.h - linker command language support
- Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
- Free Software Foundation, Inc.
+ Copyright (C) 1991-2016 Free Software Foundation, Inc.
This file is part of the GNU Binutils.
{
lang_memory_region_name name_list;
struct memory_region_struct *next;
+ union etree_union *origin_exp;
bfd_vma origin;
bfd_size_type length;
+ union etree_union *length_exp;
bfd_vma current;
union lang_statement_union *last_os;
flagword flags;
unsigned int processed_lma : 1;
unsigned int all_input_readonly : 1;
/* If this section should be ignored. */
- unsigned int ignored : 1;
- /* If there is a symbol relative to this section. */
- unsigned int section_relative_symbol : 1;
+ unsigned int ignored : 1;
+ /* If this section should update "dot". Prevents section being ignored. */
+ unsigned int update_dot : 1;
+ /* If this section is after assignment to _end. */
+ unsigned int after_end : 1;
+ /* If this section uses the alignment of its input sections. */
+ unsigned int align_lma_with_input : 1;
} lang_output_section_statement_type;
typedef struct
/* 1 means this file was specified in a -l option. */
unsigned int maybe_archive : 1;
+ /* 1 means this file was specified in a -l:namespec option. */
+ unsigned int full_name_provided : 1;
+
/* 1 means search a set of directories for this file. */
unsigned int search_dirs : 1;
- /* 1 means this was found in a search directory marked as sysrooted,
- if search_dirs is false, otherwise, that it should be
- searched in ld_sysroot before any other location, as long as it
- starts with a slash. */
+ /* 1 means this was found when processing a script in the sysroot. */
unsigned int sysrooted : 1;
/* 1 means this is base file of incremental load.
/* Set if the file does not exist. */
unsigned int missing_file : 1;
+ /* Set if reloading an archive or --as-needed lib. */
+ unsigned int reload : 1;
+
#ifdef ENABLE_PLUGINS
/* Set if the file was claimed by a plugin. */
unsigned int claimed : 1;
/* Set if the file was claimed from an archive. */
unsigned int claim_archive : 1;
- /* Set if reloading an --as-needed lib. */
- unsigned int reload : 1;
+ /* Set if added by the lto plugin add_input_file callback. */
+ unsigned int lto_output : 1;
#endif /* ENABLE_PLUGINS */
+
+ /* Head of list of pushed flags. */
+ struct lang_input_statement_flags *pushed;
};
typedef struct lang_input_statement_struct
asection *section;
} lang_input_section_type;
+struct map_symbol_def {
+ struct bfd_link_hash_entry *entry;
+ struct map_symbol_def *next;
+};
+
+/* For input sections, when writing a map file: head / tail of a linked
+ list of hash table entries for symbols defined in this section. */
+typedef struct input_section_userdata_struct
+{
+ struct map_symbol_def *map_symbol_def_head;
+ struct map_symbol_def **map_symbol_def_tail;
+ unsigned long map_symbol_def_count;
+} input_section_userdata_type;
+
+#define get_userdata(x) ((x)->userdata)
+
+
typedef struct lang_wild_statement_struct lang_wild_statement_type;
typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *,
- asection *, lang_input_statement_type *, void *);
+ asection *, struct flag_info *,
+ lang_input_statement_type *, void *);
typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *,
lang_input_statement_type *,
const char *name;
};
-/* This structure records symbols for which we need to keep track of
- definedness for use in the DEFINED () test. */
-
-struct lang_definedness_hash_entry
-{
- struct bfd_hash_entry root;
- int iteration;
-};
-
/* Used by place_orphan to keep track of orphan sections and statements. */
struct orphan_save
lang_output_section_statement_type **os_tail;
};
+struct asneeded_minfo
+{
+ struct asneeded_minfo *next;
+ const char *soname;
+ bfd *ref;
+ const char *name;
+};
+
extern struct lang_phdr *lang_phdr_list;
extern struct lang_nocrossrefs *nocrossref_list;
extern const char *output_target;
extern lang_statement_list_type lang_output_section_statement;
extern struct lang_input_statement_flags input_flags;
extern bfd_boolean lang_has_input_file;
-extern etree_type *base;
extern lang_statement_list_type *stat_ptr;
extern bfd_boolean delete_output_file_on_failure;
extern lang_statement_list_type input_file_chain;
extern int lang_statement_iteration;
+extern struct asneeded_minfo **asneeded_list_tail;
+
+extern void (*output_bfd_hash_table_free_fn) (struct bfd_link_hash_table *);
extern void lang_init
(void);
extern void lang_add_output
(const char *, int from_script);
extern lang_output_section_statement_type *lang_enter_output_section_statement
- (const char *output_section_statement_name,
- etree_type *address_exp,
- enum section_type sectype,
- etree_type *align,
- etree_type *subalign,
- etree_type *, int);
+ (const char *, etree_type *, enum section_type, etree_type *, etree_type *,
+ etree_type *, int, int);
extern void lang_final
(void);
extern void lang_relax_sections
extern void lang_leave_output_section_statement
(fill_type *, const char *, lang_output_section_phdr_list *,
const char *);
-extern void lang_abs_symbol_at_end_of
- (const char *, const char *);
-extern void lang_abs_symbol_at_beginning_of
- (const char *, const char *);
extern void lang_statement_append
(lang_statement_list_type *, lang_statement_union_type *,
lang_statement_union_type **);
(void);
extern void lang_do_assignments
(lang_phase_type);
+extern asection *section_for_dot
+ (void);
#define LANG_FOR_EACH_INPUT_STATEMENT(statement) \
lang_input_statement_type *statement; \
extern void ldlang_add_file
(lang_input_statement_type *);
extern lang_output_section_statement_type *lang_output_section_find_by_flags
- (const asection *, lang_output_section_statement_type **,
+ (const asection *, flagword, lang_output_section_statement_type **,
lang_match_sec_type_func);
extern lang_output_section_statement_type *lang_insert_orphan
(asection *, const char *, int, lang_output_section_statement_type *,
(const char *, lang_input_file_enum_type, const char *);
extern void lang_add_keepsyms_file
(const char *);
+extern lang_output_section_statement_type *lang_output_section_get
+ (const asection *);
extern lang_output_section_statement_type *lang_output_section_statement_lookup
(const char *, int, bfd_boolean);
extern lang_output_section_statement_type *next_matching_output_section_statement
(lang_output_section_statement_type *, int);
extern void ldlang_add_undef
(const char *const, bfd_boolean);
+extern void ldlang_add_require_defined
+ (const char *const);
extern void lang_add_output_format
(const char *, const char *, const char *, int);
extern void lang_list_init
(size_t);
extern void strip_excluded_output_sections
(void);
+extern void lang_clear_os_map
+ (void);
extern void dprint_statement
(lang_statement_union_type *, int);
extern void lang_size_sections
(void);
extern void lang_add_section
(lang_statement_list_type *, asection *,
- lang_output_section_statement_type *);
+ struct flag_info *, lang_output_section_statement_type *);
extern void lang_new_phdr
(const char *, etree_type *, bfd_boolean, bfd_boolean, etree_type *,
etree_type *);
(const char *);
extern const char *lang_get_output_target
(void);
-extern void lang_track_definedness (const char *);
-extern int lang_symbol_definition_iteration (const char *);
-extern void lang_update_definedness
- (const char *, struct bfd_link_hash_entry *);
-
extern void add_excluded_libs (const char *);
extern bfd_boolean load_symbols
(lang_input_statement_type *, lang_statement_list_type *);
extern void
lang_ld_feature (char *);
+extern void
+lang_print_memory_usage (void);
+
#endif