aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2011-10-08 16:51:11 +0000
committerH.J. Lu <hjl.tools@gmail.com>2011-10-08 16:51:11 +0000
commit3e0882af52d7a4b40de87c0be36f1b5bc84ddadb (patch)
tree8356aa5ce3049354ee8dfb631f7f4b98d8591ec2 /ld
parentc3df8c14822028ab319894b4c02c519073b62dba (diff)
downloadfsf-binutils-gdb-3e0882af52d7a4b40de87c0be36f1b5bc84ddadb.zip
fsf-binutils-gdb-3e0882af52d7a4b40de87c0be36f1b5bc84ddadb.tar.gz
fsf-binutils-gdb-3e0882af52d7a4b40de87c0be36f1b5bc84ddadb.tar.bz2
Preserve the maximum alignment/size for common symbols.
bfd/ 2011-10-08 H.J. Lu <hongjiu.lu@intel.com> PR ld/13250 * elflink.c (elf_link_add_object_symbols): Preserve the maximum alignment and size for common symbols. ld/testsuite/ 2011-10-08 H.J. Lu <hongjiu.lu@intel.com> PR ld/13250 * ld-elf/shared.exp (build_tests): Add tests for PR ld/13250. (run_tests): Likewise. * ld-elf/pr13250-1.c: New. * ld-elf/pr13250-2.c: Likewise. * ld-elf/pr13250-3.c: Likewise.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog10
-rw-r--r--ld/testsuite/ld-elf/pr13250-1.c8
-rw-r--r--ld/testsuite/ld-elf/pr13250-2.c10
-rw-r--r--ld/testsuite/ld-elf/pr13250-3.c22
-rw-r--r--ld/testsuite/ld-elf/shared.exp12
5 files changed, 62 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 592e7e3..29ae5ae 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2011-10-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/13250
+ * ld-elf/shared.exp (build_tests): Add tests for PR ld/13250.
+ (run_tests): Likewise.
+
+ * ld-elf/pr13250-1.c: New.
+ * ld-elf/pr13250-2.c: Likewise.
+ * ld-elf/pr13250-3.c: Likewise.
+
2011-10-07 H.J. Lu <hongjiu.lu@intel.com>
* ld-elf/elf.exp: Run --gc-sections tests only if --gc-sections
diff --git a/ld/testsuite/ld-elf/pr13250-1.c b/ld/testsuite/ld-elf/pr13250-1.c
new file mode 100644
index 0000000..e43ebe0
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr13250-1.c
@@ -0,0 +1,8 @@
+int common1[8];
+void
+foo ()
+{
+ int i;
+ for (i = 0; i < sizeof (common1)/ sizeof (common1[0]); i++)
+ common1[i] = -1;
+}
diff --git a/ld/testsuite/ld-elf/pr13250-2.c b/ld/testsuite/ld-elf/pr13250-2.c
new file mode 100644
index 0000000..af8268b
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr13250-2.c
@@ -0,0 +1,10 @@
+extern int common1[8];
+
+extern void foo ();
+
+int
+bar ()
+{
+ foo ();
+ return common1[4];
+}
diff --git a/ld/testsuite/ld-elf/pr13250-3.c b/ld/testsuite/ld-elf/pr13250-3.c
new file mode 100644
index 0000000..a227670
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr13250-3.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int common1[1];
+char common2[2];
+
+extern int bar ();
+
+int
+main ()
+{
+ int i;
+ if (bar () != -1)
+ abort ();
+ if (common1[0] != -1)
+ abort ();
+ for (i = 0; i < sizeof (common2)/ sizeof (common2[0]); i++)
+ if (common2[i] != 0)
+ abort ();
+ printf ("PASS\n");
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
index eea9c7e..9cd0221 100644
--- a/ld/testsuite/ld-elf/shared.exp
+++ b/ld/testsuite/ld-elf/shared.exp
@@ -157,6 +157,15 @@ set build_tests {
{"Build libpr11138-2.o"
"-r -nostdlib" ""
{pr11138-2.c} {} "libpr11138-2.o"}
+ {"Build pr13250-1.so"
+ "-shared" "-fPIC"
+ {pr13250-1.c} {} "libpr13250-1.so"}
+ {"Build pr13250-2.so with libpr13250-1.so"
+ "-shared tmpdir/libpr13250-1.so" "-fPIC"
+ {pr13250-2.c} {} "libpr13250-2.so"}
+ {"Build libpr13250-3.o"
+ "-r -nostdlib" ""
+ {pr13250-3.c} {} "libpr13250-3.o"}
}
run_cc_link_tests $build_tests
@@ -283,6 +292,9 @@ set run_tests {
{"Run with libpr11138-1.so pr11138-2.c"
"--version-script=pr11138-2.map tmpdir/libpr11138-1.so tmpdir/pr11138-2.o" ""
{dummy.c} "pr11138b" "pr11138.out"}
+ {"Run with pr13250-3.c, libpr13250-1.so and libpr13250-2.so"
+ "--as-needed tmpdir/pr13250-3.o tmpdir/libpr13250-1.so tmpdir/libpr13250-2.so" ""
+ {dummy.c} "pr13250" "pass.out"}
}
# NetBSD ELF systems do not currently support the .*_array sections.