mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-09 17:02:22 +08:00
PR ld/11931
* ldlang.h (lang_for_each_statement_worker): Declare. * ldlang.c (lang_for_each_statement_worker): Make global. Don't recurse into children of output_section_statement with constraint set to -1. (print_assignment): Handle NULL output_section->bfd_section. (lang_size_sections_1): Ignore output section statement address when constraint is -1. * emultempl/xtensaelf.em (lang_for_each_statement_worker): Delete.
This commit is contained in:
12
ld/ChangeLog
12
ld/ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2010-09-10 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR ld/11931
|
||||||
|
* ldlang.h (lang_for_each_statement_worker): Declare.
|
||||||
|
* ldlang.c (lang_for_each_statement_worker): Make global. Don't
|
||||||
|
recurse into children of output_section_statement with constraint
|
||||||
|
set to -1.
|
||||||
|
(print_assignment): Handle NULL output_section->bfd_section.
|
||||||
|
(lang_size_sections_1): Ignore output section statement address
|
||||||
|
when constraint is -1.
|
||||||
|
* emultempl/xtensaelf.em (lang_for_each_statement_worker): Delete.
|
||||||
|
|
||||||
2010-09-09 Tristan Gingold <gingold@adacore.com>
|
2010-09-09 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
* NEWS: Add a entry for alpha-vms.
|
* NEWS: Add a entry for alpha-vms.
|
||||||
|
@ -596,59 +596,6 @@ static size_t ld_count_children (lang_statement_union_type *);
|
|||||||
|
|
||||||
extern lang_statement_list_type constructor_list;
|
extern lang_statement_list_type constructor_list;
|
||||||
|
|
||||||
/* Begin verbatim code from ldlang.c:
|
|
||||||
the following are copied from ldlang.c because they are defined
|
|
||||||
there statically. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
|
|
||||||
lang_statement_union_type *s)
|
|
||||||
{
|
|
||||||
for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
|
|
||||||
{
|
|
||||||
func (s);
|
|
||||||
|
|
||||||
switch (s->header.type)
|
|
||||||
{
|
|
||||||
case lang_constructors_statement_enum:
|
|
||||||
lang_for_each_statement_worker (func, constructor_list.head);
|
|
||||||
break;
|
|
||||||
case lang_output_section_statement_enum:
|
|
||||||
lang_for_each_statement_worker
|
|
||||||
(func,
|
|
||||||
s->output_section_statement.children.head);
|
|
||||||
break;
|
|
||||||
case lang_wild_statement_enum:
|
|
||||||
lang_for_each_statement_worker
|
|
||||||
(func,
|
|
||||||
s->wild_statement.children.head);
|
|
||||||
break;
|
|
||||||
case lang_group_statement_enum:
|
|
||||||
lang_for_each_statement_worker (func,
|
|
||||||
s->group_statement.children.head);
|
|
||||||
break;
|
|
||||||
case lang_data_statement_enum:
|
|
||||||
case lang_reloc_statement_enum:
|
|
||||||
case lang_object_symbols_statement_enum:
|
|
||||||
case lang_output_statement_enum:
|
|
||||||
case lang_target_statement_enum:
|
|
||||||
case lang_input_section_enum:
|
|
||||||
case lang_input_statement_enum:
|
|
||||||
case lang_assignment_statement_enum:
|
|
||||||
case lang_padding_statement_enum:
|
|
||||||
case lang_address_statement_enum:
|
|
||||||
case lang_fill_statement_enum:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FAIL ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of verbatim code from ldlang.c. */
|
|
||||||
|
|
||||||
|
|
||||||
static reloc_deps_section *
|
static reloc_deps_section *
|
||||||
xtensa_get_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
|
xtensa_get_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
|
||||||
asection *sec)
|
asection *sec)
|
||||||
|
19
ld/ldlang.c
19
ld/ldlang.c
@ -871,9 +871,10 @@ walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* lang_for_each_statement walks the parse tree and calls the provided
|
/* lang_for_each_statement walks the parse tree and calls the provided
|
||||||
function for each node. */
|
function for each node, except those inside output section statements
|
||||||
|
with constraint set to -1. */
|
||||||
|
|
||||||
static void
|
void
|
||||||
lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
|
lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
|
||||||
lang_statement_union_type *s)
|
lang_statement_union_type *s)
|
||||||
{
|
{
|
||||||
@ -887,8 +888,9 @@ lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
|
|||||||
lang_for_each_statement_worker (func, constructor_list.head);
|
lang_for_each_statement_worker (func, constructor_list.head);
|
||||||
break;
|
break;
|
||||||
case lang_output_section_statement_enum:
|
case lang_output_section_statement_enum:
|
||||||
lang_for_each_statement_worker
|
if (s->output_section_statement.constraint != -1)
|
||||||
(func, s->output_section_statement.children.head);
|
lang_for_each_statement_worker
|
||||||
|
(func, s->output_section_statement.children.head);
|
||||||
break;
|
break;
|
||||||
case lang_wild_statement_enum:
|
case lang_wild_statement_enum:
|
||||||
lang_for_each_statement_worker (func,
|
lang_for_each_statement_worker (func,
|
||||||
@ -3888,6 +3890,7 @@ print_assignment (lang_assignment_statement_type *assignment,
|
|||||||
bfd_boolean is_dot;
|
bfd_boolean is_dot;
|
||||||
bfd_boolean computation_is_valid = TRUE;
|
bfd_boolean computation_is_valid = TRUE;
|
||||||
etree_type *tree;
|
etree_type *tree;
|
||||||
|
asection *osec;
|
||||||
|
|
||||||
for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
|
for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
|
||||||
print_space ();
|
print_space ();
|
||||||
@ -3907,7 +3910,10 @@ print_assignment (lang_assignment_statement_type *assignment,
|
|||||||
computation_is_valid = is_dot || (scan_for_self_assignment (dst, tree) == FALSE);
|
computation_is_valid = is_dot || (scan_for_self_assignment (dst, tree) == FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
exp_fold_tree (tree, output_section->bfd_section, &print_dot);
|
osec = output_section->bfd_section;
|
||||||
|
if (osec == NULL)
|
||||||
|
osec = bfd_abs_section_ptr;
|
||||||
|
exp_fold_tree (tree, osec, &print_dot);
|
||||||
if (expld.result.valid_p)
|
if (expld.result.valid_p)
|
||||||
{
|
{
|
||||||
bfd_vma value;
|
bfd_vma value;
|
||||||
@ -4704,6 +4710,9 @@ lang_size_sections_1
|
|||||||
lang_memory_region_type *r;
|
lang_memory_region_type *r;
|
||||||
|
|
||||||
os = &s->output_section_statement;
|
os = &s->output_section_statement;
|
||||||
|
if (os->constraint == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
/* FIXME: We shouldn't need to zero section vmas for ld -r
|
/* FIXME: We shouldn't need to zero section vmas for ld -r
|
||||||
here, in lang_insert_orphan, or in the default linker scripts.
|
here, in lang_insert_orphan, or in the default linker scripts.
|
||||||
This is covering for coff backend linker bugs. See PR6945. */
|
This is covering for coff backend linker bugs. See PR6945. */
|
||||||
|
@ -580,6 +580,8 @@ extern void lang_add_reloc
|
|||||||
union etree_union *);
|
union etree_union *);
|
||||||
extern void lang_for_each_statement
|
extern void lang_for_each_statement
|
||||||
(void (*) (lang_statement_union_type *));
|
(void (*) (lang_statement_union_type *));
|
||||||
|
extern void lang_for_each_statement_worker
|
||||||
|
(void (*) (lang_statement_union_type *), lang_statement_union_type *);
|
||||||
extern void *stat_alloc
|
extern void *stat_alloc
|
||||||
(size_t);
|
(size_t);
|
||||||
extern void strip_excluded_output_sections
|
extern void strip_excluded_output_sections
|
||||||
|
Reference in New Issue
Block a user