diff options
author | Alan Modra <amodra@gmail.com> | 2011-01-13 13:29:55 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2011-01-13 13:29:55 +0000 |
commit | 01554a74b59e63cc487533b71d94a7606b76a871 (patch) | |
tree | 6699b2f5408a64b91dcdb5492e4385b959f64a14 /ld/ldlang.c | |
parent | 2e57b2afce83621b72b2ac8b54635ad199663dec (diff) | |
download | gdb-01554a74b59e63cc487533b71d94a7606b76a871.zip gdb-01554a74b59e63cc487533b71d94a7606b76a871.tar.gz gdb-01554a74b59e63cc487533b71d94a7606b76a871.tar.bz2 |
PR ld/12356
* ld.texinfo (Miscellaneous Commands): Describe LD_FEATURE.
(Expression Section): Update.
* ld.h (ld_config_type): Add sane_expr.
* ldgram.y (ifile_p1): Add LD_FEATURE.
* ldlex.l (LD_FEATYRE): New.
* ldemul.c (after_parse_default): Delete code handling ld_compatibility.
* ldexp.h (struct ldexp_control): Delete uses_defined.
* ldexp.c: Remove all uses of uses_defined.
(fold_name): Test config.sane_expr rather than ld_compatibility.
(exp_fold_tree_1): Likewise. Adjust handling of assignments
during first phase.
* ldlang.h (ld_compatibility): Delete.
(lang_ld_feature): Declare.
* ldlang.c (ld_compatibility): Delete.
(open_input_bfds): Only handle assignments for --defsym.
(lang_ld_feature): New function.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r-- | ld/ldlang.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index 2bae4ab..c2a768e 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -108,7 +108,6 @@ bfd_boolean delete_output_file_on_failure = FALSE; struct lang_phdr *lang_phdr_list; struct lang_nocrossrefs *nocrossref_list; bfd_boolean missing_file = FALSE; -int ld_compatibility; /* Functions that traverse the linker script and might evaluate DEFINED() need to increment this. */ @@ -3250,7 +3249,9 @@ open_input_bfds (lang_statement_union_type *s, bfd_boolean force) } break; case lang_assignment_statement_enum: - exp_fold_tree_no_dot (s->assignment_statement.exp); + if (s->assignment_statement.exp->assign.hidden) + /* This is from a --defsym on the command line. */ + exp_fold_tree_no_dot (s->assignment_statement.exp); break; default: break; @@ -7845,3 +7846,32 @@ lang_append_dynamic_list_cpp_new (void) lang_append_dynamic_list (dynamic); } + +/* Scan a space and/or comma separated string of features. */ + +void +lang_ld_feature (char *str) +{ + char *p, *q; + + p = str; + while (*p) + { + char sep; + while (*p == ',' || ISSPACE (*p)) + ++p; + if (!*p) + break; + q = p + 1; + while (*q && *q != ',' && !ISSPACE (*q)) + ++q; + sep = *q; + *q = 0; + if (strcasecmp (p, "SANE_EXPR") == 0) + config.sane_expr = TRUE; + else + einfo (_("%X%P: unknown feature `%s'\n"), p); + *q = sep; + p = q; + } +} |