aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-elf
diff options
context:
space:
mode:
Diffstat (limited to 'ld/testsuite/ld-elf')
-rw-r--r--ld/testsuite/ld-elf/begin.c5
-rw-r--r--ld/testsuite/ld-elf/end.c7
-rw-r--r--ld/testsuite/ld-elf/endhidden.c8
-rw-r--r--ld/testsuite/ld-elf/endprotected.c8
-rw-r--r--ld/testsuite/ld-elf/foo.c11
-rw-r--r--ld/testsuite/ld-elf/foo.map4
-rw-r--r--ld/testsuite/ld-elf/hidden.out3
-rw-r--r--ld/testsuite/ld-elf/main.c8
-rw-r--r--ld/testsuite/ld-elf/normal.out3
-rw-r--r--ld/testsuite/ld-elf/shared.exp112
10 files changed, 169 insertions, 0 deletions
diff --git a/ld/testsuite/ld-elf/begin.c b/ld/testsuite/ld-elf/begin.c
new file mode 100644
index 0000000..ccc47d4
--- /dev/null
+++ b/ld/testsuite/ld-elf/begin.c
@@ -0,0 +1,5 @@
+extern void foo (void);
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/ld/testsuite/ld-elf/end.c b/ld/testsuite/ld-elf/end.c
new file mode 100644
index 0000000..f7b681a
--- /dev/null
+++ b/ld/testsuite/ld-elf/end.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/ld/testsuite/ld-elf/endhidden.c b/ld/testsuite/ld-elf/endhidden.c
new file mode 100644
index 0000000..2cab97a
--- /dev/null
+++ b/ld/testsuite/ld-elf/endhidden.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+__attribute__ ((visibility ("hidden")))
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/ld/testsuite/ld-elf/endprotected.c b/ld/testsuite/ld-elf/endprotected.c
new file mode 100644
index 0000000..b6b39ea
--- /dev/null
+++ b/ld/testsuite/ld-elf/endprotected.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+__attribute__ ((visibility ("protected")))
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/ld/testsuite/ld-elf/foo.c b/ld/testsuite/ld-elf/foo.c
new file mode 100644
index 0000000..c84baee
--- /dev/null
+++ b/ld/testsuite/ld-elf/foo.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+void
+foo (void)
+{
+ printf ("TEST2\n");
+}
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/ld/testsuite/ld-elf/foo.map b/ld/testsuite/ld-elf/foo.map
new file mode 100644
index 0000000..6b993de
--- /dev/null
+++ b/ld/testsuite/ld-elf/foo.map
@@ -0,0 +1,4 @@
+FOO {
+ global: foo;
+ local: *;
+};
diff --git a/ld/testsuite/ld-elf/hidden.out b/ld/testsuite/ld-elf/hidden.out
new file mode 100644
index 0000000..7ad7cbe
--- /dev/null
+++ b/ld/testsuite/ld-elf/hidden.out
@@ -0,0 +1,3 @@
+TEST2
+TEST1
+MAIN
diff --git a/ld/testsuite/ld-elf/main.c b/ld/testsuite/ld-elf/main.c
new file mode 100644
index 0000000..24f9dcc
--- /dev/null
+++ b/ld/testsuite/ld-elf/main.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int
+main (void)
+{
+ printf ("MAIN\n");
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/normal.out b/ld/testsuite/ld-elf/normal.out
new file mode 100644
index 0000000..3b721f0
--- /dev/null
+++ b/ld/testsuite/ld-elf/normal.out
@@ -0,0 +1,3 @@
+TEST1
+TEST1
+MAIN
diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
new file mode 100644
index 0000000..9222358
--- /dev/null
+++ b/ld/testsuite/ld-elf/shared.exp
@@ -0,0 +1,112 @@
+# Expect script for various ELF tests.
+# Copyright 2006 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+set build_tests {
+ {"Build libfoo.so"
+ "-shared" "-fPIC"
+ {foo.c} {} "libfoo.so"}
+ {"Build versioned libfoo.so"
+ "-shared -Wl,--version-script=foo.map" "-fPIC"
+ {foo.c} {} "libfoov.so" "-fPIC"}
+ {"Build libbar.so"
+ "-shared" "-fPIC"
+ {begin.c end.c} {} "libbar.so"}
+ {"Build hidden libbar.so"
+ "-shared" "-fPIC"
+ {begin.c endhidden.c} {} "libbarh.so"}
+ {"Build protected libbar.so"
+ "-shared" "-fPIC"
+ {begin.c endprotected.c} {} "libbarp.so"}
+ {"Build libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {end.c} {} "libbarfoo.so"}
+ {"Build libar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {end.c} {} "libbarfoov.so"}
+ {"Build hidden libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {endhidden.c} {} "libbarhfoo.so"}
+ {"Build hidden libar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {endhidden.c} {} "libbarhfoov.so"}
+ {"Build protected libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {endprotected.c} {} "libbarpfoo.so"}
+ {"Build protected libbar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {endprotected.c} {} "libbarpfoov.so"}
+}
+
+set run_tests {
+ {"Run normal with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endprotected.o" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endhidden.o" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run normal with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/end.o" ""
+ {main.c} "normalv" "normal.out"}
+ {"Run protected with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endhidden.o" ""
+ {main.c} "hiddenv" "hidden.out"}
+ {"Run normal libbar.so with libfoo.so"
+ "tmpdir/libbarfoo.so tmpdir/libfoo.so" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected libbar.so with libfoo.so"
+ "tmpdir/libbarpfoo.so tmpdir/libfoo.so" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden libbar.so with libfoo.so"
+ "tmpdir/libbarhfoo.so tmpdir/libfoo.so" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run normal libbar.so with versioned libfoo.so"
+ "tmpdir/libbarfoov.so tmpdir/libfoov.so" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected libbar.so with versioned libfoo.so"
+ "tmpdir/libbarpfoov.so tmpdir/libfoov.so" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden libbar.so with versioned libfoo.so"
+ "tmpdir/libbarhfoov.so tmpdir/libfoov.so" ""
+ {main.c} "hidden" "hidden.out"}
+}
+
+run_cc_link_tests $build_tests
+# NetBSD ELF systems do not currently support the .*_array sections.
+run_ld_link_exec_tests [list "*-*-netbsdelf*"] $run_tests