2001-02-13 H.J. Lu <hjl@gnu.org>

* 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.
This commit is contained in:
H.J. Lu 2001-02-13 22:23:33 +00:00
parent c842b53ae1
commit b46a87b160
4 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,13 @@
2001-02-13 H.J. Lu <hjl@gnu.org>
* 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 <davidm@hpl.hp.com> 2001-02-09 David Mosberger <davidm@hpl.hp.com>
* emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Add * emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Add

View File

@ -593,10 +593,11 @@ exp_fold_tree (tree, current_section, allocation_done, dot, dotp)
case etree_assign: case etree_assign:
case etree_provide: case etree_provide:
case etree_provided:
if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0) if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0)
{ {
/* Assignment to dot can only be done during allocation */ /* 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")); einfo (_("%F%S can not PROVIDE assignment to location counter\n"));
if (allocation_done == lang_allocating_phase_enum if (allocation_done == lang_allocating_phase_enum
|| (allocation_done == lang_final_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->type = bfd_link_hash_defined;
h->u.def.value = result.value; h->u.def.value = result.value;
h->u.def.section = result.section->bfd_section; 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); exp_print_tree (tree->assign.src);
break; break;
case etree_provide: case etree_provide:
case etree_provided:
fprintf (config.map_file, "PROVIDE (%s, ", tree->assign.dst); fprintf (config.map_file, "PROVIDE (%s, ", tree->assign.dst);
exp_print_tree (tree->assign.src); exp_print_tree (tree->assign.src);
fprintf (config.map_file, ")"); fprintf (config.map_file, ")");

View File

@ -37,6 +37,7 @@ typedef struct {
etree_name, etree_name,
etree_assign, etree_assign,
etree_provide, etree_provide,
etree_provided,
etree_undef, etree_undef,
etree_unspec, etree_unspec,
etree_value, etree_value,

View File

@ -522,6 +522,7 @@ gldelf32ebmip_find_exp_assignment (exp)
switch (exp->type.node_class) switch (exp->type.node_class)
{ {
case etree_provide: case etree_provide:
case etree_provided:
h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst, h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst,
false, false, false); false, false, false);
if (h == NULL) if (h == NULL)
@ -541,7 +542,7 @@ gldelf32ebmip_find_exp_assignment (exp)
{ {
if (! (bfd_elf32_record_link_assignment if (! (bfd_elf32_record_link_assignment
(output_bfd, &link_info, exp->assign.dst, (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"), einfo (_("%P%F: failed to record assignment to %s: %E\n"),
exp->assign.dst); exp->assign.dst);
} }