diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2001-02-13 22:23:33 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2001-02-13 22:23:33 +0000 |
commit | b46a87b1606c5ea718c3e4ad97d6cb391501a916 (patch) | |
tree | 2eb3219b5c8b7ffa0896ad6830306a21983220b1 /ld/ldexp.c | |
parent | c842b53ae1792ed3bc68759dee24dffdbf3bed32 (diff) | |
download | gdb-b46a87b1606c5ea718c3e4ad97d6cb391501a916.zip gdb-b46a87b1606c5ea718c3e4ad97d6cb391501a916.tar.gz gdb-b46a87b1606c5ea718c3e4ad97d6cb391501a916.tar.bz2 |
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.
Diffstat (limited to 'ld/ldexp.c')
-rw-r--r-- | ld/ldexp.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -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, ")"); |