ld/ 2010-12-16 H.J. Lu PR ld/12327 * ldexp.c (exp_fold_tree_1): Don't make subexpressions absolute on etree_name. ld/testsuite/ 2010-12-16 H.J. Lu PR ld/12327 * ld-scripts/defined.exp: Run defined4. * ld-scripts/defined4.d: New. * ld-scripts/defined4.s: Likewise. * ld-scripts/defined4.t: Likewise. diff --git a/ld/ldexp.c b/ld/ldexp.c index de7f9f2..4376364 100644 --- a/ld/ldexp.c +++ b/ld/ldexp.c @@ -862,7 +862,8 @@ exp_fold_tree_1 (etree_type *tree) /* Any value not inside an output section statement is an absolute value. */ if (expld.result.valid_p - && expld.section == bfd_abs_section_ptr) + && expld.section == bfd_abs_section_ptr + && tree->type.node_class != etree_name) make_abs (); } diff --git a/ld/testsuite/ld-scripts/defined.exp b/ld/testsuite/ld-scripts/defined.exp index 15cc079..5742ae9 100644 --- a/ld/testsuite/ld-scripts/defined.exp +++ b/ld/testsuite/ld-scripts/defined.exp @@ -66,4 +66,5 @@ if ![ld_simple_link $ld tmpdir/def "$LDFLAGS -T $srcdir/$subdir/defined.t tmpdir set prms_id 0 run_dump_test "defined2" run_dump_test "defined3" +run_dump_test "defined4" set LDFLAGS "$saved_LDFLAGS" --- /dev/null 2010-12-14 15:22:59.420000000 -0800 +++ binutils/ld/testsuite/ld-scripts/defined4.d 2010-12-16 14:00:46.264217155 -0800 @@ -0,0 +1,10 @@ +#ld: -Tdefined4.t +#nm: -B +#source: defined4.s + +# Check that arithmetic on DEFINED works. +#... +0+0 D defined +#... +0+0 D defined1 +#pass --- /dev/null 2010-12-14 15:22:59.420000000 -0800 +++ binutils/ld/testsuite/ld-scripts/defined4.s 2010-12-16 12:46:23.558273203 -0800 @@ -0,0 +1,4 @@ + .globl defined + .data +defined: + .word 0 --- /dev/null 2010-12-14 15:22:59.420000000 -0800 +++ binutils/ld/testsuite/ld-scripts/defined4.t 2010-12-16 12:46:45.236797081 -0800 @@ -0,0 +1,6 @@ +SECTIONS { + .text : { *(.text) } + .data : { *(.data) } + .bss : { *(.bss) *(COMMON) } +} +defined1 = defined;