aboutsummaryrefslogtreecommitdiff
path: root/ld/ldlang.h
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2003-10-11 09:16:20 +0000
committerHans-Peter Nilsson <hp@axis.com>2003-10-11 09:16:20 +0000
commit420e579cc4f1252a4e915ad866b49f76bda0c1cd (patch)
tree29b5a094a982cb9d580baa4e6c9640f0d7fd8f8a /ld/ldlang.h
parenta8f4cde1ae3d737931ac9d9b58865da965f2b9b9 (diff)
downloadfsf-binutils-gdb-420e579cc4f1252a4e915ad866b49f76bda0c1cd.zip
fsf-binutils-gdb-420e579cc4f1252a4e915ad866b49f76bda0c1cd.tar.gz
fsf-binutils-gdb-420e579cc4f1252a4e915ad866b49f76bda0c1cd.tar.bz2
* ld.texinfo (Builtin Functions) <DEFINED>: Say that only symbols
defined before the statement using DEFINED yield 1. * ldexp.c (fold_name) <case DEFINED>: In lang_first_phase_enum, call lang_track_definedness on symbol. In subsequent phases, use lang_symbol_definition_iteration and lang_statement_iteration to check whether the symbol was defined before the current statement. (exp_fold_tree) <case etree_assign et al>: Call lang_update_definedness before updating symbol type when setting symbol. * ldlang.c (lang_definedness_table): New variable. (lang_definedness_newfunc, lang_track_definedness) (lang_symbol_definition_iteration, lang_update_definedness): New functions. (lang_init): Initialize lang_definedness_table and lang_statement_iteration. (lang_finish): Destroy bfd_hash_table_free. (lang_size_sections): Increment lang_statement_iteration. (lang_do_assignments_1): New function with former lang_do_assignments contents. Change recursive calls to call this function. (lang_do_assignments): Evacuate contents. Increment lang_statement_iteration, then just call lang_do_assignments_1. * ldlang.h (struct lang_definedness_hash_entry) (lang_statement_iteration, lang_track_definedness) (lang_symbol_definition_iteration, lang_update_definedness): Declare.
Diffstat (limited to 'ld/ldlang.h')
-rw-r--r--ld/ldlang.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/ld/ldlang.h b/ld/ldlang.h
index d3e87b1..d0195d0 100644
--- a/ld/ldlang.h
+++ b/ld/ldlang.h
@@ -361,6 +361,14 @@ struct unique_sections {
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;
+};
+
extern struct unique_sections *unique_section_list;
extern lang_output_section_statement_type *abs_output_section;
@@ -375,6 +383,8 @@ extern const char *entry_section;
extern bfd_boolean entry_from_cmdline;
extern lang_statement_list_type file_chain;
+extern int lang_statement_iteration;
+
extern void lang_init
(void);
extern struct memory_region_struct *lang_memory_region_lookup
@@ -517,5 +527,9 @@ extern void lang_add_unique
(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 *);
#endif