PR ld/12066
authorAlan Modra <amodra@gmail.com>
Fri, 1 Oct 2010 08:15:42 +0000 (08:15 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 1 Oct 2010 08:15:42 +0000 (08:15 +0000)
* ldexp.c (fold_name): Treat absolute symbols as plain numbers.
* ld.texinfo (Expression Section): Don't say absolute symbols
are addresses.

ld/ChangeLog
ld/ld.texinfo
ld/ldexp.c

index 14a7f7c..4f64be4 100644 (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>
 
        * ldlang.c (lang_place_orphans): Zero vma when relocatable or non-load
index 28c59f2..206068a 100644 (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
 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
index 0549f19..de7f9f2 100644 (file)
@@ -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);