diff options
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/ld.texinfo | 10 | ||||
-rw-r--r-- | ld/ldexp.c | 2 |
3 files changed, 14 insertions, 5 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 14a7f7c..4f64be4 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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> * ldlang.c (lang_place_orphans): Zero vma when relocatable or non-load diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 28c59f2..206068a 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -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 operations. -Some terms in linker expressions are addresses. This is true of all -symbols and for builtin functions that return an address, such as -@code{ADDR}, @code{LOADADDR}, @code{ORIGIN} and @code{SEGMENT_START}. -Other terms are simply numbers, or are builtin functions that return a -non-address value, such as @code{LENGTH}. +Some terms in linker expressions are addresses. This is true of +section relative symbols and for builtin functions that return an +address, such as @code{ADDR}, @code{LOADADDR}, @code{ORIGIN} and +@code{SEGMENT_START}. Other terms are simply numbers, or are builtin +functions that return a non-address value, such as @code{LENGTH}. When the linker evaluates an expression, the result depends on where the expression is located in a linker script. Expressions appearing @@ -553,6 +553,8 @@ fold_name (etree_type *tree) " referenced in expression\n"), tree->name.name); } + else if (output_section == bfd_abs_section_ptr) + new_number (h->u.def.value + h->u.def.section->output_offset); else new_rel (h->u.def.value + h->u.def.section->output_offset, output_section); |