This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Relative expressions and ASSERT
On Fri, Jan 21, 2011 at 05:21:17AM -0800, H.J. Lu wrote:
> You should add at least one testcase to verify it.
It takes a while to write a proper testcase that doesn't introduce
failures on some target. This one fails on x86_64-mingw32 for
reasons that I haven't fully investigated, but suspect that the
failure is showing a real bug. It looks like a case of address wrap.
* ld-scripts/sane1.d, * ld-scripts/sane1.t: New test.
* ld-scripts/expr.exp: Run it.
Index: ld/testsuite/ld-scripts/expr.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-scripts/expr.exp,v
retrieving revision 1.3
diff -u -p -r1.3 expr.exp
--- ld/testsuite/ld-scripts/expr.exp 28 Dec 2010 18:04:10 -0000 1.3
+++ ld/testsuite/ld-scripts/expr.exp 23 Jan 2011 03:24:05 -0000
@@ -22,3 +22,4 @@
run_dump_test expr1
run_dump_test expr2
+run_dump_test sane1
Index: ld/testsuite/ld-scripts/sane1.d
===================================================================
RCS file: ld/testsuite/ld-scripts/sane1.d
diff -N ld/testsuite/ld-scripts/sane1.d
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-scripts/sane1.d 23 Jan 2011 03:24:05 -0000
@@ -0,0 +1,33 @@
+# source: data.s
+# ld: -T sane1.t
+# nm: -B
+# notarget: mmix-* pdp11-* rs6000-*-aix* tic30-*-aout
+# mmix symbol sections are wrong, pdp sign extends 16-bit addresses
+# rs6000-aix and tic30 don't like empty .text
+
+#...
+0+8004 D d1
+0+8024 D d2
+0+0020 A diff
+0+0100 A e1
+0+0080 A e2
+0+8000 A e3
+0+0090 A prod
+0+8002 D s1
+0+8001 D s2
+0+8007 D s3
+0+8002 A s4
+0+0004 A s5
+0+19a0 A s6
+0+8020 D s_diff
+0+8090 D s_prod
+0+8028 D s_sum
+0+8020 D s_sum_neg
+0+0028 A sum
+0+0020 A sum_neg
+0+8002 D x1
+0+8001 D x2
+0+8007 D x3
+0+8002 A x4
+0+0004 A x5
+0+19a0 A x6
Index: ld/testsuite/ld-scripts/sane1.t
===================================================================
RCS file: ld/testsuite/ld-scripts/sane1.t
diff -N ld/testsuite/ld-scripts/sane1.t
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-scripts/sane1.t 23 Jan 2011 03:24:05 -0000
@@ -0,0 +1,36 @@
+LD_FEATURE("SANE_EXPR")
+e1 = 0x100;
+e2 = 0x80;
+e3 = e1 * e2;
+SECTIONS
+{
+ . = e3;
+ .data :
+ {
+ d1 = 4;
+ . += d1 + 5 << 2;
+ d2 = .;
+ s_diff = d2 - d1;
+ s_sum_neg = d2 + -d1;
+ s_sum = d2 + d1;
+ s_prod = d2 * d1;
+ s1 = d1 - 2;
+ s2 = d2 % 5;
+ s3 = d2 / 5;
+ s4 = ABSOLUTE (d1) - 2;
+ s5 = ABSOLUTE (d2) % 5;
+ s6 = ABSOLUTE (d2) / 5;
+ }
+ /DISCARD/ : {*(*)}
+
+diff = d2 - d1;
+sum_neg = d2 + -d1;
+sum = d2 + d1;
+prod = d2 * d1;
+x1 = d1 - 2;
+x2 = d2 % 5;
+x3 = d2 / 5;
+x4 = ABSOLUTE (d1) - 2;
+x5 = ABSOLUTE (d2) % 5;
+x6 = ABSOLUTE (d2) / 5;
+}
--
Alan Modra
Australia Development Lab, IBM