PR ld/12066

* ldexp.c (fold_name): Treat absolute symbols as plain numbers.
	* ld.texinfo (Expression Section): Don't say absolute symbols
	are addresses.
This commit is contained in:
Alan Modra
2010-10-01 08:15:42 +00:00
parent 0629d0af5a
commit abf4be64df
3 changed files with 14 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2010-10-01 Alan Modra <amodra@gmail.com>
PR ld/12066
* ldexp.c (fold_name): Treat absolute symbols as plain numbers.
* ld.texinfo (Expression Section): Don't say absolute symbols
are addresses.
2010-09-29 Alan Modra <amodra@gmail.com> 2010-09-29 Alan Modra <amodra@gmail.com>
* ldlang.c (lang_place_orphans): Zero vma when relocatable or non-load * ldlang.c (lang_place_orphans): Zero vma when relocatable or non-load

View File

@ -5453,11 +5453,11 @@ value of a section relative symbol. On the other hand, an absolute
symbol will retain the same value throughout any further link symbol will retain the same value throughout any further link
operations. operations.
Some terms in linker expressions are addresses. This is true of all Some terms in linker expressions are addresses. This is true of
symbols and for builtin functions that return an address, such as section relative symbols and for builtin functions that return an
@code{ADDR}, @code{LOADADDR}, @code{ORIGIN} and @code{SEGMENT_START}. address, such as @code{ADDR}, @code{LOADADDR}, @code{ORIGIN} and
Other terms are simply numbers, or are builtin functions that return a @code{SEGMENT_START}. Other terms are simply numbers, or are builtin
non-address value, such as @code{LENGTH}. functions that return a non-address value, such as @code{LENGTH}.
When the linker evaluates an expression, the result depends on where When the linker evaluates an expression, the result depends on where
the expression is located in a linker script. Expressions appearing the expression is located in a linker script. Expressions appearing

View File

@ -553,6 +553,8 @@ fold_name (etree_type *tree)
" referenced in expression\n"), " referenced in expression\n"),
tree->name.name); tree->name.name);
} }
else if (output_section == bfd_abs_section_ptr)
new_number (h->u.def.value + h->u.def.section->output_offset);
else else
new_rel (h->u.def.value + h->u.def.section->output_offset, new_rel (h->u.def.value + h->u.def.section->output_offset,
output_section); output_section);