From b46a87b1606c5ea718c3e4ad97d6cb391501a916 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 13 Feb 2001 22:23:33 +0000 Subject: [PATCH] 2001-02-13 H.J. Lu * ldexp.h (node_type): Add etree_provided. * ldexp.c (exp_fold_tree): Handle etree_provided. Set the node type to etree_provided if defined by PROVIDE. Allow updating for etree_provided. (exp_print_tree): Handle etree_provided. * mpw-elfmips.c (gldelf32ebmip_find_exp_assignment): Handle etree_provided. --- ld/ChangeLog | 10 ++++++++++ ld/ldexp.c | 6 +++++- ld/ldexp.h | 1 + ld/mpw-elfmips.c | 3 ++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 9b95eb53c4d..f592287e5e3 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,13 @@ +2001-02-13 H.J. Lu + + * ldexp.h (node_type): Add etree_provided. + * ldexp.c (exp_fold_tree): Handle etree_provided. Set the node + type to etree_provided if defined by PROVIDE. Allow updating + for etree_provided. + (exp_print_tree): Handle etree_provided. + * mpw-elfmips.c (gldelf32ebmip_find_exp_assignment): Handle + etree_provided. + 2001-02-09 David Mosberger * emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Add diff --git a/ld/ldexp.c b/ld/ldexp.c index cc3427434ce..2b757fec90c 100644 --- a/ld/ldexp.c +++ b/ld/ldexp.c @@ -593,10 +593,11 @@ exp_fold_tree (tree, current_section, allocation_done, dot, dotp) case etree_assign: case etree_provide: + case etree_provided: if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0) { /* Assignment to dot can only be done during allocation */ - if (tree->type.node_class == etree_provide) + if (tree->type.node_class != etree_assign) einfo (_("%F%S can not PROVIDE assignment to location counter\n")); if (allocation_done == lang_allocating_phase_enum || (allocation_done == lang_final_phase_enum @@ -666,6 +667,8 @@ exp_fold_tree (tree, current_section, allocation_done, dot, dotp) h->type = bfd_link_hash_defined; h->u.def.value = result.value; h->u.def.section = result.section->bfd_section; + if (tree->type.node_class == etree_provide) + tree->type.node_class = etree_provided; } } } @@ -880,6 +883,7 @@ exp_print_tree (tree) exp_print_tree (tree->assign.src); break; case etree_provide: + case etree_provided: fprintf (config.map_file, "PROVIDE (%s, ", tree->assign.dst); exp_print_tree (tree->assign.src); fprintf (config.map_file, ")"); diff --git a/ld/ldexp.h b/ld/ldexp.h index 4c507bd4c3a..5175235d2ba 100644 --- a/ld/ldexp.h +++ b/ld/ldexp.h @@ -37,6 +37,7 @@ typedef struct { etree_name, etree_assign, etree_provide, + etree_provided, etree_undef, etree_unspec, etree_value, diff --git a/ld/mpw-elfmips.c b/ld/mpw-elfmips.c index 3143b2ec148..feeb5c6e5a3 100644 --- a/ld/mpw-elfmips.c +++ b/ld/mpw-elfmips.c @@ -522,6 +522,7 @@ gldelf32ebmip_find_exp_assignment (exp) switch (exp->type.node_class) { case etree_provide: + case etree_provided: h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst, false, false, false); if (h == NULL) @@ -541,7 +542,7 @@ gldelf32ebmip_find_exp_assignment (exp) { if (! (bfd_elf32_record_link_assignment (output_bfd, &link_info, exp->assign.dst, - exp->type.node_class == etree_provide ? true : false))) + exp->type.node_class != etree_assign ? true : false))) einfo (_("%P%F: failed to record assignment to %s: %E\n"), exp->assign.dst); } -- 2.30.2