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:
parent
c842b53ae1
commit
b46a87b160
4 changed files with 18 additions and 2 deletions
10
ld/ChangeLog
10
ld/ChangeLog
|
@ -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
|
||||||
|
|
|
@ -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, ")");
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue